如何为 Android 设备配置 ADB 访问权限?

Mar*_*jes 44 root sudo android environment-variables adb

我正在使用 Ubuntu 12.10 并且我已经安装了 Android SDK,在我的用户中设置了它的路径.bashrc并且它可以工作。

问题是我的手机需要由 root 运行 adb 以获得权​​限,但是使用 sudo 运行 adb 我收到以下错误:

须藤:adb:找不到命令

我试图简单地使用sudo -E adb start-server,但它不起作用。尝试将导出路径行添加到/root/.bashrc和(在意识到它没有帮助后)添加到/etc/bash.bashrc.

我记得我可以在我的 Arch Linux 上设置它,但我想我现在的问题是连接到 Ubuntu root 帐户,行为不像我预期的那样。


我不明白的是以下内容:

这些不起作用:

martin@alyx:~$ sudo adb devices
sudo: adb: command not found
Run Code Online (Sandbox Code Playgroud)

这样做(输入完整路径):

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
Run Code Online (Sandbox Code Playgroud)

这不起作用(将 -E 与 sudo 一起使用):

martin@alyx:~$ sudo -E adb devices
sudo: adb: command not found
Run Code Online (Sandbox Code Playgroud)

这有效(以root身份):

martin@alyx:~$ sudo su
root@alyx:/home/martin# adb devices
List of devices attached 
CM7-Blade   device
Run Code Online (Sandbox Code Playgroud)

我现在完全糊涂了,我希望能澄清一下如何为 sudo 设置路径或如何解决我的问题。

(请不要说 adb 不应该以 root 身份运行。)

提前致谢!

编辑: 通过要求 root 权限,我的意思是我需要它们,否则我会得到:

$ adb devices 
List of devices attached 
????????????    no permissions
Run Code Online (Sandbox Code Playgroud)

这不会作为超级用户发生。对不起,如果这是误解。

Liv*_*eBT 50

请先阅读以下内容:如何设置 Android ADB?


配置 USB 访问

首先,如果您相应地设置了权限,则不需要 root 权限来运行 ADB。AOSP 站点提供了为 Pixel/Nexus 设备配置 USB 访问的示例。您可以对非 Nexus 设备使用以下方案:

SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", ATTR{idProduct}=="xxxx", MODE="0600", OWNER="<username>"
Run Code Online (Sandbox Code Playgroud)

供应商和产品 ID 可以通过使用lsusb和搜索您的设备来获取。(注意:该设备实际上是 Galaxy Nexus。)

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

所以我的/etc/udev/rules.d/51-android.rulesudev 规则是这样的:

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

如果需要,您可能希望对其他手机状态(如 fastboot)重复此操作。要让更改生效,请重新加载 udev ( sudo udevadm control --reload) 或重新启动(推荐)。

使程序可用

我建议在(仅限用户)或(系统范围内)中添加指向可执行文件的符号链接,而不是修改路径变量~/bin//usr/local/bin/

mkdir ~/bin/
ln -s /opt/android-sdk-linux/platform-tools/adb ~/bin/
Run Code Online (Sandbox Code Playgroud)

  • 是的,它有效!我将 udev 规则添加到 /etc/udev/rules.d/51-android-rules 中,显然这是一个错误。使用/lib/udev/rules.d/11-android.rules后,一切正常!我不需要root权限!非常感谢! (4认同)

小智 29

我在使用来自中国的平板电脑(一些奇怪的制造商)时遇到了同样的问题。

除了/etc/udev/rules.d/51-android.rules文件,我还需要更改~/.android/adb_usb.ini

在终端下面运行;

sudo gedit ~/.android/adb_usb.ini
Run Code Online (Sandbox Code Playgroud)

你的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!!!>
Run Code Online (Sandbox Code Playgroud)

断开和重新连接的设备,还需要在终端上运行以下命令;

adb kill-server
Run Code Online (Sandbox Code Playgroud)

之后

adb start-server
Run Code Online (Sandbox Code Playgroud)

并检测到该设备。