ฉันจะตรวจสอบอุปกรณ์ของฉันโดย ADB บน ​​Linux ได้อย่างไร


18

ฉันเพิ่งได้Wileyfox Swift อันใหม่ของฉัน- และก่อนที่จะนำไปใช้ฉันต้องการoem unlockและรูทมัน (อย่างที่ฉันมักจะทำกับอุปกรณ์ใหม่;) ปัญหาคือแม้ว่าจะเปิดใช้งานบนอุปกรณ์และมีบรรทัดที่เกี่ยวข้อง/etc/udev/rules.d/51-android.rulesอยู่ adb devicesอุปกรณ์ที่มองไม่เห็นด้วย

ฉันรู้ว่ามีคำตอบมากมายกระจายอยู่ทั่วไซต์นี้ แต่พวกเขาก็หายากครอบคลุมอุปกรณ์เฉพาะหรือไม่ครอบคลุมทุกขั้นตอนที่ฉันต้องการในที่สุด ดังนั้นฉันจึงถือเป็นโอกาสสำหรับคำถามที่เป็นที่ยอมรับและไม่ขึ้นกับอุปกรณ์และให้คำตอบโดยละเอียดด้านล่าง:

ฉันจะทำให้อุปกรณ์ Android ของฉันมองเห็นและใช้งานadbบน Linux ได้อย่างไร?


ฉันเปิดให้นักวิจารณ์เสมอ - แต่การลงคะแนนที่ไม่มีคำอธิบายนั้นยากที่จะตีความ ดังนั้นผู้ลงคะแนนโปรดอธิบายสิ่งที่ควรปรับปรุงในคำถาม ฉันสัญญาว่าจะไม่ละเมิดอำนาจ mod ของฉันสำหรับการลงโทษ :)
อิซซี่

3
ฉันคิดว่าผู้มีสิทธิเลือกตั้งไม่ทราบว่าคุณโพสต์คำถามเพื่อตอบคำถามด้วยตนเอง (ต้องไม่สังเกตเห็นคุณในคำตอบ) เนื่องจากไม่มีคำใบ้ในคำถามหรือความคิดเห็นที่มีการโพสต์เพื่อจุดประสงค์ในการตอบตนเองผู้มีสิทธิเลือกตั้งอาจคัดค้านวรรคสองถึงสุดท้าย (แสดงความขี้เกียจหากอ่านในบริบทของผู้ใช้ทั่วไปและคำถามของพวกเขา) ฉันไม่สามารถคิดเหตุผลอื่น ๆ ณ ตอนนี้
Firelord

1
@ Firelord ฟังดูน่าเชื่อถือ (แก้ไขคำถามเล็กน้อยเพื่อป้องกันไม่ให้เกิดข้อผิดพลาดเพิ่มเติม) แต่จากนั้นผู้ใช้รายนั้นควรมีคำตอบที่ยกระดับขึ้น หรือว่าฉันคิดถึงบางสิ่งที่นั่นเช่นกัน? ;)
Izzy

คำตอบ:


24

เปิดใช้งานการแก้ไขข้อบกพร่อง USB บนอุปกรณ์

ซึ่งจะดำเนินการในการตั้งค่า> การพัฒนา หากคุณไม่มีรายการนั้นในเมนูการตั้งค่าของคุณให้ไปที่การตั้งค่า› เกี่ยวกับเลื่อนไปที่ "หมายเลขสร้าง" และกดมันเหมือนลิงจนกว่าอุปกรณ์ของคุณจะแสดงความยินดีที่คุณได้เป็นนักพัฒนา กลับไปที่หน้าหลักของเมนูการตั้งค่าและใกล้กับด้านล่างคุณควรเห็นการตั้งค่า "การพัฒนา" (หรือ "นักพัฒนา") ทันที ป้อนและเปิดใช้งานการแก้ไขข้อบกพร่อง USBที่นี่

ระบุอุปกรณ์

ก่อนอื่นเราต้องรู้ว่าอุปกรณ์ระบุบนบัส USB ได้อย่างไร สำหรับการที่มีอุปกรณ์ Android ที่ไม่lsusbเชื่อมต่อคว้าเปลือกและเรียกใช้คำสั่ง จากนั้นเชื่อมต่ออุปกรณ์และเรียกใช้คำสั่งอีกครั้ง พบจุดใหม่ สำหรับWileyfox Swiftนี่คือ "อุปกรณ์นิรนาม":

Bus 004 Device 003: ID 2970:2282

การตั้งค่ากฎสำหรับ ADB

ตอนนี้เราต้องการตัวเลขที่ท้ายบรรทัดข้างบน: 2970:2282. เหล่านี้ระบุผู้จัดจำหน่าย (2970) และอุปกรณ์ตัวเอง (2282) มีรายละเอียดเหล่านี้เราต้องการรูทเชลล์บนเครื่องลีนุกซ์ของเราเพื่อแก้ไข (หรือสร้างหากยังไม่มี/etc/udev/rules.d/51-android.rulesไฟล์) ในนั้นเพิ่มบรรทัดสำหรับอุปกรณ์ของคุณ บรรทัดตัวอย่างต่อไปนี้แสดงให้เห็นว่ามันเป็นอย่างไรสำหรับWileyfox Swift: ¹

SUBSYSTEMS=="usb", ATTRS{idVendor}=="2970", ATTRS{idProduct}=="2282", MODE="0666" GROUP="androiddev", SYMLINK+="android%n"

lsusbหากคุณมีอุปกรณ์ที่แตกต่างกันแทนที่ผู้ขายและรหัสผลิตภัณฑ์กับสิ่งที่คุณได้พบข้างต้นเมื่อทำงาน คำอธิบายสั้น ๆ ของบรรทัด:

  • SUBSYSTEMS=="usb": เห็นได้ชัดว่ากฎนี้มีไว้สำหรับ USB เท่านั้น;)
  • ATTRS{idVendor}=="2970": รหัสผู้จำหน่ายของอุปกรณ์กฎนี้มีไว้สำหรับ
  • ATTRS{idProduct}=="2282": ID อุปกรณ์
  • MODE="0666": สิทธิ์ที่โหนดอุปกรณ์จะได้รับ 0666ค่อนข้างหละหลวมให้สิทธิ์ผู้ใช้ทุกคนในระบบของคุณในการอ่านและเขียน - ดังนั้นหากคุณเป็นกังวลคุณอาจลองแทนที่ด้วย0660(ให้เฉพาะเจ้าของและกลุ่มอ่าน - เขียนและปฏิเสธทุกอย่างให้ผู้อื่น)
  • GROUP="androiddev": กลุ่มอุปกรณ์ที่โหนดควรอยู่ นี่ควรเป็นกลุ่มที่ผู้ใช้ตั้งใจทำงานกับอุปกรณ์ที่เป็นของ
  • SYMLINK+="android%n": เพียงแค่ให้ชื่อที่ดีแก่โหนดเพื่อให้คุณสามารถค้นหาได้ง่ายขึ้น/dev(ในกรณีของฉันมันจะปรากฏขึ้นที่นั่นในภายหลัง/dev/android5)

กฎนั้นเข้ามา/etc/udev/rules.d/51-android.rulesเราต้องบอกudevให้ใช้มัน วิธีที่ปลอดภัยที่สุด (ถัดจากรีบูต;) กำลังเริ่มudevบริการใหม่ ทั้งนี้ขึ้นอยู่กับ distro ลินุกซ์ของคุณนี้สามารถทำได้ทั้งผ่านหรือservice udev restart/etc/init.d/udev restart

เสร็จแล้วปล่อยให้รูทเชลล์ ยกเลิกการเชื่อมต่อและเชื่อมต่ออุปกรณ์ Android ของคุณแล้วลองadb devicesอีกครั้ง อุปกรณ์ส่วนใหญ่ปรากฏตัวขึ้นในขณะนี้ แต่ไม่ใช่Wileyfox Swiftซึ่งเห็นได้ชัดว่าต้องการอุปกรณ์เสริมบางอย่าง หากคุณอยู่ในสถานการณ์นั้นให้เปิด (หรือสร้างหากไม่มี) ไฟล์~/.android/adb_usb.iniและเพิ่มบรรทัดเดียวโดยตั้งชื่อผู้ขายที่คุณพบด้วยlsusbด้านบน สำหรับSwiftที่จะเป็น0x2970(yupp ที่นี่คุณจะต้องนำหน้าด้วย0xเพื่อชี้ให้เห็นว่ามันเป็นเลขฐานสิบหก) จากนั้นเริ่มต้นเซิร์ฟเวอร์ ADB adb kill-server && adb start-serverนี้: ตัดการเชื่อมต่อและเชื่อมต่ออุปกรณ์อีกครั้ง ตอนนี้adb devicesควรเห็นมัน

กำลังเชื่อมต่ออุปกรณ์

คุณอาจสังเกตเห็นบอกคุณสิ่งที่ต้องการadb devices 0123456789ABCDEF unauthorizedไม่เป็นไรและเพื่อความปลอดภัย (อุปกรณ์): คอมพิวเตอร์ของคุณต้องได้รับอนุญาตก่อนจึงจะสามารถเข้าถึงอุปกรณ์ได้ ดังนั้นเพียงแค่ออกadb shellตอนนี้ - ซึ่งจะปิดด้วยerror: device unauthorized. Please check the confirmation dialog on your device.คำแนะนำการติดตาม (เลือกทำเครื่องหมายที่กล่องกาเครื่องหมายเพื่ออนุญาตคอมพิวเตอร์ของคุณอย่างถาวร) และคุณทำเสร็จแล้ว: คุณสามารถใช้เพื่อเข้าถึงอุปกรณ์ของคุณได้แล้ว


ปรับปรุง:

¹โปรดทราบว่าในเวอร์ชัน Linux ในภายหลังไวยากรณ์สำหรับกฎ UDEV นั้นมีการเปลี่ยนแปลงเล็กน้อยเช่นjcomeau_ictxชี้ให้เห็นในความคิดเห็นของเขา สำหรับค่าที่เราพบข้างต้นนั้นจะเป็น:

SUBSYSTEM=="usb", ATTR{idVendor}=="2970", ATTR{idProduct}=="2282", MODE="0666", GROUP="plugdev", SYMLINK+="android%n"

ความแตกต่างสองประการ: เป็นตอนนี้SUBSYSTEM(ไม่มีพหูพจน์) และกลุ่มได้เปลี่ยนจากandroiddevเป็นplugdev(อดีตไม่มีอยู่ในระบบล่าสุดส่วนหลังทำและมักจะได้รับมอบหมายอย่างน้อยให้กับผู้ใช้คนแรก)

นอกจากนี้คุณอาจต้องเพิ่ม VendidID ของคุณ~/.android/adb_usb.ini(หนึ่ง ID ต่อบรรทัดในรูปแบบเลขฐานสิบหก):

# ANDROID 3RD PARTY USB VENDOR ID LIST
# 1 USB VENDOR ID PER LINE.
0x2970

1
รูปแบบสำหรับกฎ udev นั้นแตกต่างกันในระบบ Jessie ของฉัน: jcomeau@aspire:~$ tail -n 1 /etc/udev/rules.d/99-android.rules SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", ATTR{idProduct}=="201d", MODE="0666", GROUP="plugdev", SYMLINK+="android%n" jcomeau@aspire:~$ cat ~/.android/adb_usb.ini # ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT. # USE 'android update adb' TO GENERATE. # 1 USB VENDOR ID PER LINE. 0x0e8d ฉันต้องเพิกเฉยต่อคำแนะนำในการเรียกใช้android update adbและป้อนด้วยตนเองตามที่คุณระบุ
jcomeau_ictx

@ jcomeau_ictx ขอบคุณสำหรับความคิดเห็น! เท่าที่ฉันเห็นจากความคิดเห็นของคุณมันแค่ใช้กลุ่มผู้ใช้อื่น ( plugdevแทนandroiddev) ไม่ได้รับการยืนยัน แต่ฉันขอบอกว่าส่วนสำคัญที่นี่คือเป็นกลุ่มผู้ใช้ของคุณ (ซึ่งคุณต้องการใช้ USB ด้วย) ก็มีเช่นกัน
Izzy

1
ยังSUBSYSTEMแทนSUBSYSTEMS, ATTRแทนATTRSเครื่องหมายจุลภาคหลังจากMODE="0666" ไม่แน่ใจว่าหากมีการเปลี่ยนแปลงทุกคนที่มีความจำเป็น แต่นั่นคือสิ่งที่ทำงาน
jcomeau_ictx

โอ้ - ขอบคุณที่พลาดเด็กเล็กเหล่านั้น @jcomeau_ictx - จุดดี!
Izzy

สำหรับ Linux Non Savvy folks sudo wget -O /etc/udev/rules.d/51-android.rulesจากที่นี่ทำงานให้ฉันสำหรับ Xiaomi Mi A1 ของฉัน แน่นอนว่ามันเป็นการดีกว่าที่จะเรียนรู้ แต่ดีที่ขี้เกียจ :)
beeshyams

0

ความคิดเห็นเล็กน้อยจากการกระจาย Linux ที่ใหม่กว่า Fedora 29 พร้อมโทรศัพท์ Nexus 5X หรือโทรศัพท์ Nokia 7.1 (Android One)

ตัดการเชื่อมต่อโทรศัพท์ก่อนหากเชื่อมต่ออยู่แล้ว

  1. ติดตั้ง android-tools ซึ่งจะจัดหา ADB ( sudo dnf install android-tools)
  2. คัดลอกกฎ udev ( sudo cp /usr/share/doc/android-tools/51-android.rules /etc/udev/rules.d)
  3. โหลดกฎ udev อีกครั้ง ( sudo udevadm control --reload-rules)
  4. รีสตาร์ท ADB เพื่อให้แน่ใจ ( sudo systemctl restart adb)

ตอนนี้เชื่อมต่อโทรศัพท์และเรียกใช้adb devicesจากบรรทัดคำสั่ง คุณอาจจะเห็นอุปกรณ์ที่ระบุว่า "ไม่มีสิทธิ์" นี่เป็นเรื่องปกติ
หากไม่ได้อยู่ในรายการคุณจะต้องเพิ่มอุปกรณ์ของคุณไปยังไฟล์ udev rules แต่สำหรับฉันอุปกรณ์ที่ผ่านการทดสอบเพิ่งทำงานกับกฎที่กำหนดไว้ล่วงหน้า

เรียกใช้adb shellและหวังว่าคุณจะได้รับการแจ้งเตือนความปลอดภัยทางโทรศัพท์โดยถามว่าคุณต้องการเชื่อถือคอมพิวเตอร์หรือไม่เลือกใช่
หากคอมพิวเตอร์ของคุณระบุว่า "ข้อผิดพลาด: การอนุญาตไม่เพียงพอสำหรับอุปกรณ์" คุณต้องตรวจสอบให้แน่ใจว่าในโทรศัพท์ที่คุณตั้งค่าพอร์ต USB ของคุณเป็นโหมด "ถ่ายโอนไฟล์" และไม่ใช่ "ชาร์จอุปกรณ์นี้" บน Android 8.1 จะอยู่ในการตั้งค่าภายใต้ "อุปกรณ์ที่เชื่อมต่อ"> "USB"

ฉันสังเกตเห็นว่าแม้ว่าคุณจะมีทุกอย่างที่ทำงานในวันนี้พรุ่งนี้ก็อาจจะแตกโดยไม่มีเหตุผลชัดเจน หากสิ่งนั้นเกิดขึ้นก่อนอื่นให้ตรวจสอบการตั้งค่าพอร์ต USB บนอุปกรณ์ซึ่งอาจเปลี่ยนกลับไปเป็นโหมดการชาร์จและหากล้มเหลวให้ยกเลิกการอนุญาตการตรวจแก้จุดบกพร่อง USB บนอุปกรณ์ (ในการตั้งค่าภายใต้ตัวเลือกสำหรับนักพัฒนา) และหวังว่า -Up adb shellอีกครั้งเมื่อคุณเรียกใช้

ด้วยสิ่งนี้ฉันสามารถเรียกใช้ Android Studio และเรียกใช้บนอุปกรณ์ที่เชื่อมต่อ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.