Ubuntu:Android设备调试

时间:2010-06-27 13:49:16

标签: android linux ubuntu adb

我有一个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
  4. 我还有什么可以尝试或忘记的?

6 个答案:

答案 0 :(得分:49)

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

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

答案 1 :(得分:46)

注意: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身份运行通常也是一个坏主意。

答案 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设备

希望这会奏效!!!