当前位置: 首页>>技术问答>>正文


Ubuntu:Android设备调试

, , ,

问题描述

我有一个HTC Desire,我想调试并运行我的Android应用程序。但是当我在Eclipse中获取Window,我可以在设备之间进行选择时,我的HTC Desire仅列出了问号(????????)。我究竟做错了什么?

我试过这个:

在我的设备上启用USB调试,并在我的应用程序Manifest.xml文件中启用调试。

在终端我这样做:

  1. 以root身份登录并创建此文件:/etc/udev/rules.d/51-android.rules。

  2. SUBSYSTEM == “usb”,SYSFS {idVendor} == “0bb4″,MODE = “0666”

  3. sudo service udev restart

还有什么我可以尝试或忘记?

最佳解决办法

您需要使用sudo手动运行adb。如果您只是在没有sudo的情况下运行adb(或者如果您让Eclipse /ADT为您执行此操作),则它将没有查看您的设备所需的权限。

如果它已经运行,那么sudo adb kill-server和sudo adb start-server。

次佳解决办法

注意:EboMike接受的答案是不正确的。

我知道这是一个老问题线程,但我偶然发现它试图解决同样的问题。然而,接受的答案是不正确的。一旦正确设置了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身份运行通常也是一个坏主意。

第三种解决办法

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。

第四种办法

我已经设法让我的”bricked” Nexus S再次通过这里所说的工作。但是,有必要增加一点。

当您执行lsusb并且USB子系统告诉您连接了哪个Android设备时,我正在给我回复:

$ lsusb
Bus 001 Device 006: ID 18d1:d001 Google Inc.

注意d001而不是任何已知状态,即4e20,4e21或4e22。所以我所做的是在51-android.rules中添加另一行,特别是这个未知状态,并将其标记为”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的howto。希望能帮助到你。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/6819.html,未经允许,请勿转载。