【问题标题】:Ubuntu: Android device debug [duplicate]Ubuntu:Android设备调试[重复]
【发布时间】:2011-03-08 20:07:37
【问题描述】:

我有一个 HTC Desire,我想在其上调试和运行我的 Android 应用程序。但是当我在 Eclipse 中获得可以在设备之间进行选择的窗口时,我的 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

我还能尝试或忘记什么?

【问题讨论】:

  • 运行 DDMS 工具时是否也会发生这种情况? ddms
  • 打开USB调试后,运行“dmesg”输出什么(最后几行)?
  • 生成/etc/udev/rules.d/51-android.rules文件后拔掉插头。

标签: android linux ubuntu adb


【解决方案1】:

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

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

【讨论】:

  • 让它成为初始化过程的一部分——这就是我所做的,它就像一个魅力。创建 /etc/init.d/adb,复制其他初始化作业所做的工作,然后分别调用“adb start-server”和“adb kill-server”,并将其链接到正确的 rc.d 目录 - 我创建了一个链接称为 /etc/rc.5d/S20adb。
  • 请看下面的正确答案!我使用 gnac 答案在未经 su 许可的情况下运行它。否决
  • @Sivaj 两个答案都是正确的。问题是由于 USB 设备权限。 EboMike 建议以 root 身份运行 adb,以便它可以访问所需的 USB 设备,而 gnac 正在更改设备的权限,以便非 root 用户也可以访问它。
【解决方案2】:

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

【讨论】:

  • 就是不行,我什至试过重启系统
  • 这对我有用。我以为我已经有一个有效的 51-android.rules 集,但我无意中包含了模型 ATTR 以及供应商。我删除了它。另外,我不知道重新加载 udev 规则的正确方法。我使用了 udevadm 并且 adb devices 命令工作正常。
  • 是的!这个工作,但我的不同 -> SUBSYSTEM=="usb" ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="6182", ENV{ID_GPHOTO2}="1", ENV{GPHOTO2_DRIVER}= "proprietary", ENV{ID_MEDIA_PLAYER}="1", MODE="0666", GROUP="plugdev" -> 我有 Sony Xperia ZR 并且请注意 plugdev 并且不要忘记运行 sudo service udev restart 重新启动整个 USB 服务!
  • 是的,它不起作用,但是当我使用root时,它立即起作用。
  • 两个答案都是正确的。问题是由于 USB 设备权限。 EboMike 建议以 root 身份运行 adb,以便它可以访问所需的 USB 设备,而 @gnac 正在更改设备的权限,以便非 root 用户也可以访问它。
【解决方案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 看看能不能得到你安卓设备的 iSerial 字段。

另外,iSerial 字符串可能没有在设备中准备好。我见过很多工程产品根本没有 iSerial,或者所有设备都显示相同的设备 ID。

有时,驱动程序会读取闪存中的一段数据,该数据在设备之间进行唯一编程以使其成为 iSerial/设备 ID。

【讨论】:

    【解决方案4】:

    通过执行此处所说的操作,我设法让我的“变砖”Nexus S 再次工作。 不过,还需要添加一点点。

    当您执行lsusb 并且 USB 子系统告诉您连接了哪个 Android 设备时,我的反馈给了我:

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

    注意 d001 而不是任何已知状态,即 4e20、4e21 或 4e22。 所以我所做的就是在51-android.rules 中添加另一行,特别是这个 unknown 状态并将其标记为“恢复/调试”。

    断开并重新连接 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 的操作说明进行操作。希望对您有所帮助。

    【讨论】:

      【解决方案5】:

      这是因为您没有授予 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
      

      永久 -> 将您的设备添加到 udev 列表 将以正确的 idVendor 使用 this list 将以下行添加到您的 /etc/udev/rules.d/51-android.rules as root

      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
      

      【讨论】:

        【解决方案6】:

        确保您已安装 sudo apt-get install android-tools-adb 现在检查 须藤亚行 它将显示 adb 的帮助

        现在请使用以下命令杀死/启动 adb -

        sudo adb kill-server sudo adb start-server

        最后, sudo adb 设备

        希望这会奏效!!!

        【讨论】:

          猜你喜欢
          • 2018-10-27
          • 1970-01-01
          • 2012-12-21
          • 1970-01-01
          • 2010-11-02
          • 1970-01-01
          • 2012-12-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多