Làm cách nào để định cấu hình quyền truy cập ADB cho thiết bị Android?


39

Tôi đang sử dụng Ubuntu 12.10 và tôi đã cài đặt Android SDK, đặt đường dẫn trong người dùng của tôi .bashrcvà nó hoạt động.

Vấn đề là điện thoại của tôi yêu cầu adb phải được chạy bằng root để có quyền, nhưng chạy adb với sudo tôi gặp lỗi sau:

sudo: adb: lệnh không tìm thấy

Tôi đã cố gắng đơn giản để sử dụng sudo -E adb start-server, nhưng nó không hoạt động. Đã thử thêm đường dẫn xuất /root/.bashrcvà (sau khi nhận ra nó không giúp) /etc/bash.bashrc.

Tôi nhớ rằng tôi có thể thiết lập nó trên Arch Linux của mình, nhưng tôi đoán vấn đề của tôi hiện được kết nối với tài khoản root Ubuntu không hoạt động như tôi mong đợi.


Những gì tôi không hiểu là như sau:

Chúng không hoạt động:

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

Điều này không (gõ đường dẫn đầy đủ):

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

Điều này không hoạt động (sử dụng -E với sudo):

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

Điều này hoạt động (như root):

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

Bây giờ tôi hoàn toàn bối rối và tôi đánh giá cao một số cách làm rõ về cách đặt đường dẫn cho sudo hoặc cách khác tôi có thể giải quyết vấn đề của mình.

(Và làm ơn, đừng nói adb không nên chạy dưới quyền root.)

Cảm ơn trước!

Chỉnh sửa: Bằng cách yêu cầu quyền root Tôi có nghĩa là tôi cần chúng vì nếu không tôi sẽ nhận được:

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

mà không xảy ra như siêu người dùng. Xin lỗi nếu đó là sự hiểu lầm.


Tôi đã nhận thấy với cả Windows và Ubuntu rằng các thiết bị Android thường không xuất hiện nếu bạn cắm chúng vào cổng USB 3, cắm chúng vào cổng không phải USB3 làm giảm bớt vấn đề.
Paul Gregoire

từ các tài liệu: source.android.com/source/ từ
Paschalis

Câu trả lời:


48

Vui lòng đọc phần sau: Làm cách nào để thiết lập Android ADB?


Định cấu hình truy cập USB

Trước tiên, bạn không cần quyền root để chạy ADB nếu bạn đã đặt quyền cho phù hợp. Trang web AOSP cung cấp các ví dụ để Định cấu hình Quyền truy cập USB cho các thiết bị Pixel / Nexus. Bạn có thể sử dụng sơ đồ sau cho các thiết bị không phải Nexus:

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

ID nhà cung cấp và sản phẩm có thể được lấy bằng cách sử dụng lsusbvà tìm kiếm thiết bị của bạn. (Lưu ý: Thiết bị thực sự là Galaxy Nexus.)

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

Vì vậy, /etc/udev/rules.d/51-android.rulesquy tắc udev của tôi trông như thế này:

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

Bạn có thể muốn lặp lại điều này cho các trạng thái điện thoại khác như fastboot nếu cần. Để cho các thay đổi có hiệu lực, hãy tải lại udev ( sudo udevadm control --reload) hoặc khởi động lại (được khuyến nghị).

Làm cho các chương trình có sẵn

Thay vì sửa đổi biến đường dẫn, tôi khuyên bạn nên thêm một liên kết tượng trưng cho tệp thực thi trong ~/bin/(chỉ người dùng) hoặc trong /usr/local/bin/(toàn hệ thống).

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

1
Tôi đã thử thêm các quy tắc udev cho điện thoại của mình, nhưng nó không giúp ích gì nên tôi nghĩ có lẽ tôi không rõ về vấn đề của mình. Xin vui lòng, nếu bạn có thời gian, xem kết thúc câu hỏi của tôi.
Martin Fejes

Bạn đã thêm ID chính xác? modaco.com/topic/329317-guide-ubfox-and-the-blade Bạn đã khởi động lại máy của mình sau đó? adb deviceslàm việc cho tôi mà không có quyền root.
LiveWireBT

4
Yay, nó hoạt động! Tôi đã thêm các quy tắc udev vào /etc/udev/rules.d/51-android-rules và rõ ràng đó là một sai lầm. Sau khi sử dụng /lib/udev/rules.d/11-android.rules, mọi thứ đều ổn! Tôi không cần sự thuyết phục gốc! Cảm ơn rất nhiều!
Martin Fejes

Có giống nhau không ????????????? không có tình huống cấp phép và câu trả lời của bạn đã giải quyết nó, cảm ơn.
Panthro

vì một số lý do nó không hoạt động ở đây, tôi đã phải khởi động máy chủ adb bằng sudo; bất kỳ ý tưởng nào tôi có thể nhìn vào để xem tại sao nó không hoạt động?
Sức mạnh Bảo Bình

29

Tôi gặp vấn đề tương tự với một máy tính bảng từ Trung Quốc (một số nhà sản xuất kỳ lạ).

Ngoài /etc/udev/rules.d/51-android.rulestập tin, tôi cũng cần phải thay đổi ~/.android/adb_usb.ini.

Chạy bên dưới trên thiết bị đầu cuối;

sudo gedit ~/.android/adb_usb.ini

adb_usb.initập tin của bạn sẽ giống như:

# 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!!!>

Thiết bị ngắt kết nối và kết nối lại và cũng cần thiết để chạy bên dưới các lệnh trên thiết bị đầu cuối;

adb kill-server

và sau đó

adb start-server

Và thiết bị đã được phát hiện.


Tôi cũng đã thử với mẹo của bạn nhưng không có gì thay đổi, có ý kiến ​​nào tôi có thể nhìn để xem tại sao nó không hoạt động ở đây không?
Sức mạnh Bảo Bình

Đẹp một. Điều đó làm việc cho tôi. Cùng với đó, tôi đã phải cập nhật adb của mình .
Waff's Crazy Peanut

Giải pháp này không hoạt động trên Ubuntu 14.04. Danh sách các thiết bị vẫn còn trống.
Luís de Sousa

1
Cảm ơn rất nhiều, Uygar, cuối cùng tôi đã tìm ra giải pháp phù hợp với mình.
Dmitry Popov

Đó là những gì tôi đã thiếu. Thực tế, 0x2207trong ví dụ của bạn là cùng một ID nhà cung cấp mà thiết bị của tôi sử dụng.
ssokolow

2

Trong trường hợp của tôi thay vì chế độ MTP, một số Điện thoại thông minh chỉ cần được đặt ở chế độ PTP không giống như hầu hết các thiết bị yêu cầu chế độ MTP được Android Studio của tôi phát hiện (v1.5.1).

Vì vậy, trước tiên hãy chắc chắn thử cả hai chế độ MTP và PTP mà không cần dành thời gian cho Cấu hình ADP phức tạp hơn của Unix và có thể gây hại cho chúng.

Trong các thiết bị mới hơn, bạn có thể chọn nó trực tiếp tại các tùy chọn Dev, trong khi ở các thiết bị cũ hơn, nó nằm trong Tùy chọn được kết nối USB trên Thanh trạng thái.

Tuy nhiên, đối với tôi, các Thiết bị Sony Xperia mới nhất từ ​​Z5 trở lên, sẽ không hoạt động cho dù ở chế độ USB. Có thể Android Studio của tôi đã cũ hoặc tôi cũng cần phải khai thác với Cấu hình Unix ADP.


1

Thực hiện theo các bước sau:

  1. Đặt vars android

    Ban đầu đi đến nhà của bạn và nhấn Ctrl+ Hnó sẽ hiển thị cho bạn các tệp ẩn bây giờ tìm .bashrctệp, mở nó bằng bất kỳ trình soạn thảo văn bản nào sau đó đặt các dòng bên dưới ở cuối tệp:

    export ANDROID_HOME=/myPathSdk/android-sdk-linux
    export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
    
  2. Khởi động lại

  3. Sử dụng thiết bị để gỡ lỗi

    Lắng nghe kết nối:

    adb -a
    

    Kết nối thiết bị Android của bạn và ủy quyền cho thiết bị:

    cordova run android --device
    

0

Cấu hình truy cập USB

Cách tiếp cận được đề xuất là tạo một tệp tại /etc/udev/rules.d/51-android.rules.

Vui lòng nhập vào Terminal:

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

Các quy tắc mới này có hiệu lực vào lần tiếp theo thiết bị được cắm. Do đó, có thể cần phải rút phích cắm thiết bị và cắm lại vào máy tính.


0

Mặc dù câu trả lời được chấp nhận giúp tôi hoàn thành công việc, tôi vẫn bối rối về:

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

và đặc biệt

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

kể từ khi sudo --help:

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

Hóa ra, trên nhiều bản phân phối linux (bao gồm Debian và Ubuntu) secure_pathenv_resetcác tùy chọn được bật theo mặc định, sẽ đặt lại PATHbiến của bạn và đặt nó thành secure_path. Bạn có thể thay đổi nó trong /etc/sudoerstập tin bằng cách sử dụng visudo.

Ngoài ra, bạn có thể chạy:

sudo env PATH=$PATH adb devices

-1

Hãy thử lệnh này: sudo tools/android update sdk --no-ui

SDK README:

Chào mừng bạn đến với SDK Android! Lưu trữ SDK Android ban đầu chỉ chứa các công cụ SDK cơ bản. Nó không chứa nền tảng Android hoặc bất kỳ thư viện của bên thứ ba nào. Trên thực tế, nó thậm chí không có tất cả các công cụ bạn cần để phát triển một ứng dụng. Để bắt đầu phát triển ứng dụng, bạn phải cài đặt Công cụ nền tảng và ít nhất một phiên bản của nền tảng Android, sử dụng Trình quản lý SDK. Các công cụ nền tảng chứa các công cụ xây dựng được cập nhật định kỳ để hỗ trợ các tính năng mới trong nền tảng Android (đó là lý do tại sao chúng tách biệt với các công cụ SDK cơ bản), bao gồm adb, dexdump và các công cụ khác. Để cài đặt Công cụ nền tảng, nền tảng Android và các tiện ích bổ sung khác, bạn phải có kết nối Internet, vì vậy nếu bạn có kế hoạch sử dụng SDK khi ngoại tuyến, vui lòng đảm bảo tải xuống các thành phần cần thiết khi trực tuyến. Để khởi động Trình quản lý SDK, vui lòng thực hiện chương trình "android". Từ dòng lệnh, bạn cũng có thể trực tiếp kích hoạt cập nhật bằng cách thực hiện:tools/android update sdk --no-ui


Tôi không chắc chắn rằng điều này giải quyết câu hỏi ban đầu ...
Landroni
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.