Kri*_*her 187 linux debugging android adb
我在调试模式下将HTC Wildfire A3333与我的Fedora Linux连接时遇到问题.Adb说:
./adb devices
List of devices attached
???????????? no permissions
Run Code Online (Sandbox Code Playgroud)
我的udev规则(三星的第一条规则很好,HTC的第二规则不是):
SUBSYSTEM=="usb",SYSFS{idVendor}=="04e8",SYMLINK+="android_adb",MODE="0666",GROUP="plugdev"
SUBSYSTEM=="usb",SYSFS{idVendor}=="0bb4",SYMLINK+="android_adb",MODE="0666",GROUP="plugdev"
Run Code Online (Sandbox Code Playgroud)
对于三星设备一切都没问题:
./adb devices
List of devices attached
00198a9422618e device
Run Code Online (Sandbox Code Playgroud)
我一直在尝试用一个简单的线程给出的所有答案,不过运气:使用HTC野火进行android开发
Leo*_*eon 352
我自己在Debian Wheezy下遇到了这个问题.我用sudo重新启动了adb守护进程:
sudo ./adb kill-server
sudo ./adb start-server
sudo ./adb devices
Run Code Online (Sandbox Code Playgroud)
一切正常:)
Kri*_*her 106
该问题的原因与系统权限有关(感谢@ IsaacCisneros提供此建议).不知何故,HTC Wildfire(以及其他人)需要的系统比三星设备更多.简单的解决方案是以root身份运行Eclipse,但对于像Fedora这样的非sudo Linux系统来说,这并不是很舒服.
我找到了另一种实现相同目标的方法,它似乎更加用户友好,并且安全性较低,然后以超级用户权限运行整个IDE.请注意,这仍然只是问题的解决方法.系统根使用率应仅最小化为管理任务,"adb"旨在与没有SUID的普通用户帐户一起使用.尽管SUID的正确设置非常安全,但每次增加权限都是潜在的系统安全漏洞.
1.设置adb二进制文件的所有权(所有者 - root,所有者组 - user_group):
chown root:user_group adb
2.使用SUID设置权限:
chmod 4550 adb
这应该会产生与此类似的东西(ls -llh):
-r-sr-x---. 1 root user_name 1.2M Jan 8 11:42 adb
之后,您将能够将adb作为root,event运行,尽管您将使用普通用户帐户.您可以作为普通用户运行Eclipse,并且应该正确发现HTC.
./adb devices
List of devices attached
HT0BPPY15230 device
Run Code Online (Sandbox Code Playgroud)
Rog*_*mbe 90
我有一个类似的问题:
$ adb devices
List of devices attached
4df15d6e02a55f15 device
???????????? no permissions
Run Code Online (Sandbox Code Playgroud)
如果我跑lsusb,我可以看到我连接的设备,以及:
$ lsusb
...
Bus 002 Device 050: ID 04e8:6860 Samsung Electronics Co., Ltd GT-I9100 Phone ...
Bus 002 Device 049: ID 18d1:4e42 Google Inc.
Run Code Online (Sandbox Code Playgroud)
这显示我的三星Galaxy S3和我的Nexus 7(2012)连接.
检查这些权限:
$ ls -l /dev/bus/usb/002/{049,050}
crw-rw-r-- 1 root root 189, 176 Oct 10 10:09 /dev/bus/usb/002/049
crw-rw-r--+ 1 root plugdev 189, 177 Oct 10 10:12 /dev/bus/usb/002/050
Run Code Online (Sandbox Code Playgroud)
等待.什么?那个"plugdev"组来自哪里?
$ cd /lib/udev/rules.d/
$ grep -R "6860.*plugdev" .
./40-libgphoto2-2.rules:ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="6860", \
ENV{ID_GPHOTO2}="1", ENV{GPHOTO2_DRIVER}="proprietary", \
ENV{ID_MEDIA_PLAYER}="1", MODE="0664", GROUP="plugdev"
./40-libgphoto2-2.rules:ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6860", \
ENV{ID_GPHOTO2}="1", ENV{GPHOTO2_DRIVER}="proprietary", \
ENV{ID_MEDIA_PLAYER}="1", MODE="0664", GROUP="plugdev"
Run Code Online (Sandbox Code Playgroud)
(我已经包裹了那些线)
注意这些GROUP="plugdev"线条.另请注意,这不适用于其他设备ID:
$ grep -Ri "4e42.*plugdev" .
Run Code Online (Sandbox Code Playgroud)
(没有返回)
好.那么修复是什么?
创建/etc/udev/rules.d/99-adb.rules包含以下行的文件:
ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4e42", ENV{ID_GPHOTO2}="1",
ENV{GPHOTO2_DRIVER}="proprietary", ENV{ID_MEDIA_PLAYER}="1",
MODE="0664", GROUP="plugdev"
Run Code Online (Sandbox Code Playgroud)
这应该是一行,为了便于阅读,我把它包装在这里
$ sudo udevadm control --reload-rules
$ sudo service udev restart
Run Code Online (Sandbox Code Playgroud)
拔下/重新插入您的设备.
$ adb devices
List of devices attached
4df15d6e02a55f15 device
015d2109ce67fa0c device
Run Code Online (Sandbox Code Playgroud)
Mic*_*ant 36
你的udev规则似乎错了.我用过这个并且它有效:
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"
Run Code Online (Sandbox Code Playgroud)
(ATTR而不是SYSFS)
Cha*_*han 24
在ubuntu 12.04下,eclipse juno.我面临同样的问题.这就是我在易于博客上发现的
解决方案与Leon相同
sudo -s
adb kill-server
adb start-server
adb devices
Run Code Online (Sandbox Code Playgroud)
Bre*_*ust 23
斯蒂芬的答案有效(使用sudo adb kill-server),但这是暂时的.每次重启后都必须重新发布.
对于永久解决方案,必须修改udev配置:
Witrant的答案是正确的想法(从官方Android文档中复制).但它只是一个模板.如果这不适用于您的设备,则需要为您的设备填写正确的设备ID.
lsusb
Bus 001 Device 002: ID 05c6:9025 Qualcomm, Inc.
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
...
Run Code Online (Sandbox Code Playgroud)
在列表中找到您的Android设备.
然后使用ID的前半部分(4位数)作为idVendor(后半部分是idProduct,但没有必要让adb工作).
sudo vi /etc/udev/rules.d/51-android.rules 并为每个唯一的idVendor添加一条规则:
SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666", GROUP="plugdev"
Run Code Online (Sandbox Code Playgroud)
就这么简单.您不需要在某些答案中给出的所有其他字段.保存文件.
然后重启.这种变化是永久性的.(Roger显示了一种重启udev的方法,如果你不想重启).
Rob*_*mer 22
... 到目前为止,OP自己的答案是错误的,没有"特殊的系统权限". - "无权限"问题归结为......没有权限.
不幸的是,它不容易调试,因为adb使它成为它试图访问的设备的秘密!在Linux上,它尝试打开手机的"USB串行转换器"设备,例如/ dev/bus/usb/001/115(您的总线编号和设备地址会有所不同).这有时会链接并使用/ dev/android_adb.
lsusb将有助于找到公交车号码和设备地址.请注意,如果重新插入,设备地址将会发生变化,如果端口对使用的速度感到困惑(例如,一个物理端口最终在一个逻辑总线上或另一个逻辑总线上),则可能会发生总线编号.
lsusb-line看起来类似于:Bus 001 Device 115:ID 4321:fedc bla bla bla
lsusb -v 如果"bla bla bla"没有足够暗示(有时它既不包含制造商,也不包含手机型号),可能会帮助您找到设备.
一旦您了解该设备,请亲自检查ls -a /dev/bus/usb/001/115相关用户真正可以访问的设备!然后检查它是否有效chmod并修复你的udev设置.
PS1:/ dev/android_adb只能指向一个设备,因此请确保它能够满足您的需求.
PS2:与这个问题无关,但不太为人所知:adb有一个固定的供应商ID清单.这个列表可以从〜/ .android/adb_usb.ini扩展,它应该包含0x4321(如果我们按照上面的示例lsusb行). - 此处不需要,因为如果不知道供应商ID,您甚至不会获得"无权限".
我会在这里附上此附言,以便在我之前的解释中不会丢失.
只需将USB连接类型从Camera(PTP)更改为Media device(MTP),我就可以可靠地生成并解决无权限问题.摄像头模式允许调试; 媒体模式导致ADB中的无权限响应.
经过一段时间的反思,这个推理似乎很明显.调试器可以在介质服务器模式下访问设备上的不安全内容.
===========
在您接受调试设备上的RSA加密警告之前,设备是不允许的.在连接后的某个时刻,设备将要求接受调试连接.它是一种最小的安全协议,可确保您可以在初始滑动锁定之外访问设备.我相信,需要启用开发者模式.
"无权限"标志实际上是adb将设备识别为有效调试目标的良好第一指示符.请注意,它不会列出您的其他USB设备.
以下和相关页面的详细信息.
http://developer.android.com/tools/device.html
小智 7
与Pipo S1S升级到4.2.2股票6月4日相同的问题.
$ adb devices
List of devices attached
???????????? no permissions
Run Code Online (Sandbox Code Playgroud)
所有上述建议虽然有效,可以让您的USB设备得到认可,但并不能解决问题.(在Mint 15上运行的Android Debug Bridge版本1.0.31.)
更新android sdk工具等重置~/.android/adb_usb.ini.
要识别Pipo VendorID 0x2207,请执行以下步骤
添加到行 /etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", ATTR{idVendor}=="0x2207", MODE="0666", GROUP="plugdev"
Run Code Online (Sandbox Code Playgroud)
添加行到~/.android/adb_usb.ini:
0x2207
Run Code Online (Sandbox Code Playgroud)
然后删除adbkey文件
rm -f ~/.android/adbkey ~/.android/adbkey.pub
Run Code Online (Sandbox Code Playgroud)
并重新连接您的设备以使用正确的adb连接重建密钥文件.有些设备会要求重新授权.
sudo adb kill-server
sudo adb start-server
adb devices
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
162146 次 |
| 最近记录: |