วิธีกำหนดค่าการเข้าถึง ADB สำหรับอุปกรณ์ Android


39

ฉันใช้ Ubuntu 12.10 และฉันได้ติดตั้ง Android SDK แล้วตั้งค่าเป็นเส้นทางในผู้ใช้ของฉัน.bashrcและใช้งานได้

ปัญหาคือโทรศัพท์ของฉันต้องการให้ adb ทำงานโดยรูทเพื่อขออนุญาต แต่ใช้ adb กับ sudo ฉันได้รับข้อผิดพลาดดังต่อไปนี้:

sudo: adb: ไม่พบคำสั่ง

ฉันพยายามจะใช้sudo -E adb start-serverแต่ก็ไม่ได้ผล พยายามที่จะเพิ่มสายเส้นทางการส่งออกไป/root/.bashrcและ (หลังจากทราบว่ามันไม่ได้ช่วย) /etc/bash.bashrcเพื่อ

ฉันจำได้ว่าฉันสามารถตั้งค่าบน Arch Linux ของฉันได้ แต่ฉันเดาว่าปัญหาของฉันตอนนี้เชื่อมต่อกับบัญชีรูท Ubuntu ที่ไม่ทำงานเหมือนที่ฉันคาดไว้


สิ่งที่ฉันไม่เข้าใจมีดังต่อไปนี้:

สิ่งเหล่านี้ใช้ไม่ได้:

martin@alyx:~$ sudo adb devices
sudo: adb: command not found

สิ่งนี้จะทำ (พิมพ์เส้นทางแบบเต็ม):

martin@alyx:~$ sudo /opt/android-sdk-linux/platform-tools/adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached 
CM7-Blade   device

สิ่งนี้ไม่ทำงาน (ใช้ -E กับ sudo):

martin@alyx:~$ sudo -E adb devices
sudo: adb: command not found

งานนี้ (เป็น root):

martin@alyx:~$ sudo su
root@alyx:/home/martin# adb devices
List of devices attached 
CM7-Blade   device

ตอนนี้ฉันสับสนอย่างสิ้นเชิงและฉันรู้สึกซาบซึ้งมากเกี่ยวกับวิธีกำหนดเส้นทางสำหรับ sudo หรือวิธีอื่นที่ฉันสามารถแก้ปัญหาได้

(และโปรดอย่าพูดว่า adb ไม่ควรวิ่งตามราก)

ขอบคุณล่วงหน้า!

แก้ไข: เมื่อต้องการการอนุญาตรูทฉันหมายความว่าฉันต้องการเพราะไม่เช่นนั้นฉันจะได้รับ:

$ adb devices 
List of devices attached 
????????????    no permissions

ซึ่งไม่ได้เกิดขึ้นในฐานะ superuser ขออภัยถ้ามันเข้าใจผิด


ฉันสังเกตเห็นว่ามีทั้ง Windows และ Ubuntu ว่าอุปกรณ์ Android มักจะไม่ปรากฏขึ้นหากคุณเสียบเข้ากับพอร์ต USB 3 แล้วเสียบเข้ากับพอร์ตที่ไม่ใช่ USB3 เพื่อบรรเทาปัญหา
Paul Gregoire

คำตอบ:


48

โปรดอ่านสิ่งต่อไปนี้ก่อน: ฉันจะตั้งค่า Android ADB ได้อย่างไร


การกำหนดค่าการเข้าถึง USB

ก่อนอื่นคุณไม่จำเป็นต้องใช้สิทธิ์รูทเพื่อเรียกใช้ ADB หากคุณตั้งค่าการอนุญาตตาม ไซต์ AOSP ให้ตัวอย่างสำหรับการกำหนดค่าการเข้าถึง USBสำหรับอุปกรณ์ Pixel / Nexus คุณสามารถใช้รูปแบบต่อไปนี้สำหรับอุปกรณ์ที่ไม่ใช่ Nexus:

SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", ATTR{idProduct}=="xxxx", MODE="0600", OWNER="<username>"

ผู้ขายและรหัสผลิตภัณฑ์สามารถรับได้โดยใช้lsusbและค้นหาอุปกรณ์ของคุณ (หมายเหตุ: อุปกรณ์จริง ๆ คือ Galaxy Nexus)

$ lsusb | grep -i samsung
Bus 002 Device 103: ID 04e8:6860 Samsung Electronics Co., Ltd GT-I9100 Phone [Galaxy S II]

ดังนั้น/etc/udev/rules.d/51-android.rulesกฎ udev ของฉันมีลักษณะเช่นนี้:

# adb protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="username"

คุณอาจต้องการทำซ้ำสำหรับสถานะโทรศัพท์อื่นเช่น fastboot หากจำเป็น หากต้องการให้การเปลี่ยนแปลงมีผลกับการรีโหลด udev ( sudo udevadm control --reload) หรือรีบูต (แนะนำ)

ทำให้โปรแกรมพร้อมใช้งาน

แทนที่จะปรับเปลี่ยนตัวแปรพา ธฉันขอแนะนำให้เพิ่มลิงก์สัญลักษณ์ไปยังไฟล์สั่งการทั้งใน~/bin/(สำหรับผู้ใช้เท่านั้น) หรือใน/usr/local/bin/(ทั้งระบบ)

mkdir ~/bin/
ln -s /opt/android-sdk-linux/platform-tools/adb ~/bin/

1
ฉันพยายามเพิ่มกฎ udev สำหรับโทรศัพท์ของฉัน แต่มันก็ไม่ได้ช่วยฉันคิดว่าบางทีฉันอาจไม่เข้าใจปัญหาของฉัน กรุณาถ้าคุณมีเวลาดูจุดสิ้นสุดของคำถามของฉัน
Martin Fejes

คุณได้เพิ่มรหัสที่ถูกต้อง? modaco.com/topic/329317-guide-ubuntu-and-the-bladeรีบูตเครื่องของคุณหลังจากนั้น? adb devicesทำงานได้สำหรับฉันโดยไม่มีสิทธิ์รูท
LiveWireBT

4
เย้มันใช้งานได้! ฉันเพิ่มกฎ udev ให้กับ /etc/udev/rules.d/51-android-rules และเห็นได้ชัดว่ามันเป็นความผิดพลาด หลังจากใช้ /lib/udev/rules.d/11-android.rules ทุกอย่างเรียบร้อยดี! ฉันไม่ต้องการการหยั่งราก ขอบคุณมาก!
Martin Fejes

มีเหมือนกัน ???????????? ไม่มีสถานการณ์การอนุญาตและคำตอบของคุณแก้ไขได้ขอบคุณ
Panthro

ด้วยเหตุผลบางอย่างมันไม่ทำงานที่นี่ฉันต้องเริ่มเซิร์ฟเวอร์ adb ด้วย sudo; ความคิดใดที่ฉันสามารถดูเพื่อดูว่าทำไมมันไม่ทำงาน
กุมภ์กำลัง

29

ฉันเจอปัญหาเดียวกันกับแท็บเล็ตจากจีน (ผู้ผลิตแปลก ๆ )

นอกจาก/etc/udev/rules.d/51-android.rulesไฟล์แล้วฉันต้องเปลี่ยน~/.android/adb_usb.iniด้วย

ทำงานด้านล่างบนสถานี;

sudo gedit ~/.android/adb_usb.ini

และ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.
# ie 0x2207
0x<!!!Your Vendor ID here!!!>

อุปกรณ์ที่ตัดการเชื่อมต่อและเชื่อมต่ออีกครั้งและจำเป็นต้องเรียกใช้คำสั่งด้านล่างบนเทอร์มินัล

adb kill-server

และหลังจากนั้น

adb start-server

และอุปกรณ์ถูกตรวจพบ


ฉันลองด้วยปลายของคุณ แต่ไม่มีอะไรเปลี่ยนแปลงความคิดที่ฉันสามารถดูเพื่อดูว่าทำไมมันไม่ทำงานที่นี่?
กุมภ์อำนาจ

ทำได้ดีนี่. ที่ทำงานให้ฉัน พร้อมกับที่ผมต้องปรับปรุง adb
ถั่วลิสง Crazy ของ Waffle

วิธีนี้ไม่ทำงานบน Ubuntu 14.04 รายการอุปกรณ์ยังคงว่างเปล่า
Luís de Sousa

1
ขอบคุณมาก Uygar ในที่สุดฉันก็ได้พบวิธีแก้ปัญหาที่เหมาะกับฉันแล้ว
Dmitry Popov

นั่นคือสิ่งที่ฉันขาดหายไป ที่จริงแล้ว0x2207ในตัวอย่างของคุณเป็นรหัสผู้ขายเดียวกันกับที่อุปกรณ์ของฉันใช้
ssokolow

2

ในกรณีของฉันแทนโหมด MTP สมาร์ทโฟนบางรุ่นจำเป็นต้องตั้งค่าในโหมด PTP ซึ่งแตกต่างจากอุปกรณ์ส่วนใหญ่ที่ต้องใช้โหมด MTP เพื่อตรวจสอบโดย Android Studio ของฉัน (v1.5.1)

ดังนั้นก่อนอื่นให้ลองทั้งโหมด MTP และ PTP ก่อนโดยไม่ต้องเสียเวลาไปกับ ADP Configuration ของ Unix ที่ซับซ้อนและอาจเป็นอันตรายต่อพวกเขา

ในอุปกรณ์รุ่นใหม่คุณสามารถเลือกได้โดยตรงที่ตัวเลือก Dev ในขณะที่รุ่นเก่าอยู่ในตัวเลือกที่เชื่อมต่อ USB บนแถบสถานะ

แต่สำหรับฉันแล้ว Sony Xperia Devices รุ่นใหม่ล่าสุดจาก Z5 ขึ้นไปจะไม่ทำงานไม่ว่าจะเป็นโหมด USB บางที Android Studio ของฉันเก่าหรือฉันต้องขุดด้วย Unix ADP Configurations


1

ทำตามขั้นตอนเหล่านี้:

  1. ตั้งค่า vars สำหรับ Android

    ตอนแรกไปที่บ้านของคุณแล้วกดCtrl+ Hมันจะแสดงไฟล์ที่ซ่อนอยู่ให้คุณค้นหา.bashrcไฟล์เปิดไฟล์ด้วยโปรแกรมแก้ไขข้อความใด ๆ จากนั้นวางบรรทัดด้านล่างที่ท้ายไฟล์:

    export ANDROID_HOME=/myPathSdk/android-sdk-linux
    export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
    
  2. Reboot

  3. ใช้อุปกรณ์ในการดีบัก

    ฟังการเชื่อมต่อ:

    adb -a
    

    เชื่อมต่ออุปกรณ์ Android ของคุณและอนุญาต:

    cordova run android --device
    

0

การกำหนดค่าการเข้าถึง USB

/etc/udev/rules.d/51-android.rulesวิธีที่แนะนำคือการสร้างไฟล์ที่

กรุณาพิมพ์เทอร์มินัล:

wget -S -O - http://source.android.com/source/51-android.txt | sed "s/<username>/$USER/" | sudo tee >/dev/null /etc/udev/rules.d/51-android.rules; sudo udevadm control --reload-rules

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


0

แม้ว่าคำตอบที่ยอมรับจะช่วยให้ฉันทำสิ่งต่าง ๆ เสร็จ แต่ฉันก็ยังสับสนเกี่ยวกับ:

martin@alyx:~$ sudo adb devices
sudo: adb: command not found

และโดยเฉพาะอย่างยิ่ง

martin@alyx:~$ sudo -E adb devices
sudo: adb: command not found

ตั้งแต่ตามsudo --help:

-E, --preserve-env          preserve user environment when running command

ปรากฎว่าในการกระจายลินุกซ์หลายคน (ที่มี Debian และ Ubuntu) secure_pathและenv_resetตัวเลือกที่จะเปิดโดยเริ่มต้นที่การตั้งค่าของตัวแปรและตั้งค่าให้PATH secure_pathคุณสามารถเปลี่ยนได้ใน/etc/sudoersไฟล์โดยใช้ visudo

หรือคุณสามารถเรียกใช้:

sudo env PATH=$PATH adb devices

-1

ลองคำสั่งนี้: sudo tools/android update sdk --no-ui

SDK README:

ยินดีต้อนรับสู่ Android SDK! เริ่มแรกการเก็บถาวร Android SDK มีเพียงเครื่องมือพื้นฐาน SDK ไม่มีแพลตฟอร์ม Android หรือไลบรารีของบุคคลที่สาม ในความเป็นจริงมันไม่ได้มีเครื่องมือทั้งหมดที่คุณต้องการในการพัฒนาแอปพลิเคชัน ในการเริ่มต้นพัฒนาแอปพลิเคชันคุณต้องติดตั้งแพลตฟอร์มเครื่องมือและแพลตฟอร์ม Android อย่างน้อยหนึ่งรุ่นโดยใช้ SDK Manager เครื่องมือแพลตฟอร์มประกอบด้วยเครื่องมือสร้างที่ได้รับการอัปเดตเป็นระยะเพื่อรองรับคุณสมบัติใหม่ในแพลตฟอร์ม Android (ซึ่งเป็นสาเหตุที่แยกออกจากเครื่องมือ SDK พื้นฐาน) รวมถึง adb, dexdump และอื่น ๆ ในการติดตั้งแพลตฟอร์มเครื่องมือแพลตฟอร์ม Android และส่วนเสริมอื่น ๆ คุณต้องมีการเชื่อมต่ออินเทอร์เน็ตดังนั้นหากคุณวางแผนที่จะใช้ SDK ในขณะออฟไลน์โปรดตรวจสอบให้แน่ใจว่าได้ดาวน์โหลดส่วนประกอบที่จำเป็นในขณะออนไลน์ ในการเริ่มต้นตัวจัดการ SDK โปรดเรียกใช้งานโปรแกรม "android" จากบรรทัดคำสั่งคุณยังสามารถทริกเกอร์การอัปเดตโดยตรงโดยดำเนินการ:tools/android update sdk --no-ui


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