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


39

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

问题是我的电话要求adb必须由root用户运行才能获得权限,但是用sudo运行adb会出现以下错误:

sudo: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

这样(键入完整路径):

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

这工作(作为根):

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

我现在完全感到困惑,我希望能澄清一些关于如何设置sudo路径或其他方法来解决我的问题的信息。

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

提前致谢!

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

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

不会以超级用户身份出现。抱歉,如果误会了。


我已经在Windows和Ubuntu上注意到,如果将Android设备插入USB 3端口,则通常不会出现,将它们插入非USB3端口可以缓解此问题。
Paul Gregoire 2014年

Answers:


48

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


配置USB访问

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

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

可以通过使用lsusb和搜索设备来获取供应商和产品ID 。(注意:该设备实际上是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.rulesudev规则看起来像这样:

# 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规则,但没有帮助,所以我认为可能我不清楚自己的问题。请,如果您有时间,请参阅我的问题的结尾。
马丁·费耶斯

您是否添加了正确的ID?modaco.com/topic/329317-guide-ubuntu-and-the-blade之后重新启动计算机了吗?adb devices在没有root特权的情况下为我工作。
LiveWireBT 2012年

4
是的,它有效!我将udev规则添加到/etc/udev/rules.d/51-android-rules中,这显然是一个错误。使用/lib/udev/rules.d/11-android.rules之后,一切都很好!我不需要root权限!非常感谢!
马丁·费耶斯

一样吗???????????? 没有权限的情况,您的答案解决了,谢谢。
Panthro

由于某种原因它在这里不起作用,我不得不使用sudo启动adb服务器;知道我在哪里可以看到为什么它不起作用吗?
Aquarius Power

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

并检测到设备。


我也尝试过使用您的小费,但没有任何变化,有什么主意可以看到为什么它在这里不起作用?
Aquarius Power

好东西。那对我有用。除此之外,我还必须更新adb
华夫饼的《疯狂花生》

该解决方案在Ubuntu 14.04上不起作用。设备列表仍然为空。
路易斯·德·索萨

1
非常感谢Uygar,终于找到了适合我的解决方案。
德米特里·波波夫

那就是我所缺少的。实际上,0x2207您的示例中的与我的设备使用的供应商ID相同。
ssokolow

2

以我的情况而不是MTP模式,某些智能手机只需要设置为PTP模式,这与大多数设备需要MTP模式才能被我的Android Studio(v1.5.1)检测到的设备不同。

因此,一定要先尝试MTP和PTP模式,然后再花费时间来处理更复杂的Unix ADP配置,并且可能会损害它们。

在较新的设备中,您可以直接在Dev选项中选择它,而在较旧的设备中,则可以在状态栏上的USB Connected Options中选择它。

对我来说,无论是USB模式还是Z5及更高版本的最新Sony Xperia设备都无法使用。也许我的Android Studio很旧,或者我也需要使用Unix ADP配置进行挖掘。


1

跟着这些步骤:

  1. 设置android vars

    首先转到您的家,然后按Ctrl+ H,它将显示您隐藏的文件,现在查找.bashrc文件,使用任何文本编辑器将其打开,然后将以下行放在文件末尾:

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

  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

事实证明,这对许多Linux发行版本(包括Debian和Ubuntu)secure_pathenv_reset选项都在默认情况下,它重置您的转身PATH变量,并将其设置为secure_path。您可以/etc/sudoers使用visudo 在文件中更改它。

或者,您可以运行:

sudo env PATH=$PATH adb devices

-1

试试这个命令: sudo tools/android update sdk --no-ui

SDK自述文件:

欢迎使用Android SDK!Android SDK档案最初只包含基本的SDK工具。它不包含Android平台或任何第三方库。实际上,它甚至没有开发应用程序所需的全部工具。为了开始开发应用程序,您必须使用SDK Manager安装平台工具和至少一个版本的Android平台。平台工具包含一些构建工具,这些工具会定期更新以支持Android平台中的新功能(这就是为什么它们与基本SDK工具分开的原因),包括adb,dexdump等。要安装平台工具,Android平台和其他加载项,您必须具有Internet连接,因此,如果您打算在离线时使用SDK,请确保在在线时下载必要的组件。要启动SDK Manager,请执行程序“ android”。从命令行,您还可以通过执行以下命令直接触发更新:tools/android update sdk --no-ui


我不确定这是否解决了原始问题...
landroni 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.