adb devices 看到设备,状态却是 unauthorized,adb shell 会提示去看手机上的确认框。手机上如果从来没弹出「允许 USB 调试」,不是线的问题,是这台电脑的 adb 密钥没准备好。
和「夜神模拟器 adb 版本不一致」不是同一类坑。那个是两套 adb 互相杀 server;这个是手机不信任这台 PC。
先看现象
text
List of devices attached
<serial> unauthorized
adb shell
adb.exe: device unauthorized.
This adb server's $ADB_VENDOR_KEYS is not set
Try 'adb kill-server' if that seems wrong.
Otherwise check for a confirmation dialog on your device.换线、开关 USB 调试、重启手机,甚至恢复出厂,都可能弹不出授权框。另一台电脑却能正常弹。硬件往往没坏。
密钥在哪
本机用户目录下的 .android(Windows 一般是 %USERPROFILE%\.android)里这几个文件:
adbkey私钥adbkey.pub公钥- 有时还有
adb_usb.ini(厂商 VID)
电脑要先有一对密钥,把公钥发给手机,手机才会问「要不要允许这台电脑调试」。这两个文件如果是空的,授权框就不会出现。
正常情况,重启 adb 或重开电脑会生成它们。空文件卡在那里时,生成步骤就没走完。
怎么补
不要把别人的私钥贴到网上,也不要抄进笔记。
- 结束本机所有
adb.exe。 - 若
adbkey/adbkey.pub是空文件,先删掉(或备份后删)。 adb kill-server再adb start-server,看.android里是否重新出现非空的这对文件。- 再插上手机,看是否弹出授权。勾选「始终允许这台计算机」。
本机始终生成不了时,用另一台已经能正常授权的电脑上同一用户目录里的 adbkey 和 adbkey.pub 拷过来(只在你自己的机器之间),然后:
bash
adb kill-server
adb start-server再插线。手机助手一类软件有时自带另一套 adb,所以它能弹窗、命令行 adb 不能,并不矛盾——两套用的不是同一对密钥。
版本不一致的报错(adb server version (31) doesn't match this client)可以同时存在。先把 PATH 里的 adb 统一成一份,再处理 unauthorized。