我刚得到了崭新的Wileyfox Swift,并且在投入使用之前,我想先对其进行oem unlock并对其进行root(就像我通常在新设备上所做的那样;)问题是,尽管设备上启用了USB调试功能,并且/etc/udev/rules.d/51-android.rules存在,而adb devices看不到该设备。

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

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

评论

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

我想选民没有意识到您是在张贴问题来自己回答问题(不一定在回答中注意到您)。由于在该问题或评论中没有暗示出于自我回答的目的而发布的内容,投票者可能反对倒数第二段(表示懒惰,如果在任何普通用户及其问题的上下文中阅读)。到目前为止,我还没有其他原因。
@Firelord听起来很有说服力(对问题进行了一些编辑,以防止出现其他失败步骤)。但是,那个用户应该已经回答了。还是我也想念那里的东西? ;)

#1 楼

在设备上启用USB调试

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

识别设备

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

Bus 004 Device 003: ID 2970:2282


设置ADB规则

我们现在需要在上一行的结尾: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当运行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完成此操作。

完成此操作,保留根shell。断开并重新连接您的Android设备,然后重试adb devices。现在,大多数设备都出现了,但Wileyfox Swift却没有出现,它显然想要一些额外的拥抱。如果遇到这种情况,请打开(或创建不存在的文件)文件~/.android/adb_usb.ini并在其中添加一行,并用上面的lsusb命名找到的供应商;对于Swift,它将是0x2970(是的,在这里,您需要在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.一起退出(遵循该建议(可选地,选中复选框以永久授权您的计算机)),您就可以完成:现在,您可以使用adb访问您的设备。


更新:

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

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


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

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

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


评论


在我的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供应商ID列表-请勿编辑。 #使用'android update adb'生成。每行1个USB供应商ID。 0x0e8d我不得不忽略运行android update adb的建议,并按照您的说明手动输入。

– jcomeau_ictx
17年5月15日在2:29

@jcomeau_ictx感谢您的反馈!据您的评论所见,它只是使用了一个不同的用户组(plugdev而不是androiddev)。未经验证,但我想说的重要一点是,您的用户(您想与之一起使用USB)也属于该用户组。

– Izzy♦
17年5月15日在6:17

还有SUBSYSTEM而不是SUBSYSTEM,ATTR而不是ATTRS,在MODE =“ 0666”之后的逗号不确定是否所有必要的更改都是必要的,但这是可行的。

– jcomeau_ictx
17年5月15日在7:22

哦–谢谢,错过了那些小的朋友@jcomeau_ictx –好点!

– Izzy♦
17年5月15日在13:21

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

– beeshyams
18年8月25日在11:02



#2 楼

来自较新的Linux发行版的一些评论。装有Nexus 5X或诺基亚7.1(Android One)手机的Fedora29。

首先断开手机(如果已连接)。


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

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

运行adb shell和希望您会在电话上收到安全通知,询问您是否要信任计算机,请选择“是”。如果计算机显示“错误:设备权限不足”,则需要确保在电话上已设置USB端口改为“传输文件”模式,而不是“为此设备充电”。在Android 8.1上,该文件位于“连接的设备”>“ USB”下的设置中。如果发生这种情况,请先检查设备上的USB端口设置,该设置可能已更改回充电模式,如果失败,请撤消设备上的USB调试授权(在“开发人员”选项下的设置中),希望您能将其弹出再次运行adb shell时。-

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