เมื่อฉันลอง:
$ adb devices
ฉันได้รับผล:
List of devices attached
???????????? no permissions
อะไรคือปัญหา?
ลองบนเครื่อง Ubuntu 16.04 และทำงานได้อย่างสมบูรณ์ ลองใช้อุปกรณ์ 7.1.1 และมันก็ทำงานได้อย่างสมบูรณ์
เมื่อฉันลอง:
$ adb devices
ฉันได้รับผล:
List of devices attached
???????????? no permissions
อะไรคือปัญหา?
ลองบนเครื่อง Ubuntu 16.04 และทำงานได้อย่างสมบูรณ์ ลองใช้อุปกรณ์ 7.1.1 และมันก็ทำงานได้อย่างสมบูรณ์
คำตอบ:
ลองรีสตาร์ทเซิร์ฟเวอร์ Adb
sudo adb kill-server
แล้ว
sudo adb start-server
จากนั้นเชื่อมต่ออุปกรณ์ของคุณเปิดการดีบักและพิมพ์
adb devices
adb devices
ขณะนี้แสดงอุปกรณ์ (และฉันจะได้รับกล่องโต้ตอบลายนิ้วมือ) อย่างไรก็ตามมันยังไม่สามารถใช้งานได้กับ android studio นอกจากนี้เมื่อฉันเรียกใช้ android studio และจากนั้นเรียกใช้adb devices
จากคอนโซลฉันได้รับ "เซิร์ฟเวอร์ adb ล้าสมัย" และเซิร์ฟเวอร์ adb รีสตาร์ท หลังจากนั้นฉันถึงสถานการณ์ "ไม่มีการอนุญาต" อีกครั้ง
มีปัญหาเดียวกัน ตรวจสอบให้แน่ใจว่าโหมด USB ของอุปกรณ์ไม่ได้ ชาร์จเพียงอย่างเดียวเท่านั้นที่แก้ไขได้
udev มีแนวโน้มว่าจะเพิ่มอุปกรณ์ของคุณไม่ถูกต้อง ฉันก็มีปัญหานี้เช่นกันและเจอวิธีแก้ปัญหาที่ค่อนข้างง่าย
ค้นหาอุปกรณ์ของคุณใน lsusb
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 8087:0a2b Intel Corp.
Bus 001 Device 002: ID 05c8:03a2 Cheng Uei Precision Industry Co., Ltd (Foxlink)
Bus 001 Device 006: ID 18d1:4ee7 Google Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
จุดที่น่าสนใจในกรณีนี้:
Bus 001 Device 006: ID 18d1:4ee7 Google Inc.
ตรวจสอบไฟล์อุปกรณ์ที่เกี่ยวข้อง
$ ls -l /dev/bus/usb/001/006
มีแนวโน้มที่คุณจะเห็นสิ่งที่ชอบ
crw-rw-r-- 1 root root 189, 5 Sep 8 21:47 /dev/bus/usb/001/006
ซึ่งหมายความว่าไฟล์อุปกรณ์จะเป็นของผู้ใช้รูทและกลุ่มรูทซึ่งเป็นเหตุผลที่ adb สามารถเข้าถึงมันในฐานะที่เป็นรูท แต่ไม่เป็นผู้ใช้มาตรฐานของคุณ
สิ่งนี้สามารถแก้ไขได้โดยการสร้างกฎ udev ใหม่ - ฉันใช้/etc/udev/rules.d/51-android.rules
- เพื่อเพิ่มอุปกรณ์ลงในกลุ่มplugdev
ซึ่ง adb ถือว่าคุณเป็นสมาชิกของ (คุณจะต้องตรวจสอบการใช้id
)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee7", MODE="0660",
GROUP="plugdev", SYMLINK+="android%n"
** อย่าลืมแทนที่ ATTR {idProduct} == "4ee7" ด้วยรหัสผลิตภัณฑ์ของคุณเองที่คุณพบในขั้นตอนที่หนึ่ง ** (หากผู้ให้บริการของคุณไม่ใช่ Google Inc. ให้เปลี่ยนรหัสผู้ขายด้วยรหัสก่อนโคลอนใน lsusb)
ตอนนี้เพียงถอดปลั๊กอุปกรณ์ของคุณแล้วเสียบกลับเข้าไปใหม่ (udev ควรตอบกลับไฟล์ใหม่โดยอัตโนมัติ) และ tadaa:
$ adb devices
List of devices attached
YC873P0G device
ที่มา: การเพิ่มกฎ udev สำหรับอุปกรณ์ Android ที่ใช้ในการดีบัก USB - Janos Gyerik
หากต้องการขยายคำตอบของ Sumeet Deshmukh วิธีการของเขาจะใช้งานทั่วไป - หากคุณต้องการใช้adb
คำสั่งจากคอนโซลเท่านั้น
อย่างไรก็ตาม Android Studio นั้นเริ่มเซิร์ฟเวอร์ adb ของตัวเองแล้วฆ่าเรา ซึ่งหมายความว่าหลังจากที่เราฆ่า / เริ่มต้นเซิร์ฟเวอร์ด้วย sudo แล้ว Studio จะเริ่มต้นใหม่ซึ่งนำไปสู่สถานการณ์เริ่มต้น - ไม่มีสิทธิ์
การแก้ปัญหาคือการเริ่มต้นสตูดิโอก่อนจากนั้นจึงเริ่ม / หยุดเซิร์ฟเวอร์ การทำเช่นนั้นฉันจัดการเพื่อให้ Nexus 5X ของฉันปรากฏเป็นเป้าหมายการทำงานที่ถูกต้องในสตูดิโอ
นี่ไม่ใช่สถานการณ์ที่ดีที่สุด (ต้องเรียกใช้คำสั่งทุกครั้งที่คุณเริ่ม Studio) แต่เป็นการหลอกลวงในวิธีที่รวดเร็วและสกปรก หากฉันพบทางออกที่ถาวรกว่านี้ฉันจะอัปเดตคำตอบนี้
การเปลี่ยนโหมด USB จากโทรศัพท์ทำได้สำหรับฉัน (ฉันตั้งให้เป็นFile Transfer )
โปรดอย่าทำตามวิธีแก้ปัญหาที่แนะนำให้ใช้sudo
( sudo adb start-server
)! adb ที่รันในฐานะ root (ผู้ดูแลระบบ) และไม่ควรเรียกใช้เช่นนั้น !!! มันเป็นวิธีแก้ปัญหาที่ไม่ดี !
ทุกอย่างที่ทำงานในฐานะรูทสามารถทำอะไรก็ได้ในระบบของคุณถ้ามันสร้างหรือแก้ไขไฟล์สามารถเปลี่ยนการอนุญาตให้รูทใช้งานได้โดยรูทเท่านั้น อีกครั้งไม่ได้!
สิ่งที่ถูกต้องที่จะทำคือการตั้งค่าระบบของคุณเพื่อให้ผู้ได้รับอนุญาตให้ตรวจสอบคำแนะนำนี้ผมเขียนเกี่ยวกับวิธีการทำอย่างถูกต้อง
มันไม่ทำงานสำหรับฉันหลังจากที่ฉันเพิ่มตัวเองลงในplugdev
กลุ่มและรีบูตเครื่องเพียงเพื่อให้แน่ใจว่าการเปลี่ยนแปลงจะมีผลในทุกช่วงเชลล์ของฉัน ฉันพบว่าไม่มี51-android.rules
ไฟล์อยู่/etc/udev/rules.d
และต้องทำสิ่งต่อไปนี้เพื่อแก้ไขปัญหา:
# Here the vendor ID is of Google
$ echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0660", GROUP="plugdev"' | sudo tee —append /etc/udev/rules.d/51-android.rules
$ sudo chmod a+r /etc/udev/rules.d/51-android.rules
$ sudo udevadm control --reload-rules
$ sudo service udev restart
ฉันต้องถอดปลั๊กและเสียบอุปกรณ์ Android ของฉันอีกครั้ง
คุณต้องให้สิทธิ์บนอุปกรณ์ Android ของคุณ ไปที่การตั้งค่า> ตัวเลือกผู้พัฒนา ลองปิดการดีบัก USB แล้วเปิดใหม่อีกครั้ง ถอดสายเคเบิลออกแล้วเชื่อมต่อใหม่ ลองลบการให้สิทธิ์ที่บันทึกไว้ทั้งหมดจากตัวเลือกนักพัฒนา ตอนนี้มันควรจะขอสิทธิ์ในการดีบั๊กโดยการแจ้งในโทรศัพท์ ยอมรับมัน.
M0Rf30/android-udev-rules
ชุมชน GitHub รักษากฎ udev
https://github.com/M0Rf30/android-udev-rules/blob/master/51-android.rules
นี่คือรายการ udev-rules ที่สมบูรณ์แบบที่สุดเท่าที่ฉันเคยเห็นมามากกว่าที่แนะนำsudo apt-get install android-tools-adb
ไว้ในเอกสารทางการให้ลองใช้
ฉันไม่รู้ว่าทำไมงานนี้ แต่นี่เป็นทางออกเดียวที่เหมาะกับฉัน
ค้นหาตำแหน่งที่ adb กำลังทำงาน (หากคุณเป็นเหมือนฉันคุณติดตั้งหลายรุ่น) โปรดทราบว่าเครื่องมือตอบสนองแบบดั้งเดิมอาจตัดสินใจใช้เวอร์ชันอื่นแบบสุ่มเพื่อทำให้ชีวิตของคุณยากขึ้น ~/Android/Sdk/platform-tools/adb
สำหรับฉันมันเป็น ดังนั้นฉันจะเรียกใช้:
sudo chown root:YOUR_USERNAME ~/Android/Sdk/platform-tools/adb
sudo chmod 4550 ~/Android/Sdk/platform-tools/adb
เครื่องมือ Android นั้นน่ารำคาญสุด ๆ
ไปที่การตั้งค่า >> การบำรุงรักษา >> ที่เก็บข้อมูล จากนั้นตรวจสอบเมนูด้านซ้ายบนแล้วคลิกที่การเชื่อมต่อคอมพิวเตอร์ USB จากนั้นเปลี่ยนเป็นอุปกรณ์สื่อ (MTP)
sudo adb devices
ดู หากใช้งานได้ดี แต่มาจากหน่วยความจำฉันไม่จำเป็นต้องรูทเพื่อตรวจสอบอุปกรณ์ที่ต่อพ่วง