问题描述
我正在使用Ubuntu 12.10并且我安装了Android SDK,在我的用户.bashrc
中设置了它的路径并且它可以工作。
问题是我的手机需要root用户运行adb才能获得权限,但是使用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
这工作(以root身份):
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
这不会以超级用户身份出现。对不起,如果是误会。
最佳解决办法
请首先阅读以下内容:How do I set up Android ADB?
配置USB访问
首先,如果已相应地设置了权限,则不需要root权限即可运行ADB。 AOSP站点提供了用于Pixel /Nexus设备的Configuring USB Access示例。您可以对non-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.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/
(系统范围)中为可执行文件添加符号链接,而不是modifying the path variable。
mkdir ~/bin/
ln -s /opt/android-sdk-linux/platform-tools/adb ~/bin/
次佳解决办法
我使用来自中国的平板电脑(一些奇怪的制造商)遇到了同样的问题。
除了/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
并且检测到设备。
第三种解决办法
在我的情况下,而不是MTP模式,一些智能手机只需要设置为PTP模式,这与大多数需要我的Android Studio(v1.5.1)检测到MTP模式的设备不同。
因此,请务必首先尝试MTP和PTP模式,而无需花时间处理更复杂的Unix ADP配置并可能会损害它们。
在较新的设备中,您可以直接在Dev选项中选择它,而在较旧的设备中,它位于状态栏上的USB Connected Options中。
对我来说,Z5及以上版本的最新Sony Xperia设备无论USB模式如何都无法工作。也许我的Android Studio已经过时了,或者我需要使用Unix ADP配置。