如何在Linux上被ADB检测到我的设备?


18

我刚刚得到了闪亮的新Wileyfox Swift,在使用它之前,我想先将其oem unlock扎根(就像我通常在新设备上所做的那样;)问题是,尽管设备上启用了功能,并且/etc/udev/rules.d/51-android.rules存在相应的行,则设备看不到adb devices

我知道这个站点周围有几个答案,但是它们要么很难找到,要么仅涵盖特定设备,要么不涵盖我最终需要的所有步骤。因此,我借此机会提出了规范的,与设备无关的问题,并在下面给出了详细的答案:

如何adb在Linux上看到和使用我的Android设备?


我总是对批评家开放-但是没有解释的投票很难解释。那么请下降投票者解释一下在这个问题上应该改进什么?我保证不会滥用我的mod权力进行惩罚:)
Izzy

3
我想选民没有意识到您是在张贴问题来自己回答问题(不一定在回答中注意到您)。由于在问题或评论中没有暗示出于自我回答的目的而发布的问题,投票者可能反对倒数第二段(如果在任何普通用户及其问题的上下文中阅读,则显示为懒惰)。到目前为止,我无法想到任何其他原因。
Firelord

1
@Firelord听起来很有说服力(对问题进行了一些编辑,以防止出现其他失败步骤)。但是,那个用户应该已经回答了。还是我也想念那里的东西?;)
Izzy

Answers:


24

在设备上启用USB调试

这可以在设置›开发中完成。如果您的设置菜单中没有该条目,请转到设置›关于,滚动到“内部版本号”,然后像猴子一样锤打它,直到您的设备祝贺您成为开发人员。返回“ 设置”菜单的主页,并靠近底部,您现在应该会看到“开发”(或“开发人员”)设置。输入它,然后在此处启用USB调试

识别设备

首先,我们需要知道设备如何在USB总线上进行识别。对于这一点,与Android设备NOT连接,抓住外壳和运行命令lsusb。然后连接设备并再次运行命令。发现新行。对于Wileyfox Swift,这是一个“无名设备”:

Bus 004 Device 003: ID 2970:2282

制定亚行规则

现在,我们需要上述行末的数字:2970:2282。这些指定供应商(2970)和设备本身(2282)。有了这些细节,我们需要Linux机器上的 shell来编辑(或创建,如果尚不存在)/etc/udev/rules.d/51-android.rules文件。在其中,为您的设备添加一行。以下示例行显示了Wileyfox Swift的外观:¹

SUBSYSTEMS=="usb", ATTRS{idVendor}=="2970", ATTRS{idProduct}=="2282", MODE="0666" GROUP="androiddev", SYMLINK+="android%n"

如果您使用的是其他设备,请在运行时将供应商和产品ID替换为上面找到的ID lsusb。该行的简短说明:

  • SUBSYSTEMS=="usb":显然,此规则仅适用于USB;)
  • ATTRS{idVendor}=="2970":此规则适用于的设备的供应商ID
  • ATTRS{idProduct}=="2282":设备ID
  • MODE="0666":设备节点应获得的权限。0666松懈,给系统上的每个用户读写权限–因此,如果您担心的话,可以尝试将其替换为0660(仅授予所有者和组读写权限,并拒绝其他任何人使用)。
  • GROUP="androiddev":设备节点应属于哪个组。这应该是打算使用该设备的用户所属的组。
  • SYMLINK+="android%n":只是给节点起一个好名字,这样您就可以轻松找到它/dev(在我的情况下,它稍后显示为/dev/android5

输入的规则/etc/udev/rules.d/51-android.rules,我们必须告知udev要使用它。最安全的方法(在重新启动之后;)是重新启动udev服务。根据您的Linux发行版,可以通过service udev restart或来完成/etc/init.d/udev restart

做到这一点,离开根壳。断开并重新连接您的Android设备,然后重试adb devices。现在,大多数设备都出现了,但Wileyfox Swift却没有出现,它显然想要一些额外的拥抱。如果遇到这种情况,请打开(或创建不存在的文件)文件,~/.android/adb_usb.ini并在其中添加一行,并在lsusb上面找到您所找到的供应商。对于将会是Swift的0x2970(yupp,在这里您需要给它加上前缀0x以指出它是一个十六进制数)。然后重新启动ADB服务器:adb kill-server && adb start-server。再次断开并重新连接设备。现在adb devices应该看到它。

连接设备

您可能已经注意到adb devices告诉过您类似的内容0123456789ABCDEF unauthorized。没关系,而且为了您(设备)的安全:必须首先授权您的计算机才能访问该设备。因此,adb shell现在就简单地发布-将通过error: device unauthorized. Please check the confirmation dialog on your device.遵循该建议(可选地选中复选框以永久授权您的计算机)退出,然后完成:现在,您可以使用访问设备了。


更新:

¹请注意,在更高的Linux版本中,UDEV规则的语法略有变化,例如jcomeau_ictx在其评论中指出。对于我们在上面发现的值,将是:

SUBSYSTEM=="usb", ATTR{idVendor}=="2970", ATTR{idProduct}=="2282", MODE="0666", GROUP="plugdev", SYMLINK+="android%n"

有两个区别:现在SUBSYSTEM(没有复数),并且组已从更改androiddevplugdev(在最近的系统上不存在前者,后者通常至少已分配给第一个用户)。

此外,您可能需要将vendorID添加到您的~/.android/adb_usb.ini(每行一个ID,以十六进制表示):

# ANDROID 3RD PARTY USB VENDOR ID LIST
# 1 USB VENDOR ID PER LINE.
0x2970

1
在我的Jessie系统上,udev规则的格式是不同的:jcomeau@aspire:~$ tail -n 1 /etc/udev/rules.d/99-android.rules SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", ATTR{idProduct}=="201d", MODE="0666", GROUP="plugdev", SYMLINK+="android%n" jcomeau@aspire:~$ cat ~/.android/adb_usb.ini # ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT. # USE 'android update adb' TO GENERATE. # 1 USB VENDOR ID PER LINE. 0x0e8d 我不得不忽略要运行的建议,android update adb并按照您的说明手动输入。
jcomeau_ictx

@jcomeau_ictx感谢您的反馈!据我从您的评论中可以看到,它只是使用了另一个用户组(plugdev而不是androiddev)。未验证,但我想说的重要部分是您的用户(您想与之一起使用USB)也属于这个组。
伊兹(Izzy)

1
SUBSYSTEM代替SUBSYSTEMSATTR而不是ATTRS之后,逗号MODE="0666" 不能肯定是否所有的这些改变是必要的,但是,这是什么工作。
jcomeau_ictx

哦,谢谢,错过了那些小家伙,@ jcomeau_ictx –好点!
伊兹

对于Linux,非熟练人员sudo wget -O /etc/udev/rules.d/51-android.rules这里为我的Xiaomi Mi A1工作。当然,学习更好,但是最好是懒惰:)
beeshyams '18

0

来自较新的Linux发行版的一些评论。配备Nexus 5X或Nokia 7.1(Android One)手机的Fedora 29。

首先断开电话(如果已连接)。

  1. 安装将提供ADB(sudo dnf install android-tools)的android-tools
  2. 复制udev规则(sudo cp /usr/share/doc/android-tools/51-android.rules /etc/udev/rules.d
  3. 重新加载udev规则(sudo udevadm control --reload-rules
  4. 重新启动ADB以确保(sudo systemctl restart adb

现在连接手机并从命令行运行adb devices。您可能会看到列出的设备带有“无权限”。这可以。
如果未列出该设备,则必须将设备添加到udev规则文件中,但对我而言,经过测试的设备仅适用于预定义的规则。

运行adb shell,希望您会在电话上收到安全通知,询问您是否要信任计算机,请选择“是”。
如果计算机改为显示“错误:设备权限不足”,则需要确保在电话上将USB端口设置为“传输文件”模式,而不是“为该设备充电”。在Android 8.1上,它位于“连接的设备”>“ USB”下的设置中。

我注意到,即使您今天进行了所有工作,明天,它也可能突然突然消失,没有明显的原因。如果发生这种情况,请先检查设备上的USB端口设置,该设置可能已更改回充电模式,如果失败,请撤消设备上的USB调试授权(在“开发人员”选项下的设置中),并希望您能将其弹出跑步时再次抬起头adb shell

这样,我就可以运行Android Studio并在连接的设备上运行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.