我有一个HTC Desire,我想调试并运行我的Android应用程序。但是当我在Eclipse中获取Window,我可以在设备之间进行选择时,我的HTC Desire仅列出了问号(????????)。我做错了什么?
我试过这个:
在我的设备上启用USB调试,并在我的应用程序Manifest.xml文件中启用调试。
在终端我已经这样做了:
我还有什么可以尝试或忘记的?
答案 0 :(得分:49)
您需要使用sudo手动运行adb。如果您只是在没有sudo的情况下运行adb(或者如果您让Eclipse / ADT为您执行此操作),则它将无法拥有查看您的设备所需的权限。
如果它已经在运行,那么sudo adb kill-server和sudo adb start-server。
答案 1 :(得分:46)
我知道这是一个老问题主题,但我偶然发现它试图解决同样的问题。然而,接受的答案是不正确的。一旦正确设置了udev规则,就不需要以root用户身份运行adb服务器。
http://developer.android.com/tools/device.html中的第3步为您提供了正确的解决方案。具体来说,使用以下行添加或修改/etc/udev/rules.d/51-android.rules:
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0666", GROUP="plugdev"
在这种情况下,0bb4是HTC的供应商ID。 0fff是Nexus One的产品ID。使用上面链接中的表格或lsusb来识别您设备的供应商ID&产品编号。例如
$ lsusb
Bus 001 Device 006: ID 18d1:4e22 Google Inc. Nexus S (debug)
18d1是此特定设备的供应商ID,4e22是产品ID。如果要为所有用户启用对此设备的访问,则可以不使用“GROUP”定义。如果没有,请确保将自己添加到plugdev组中(如果您尚未加入)。创建此文件后,重新启动或重新加载udev。
udevadm control --reload-rules
如果您必须将自己添加到群组中,则需要退出并重新登录。
使用“adb kill-server”杀死任何旧的adb服务器,插入您的设备并运行“adb devices”。这将重新启动服务器,您现在应该可以看到您的设备。不需要以root身份运行adb,即使只是为了启动adb服务器。除非绝对需要,否则以root身份运行通常也是一个坏主意。
答案 2 :(得分:3)
adb devices
命令中的device-id实际上是使用android usb设备的序列号。
所以,如果你从序列号中得到一个空字符串,它会显示????????????
在adb服务器源代码中:
static size_t format_transport(atransport *t, char *buf, size_t bufsize,
int long_listing)
{
const char* serial = t->serial;
if (!serial || !serial[0])
serial = "????????????";
因此,可能是您的adb服务器没有以root权限运行,或者您的USB设备不允许adb服务器读取。一个简单的检查将使用lsusb -v | grep iSerial,看看你是否可以获得Android设备的iSerial字段。
此外,还有机会在设备中准备好iSerial字符串。我发现许多工程产品根本没有iSerial,或者所有设备都显示相同的设备ID。
有时,驱动程序会读取闪存中的一段数据,该数据在设备之间进行唯一编程,以使其成为iSerial /设备ID。
答案 3 :(得分:2)
我已经设法让我的“砖头”Nexus S再次通过这里所说的工作。 但是,有必要增加一小部分。
当您执行lsusb
并且USB子系统告诉您连接了哪个Android设备时,我正在给我回复:
$ lsusb
Bus 001 Device 006: ID 18d1:d001 Google Inc.
请注意 d001 ,而不是任何已知状态,即4e20,4e21或4e22。
所以我所做的是在51-android.rules
中添加另一行,特别是在 unknown 状态下,并将其标记为“recovery / debug”。
断开并重新连接Android。再次检查lsusb
以确保至少看到它。而且......那给了我这个
$ adb devices
List of devices attached
34353601BB2000EC recovery
而不是
$ adb devices -l
List of devices attached
???????????? no permissions usb:1-3
之后,我只是按照restoring the factory images的方法。希望它有所帮助。
答案 4 :(得分:1)
这是因为您没有授予您的adb访问硬件的权限。 你有两个解决方案:
临时 - >终止所有现有的adb进程并使用超级用户重新启动
ps -ef | grep adb | awk '{print $2}' | xargs kill
sudo adb server-restart
或
sudo <your android SDK path>/platform-tools/adb server-restart
永久 - &gt;将您的设备添加到udev列表中 使用this list将以下行添加到/etc/udev/rules.d/51-android.rules 以root身份并使用正确的 idVendor 。
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"
接下来是以下命令:
chmod a+r /etc/udev/rules.d/51-android.rules
如果adb无法正常工作,请执行以下操作:
sudo ln -s <your android SDK path>/platform-tools/adb /usr/local/sbin/adb
答案 5 :(得分:0)
确保已安装 sudo apt-get install android-tools-adb 现在检查 sudo adb 它将显示adb的帮助
现在请使用以下命令终止/启动adb -
sudo adb kill-server sudo adb start-server
最后, sudo adb设备
希望这会奏效!!!