如何解决Android ADB主机设备中的ADB设备未经授权问题?

61

当我使用一个已经root的Android设备作为ADB主机向Samsung S4发送adb命令“adb devices”时,我收到了设备未授权的错误消息。然而,当我尝试用adb连接Samsung Galaxy Nexus时,它可以正常工作。有人能提供解决我的Samsung S4问题的建议吗?

=========================================
# adb devices
List of devices attached
4d00f9169907301b        unauthorized
=========================================

编辑: 发现这个问题只会在Android 4.2.2及以上版本出现。以下链接解释了Google为使用adb实施了一些新的安全功能。

http://nelenkov.blogspot.com/2013/02/secure-usb-debugging-in-android-422.html

如果有人能帮忙解决这个问题,将不胜感激。


"adb devices" 不是发送给设备的命令,而是查询本地ADB服务器的指令。 - Chris Stratton
1
运行adb devices时显示未经授权的设备。 - Bishal Paudel
15个回答

71
  • 从客户端手机(adb主机)获取公钥

    cat /data/.android/adbkey.pub

  • 将上述公钥复制到目标手机的/data/misc/adb/adb_keys位置。(您可能需要先使用stop adbd停止adb守护进程)

    cat /data/misc/adb/adb_keys

验证两个cat输出是否匹配。

尝试在目标设备上重新启动adb守护进程start adbd或者重启目标设备。

如��您在上述步骤中遇到读写ADB KEYS的问题,请尝试设置环境变量ADB_KEYS_PATH,并指定一个临时路径(例如:/data/local/tmp)。有关详细信息,请参阅该链接

    "On the host, the user public/private key pair is automatically generated,
    if it does not exist, when the adb daemon starts and is stored in
    $HOME/.android/adb_key(.pub) or in $ANDROID_SDK_HOME on windows. If needed,
    the ADB_KEYS_PATH env variable may be set to a :-separated (; under
    Windows) list of private keys, e.g. company-wide or vendor keys.

    On the device, vendors public keys are installed at build time in
    /adb_keys. User-installed keys are stored in /data/misc/adb/adb_keys"

1
我该如何将文件复制到目标手机?如果我尝试使用cat /data/misc/adb/adb_keys或者cd /data/,会出现“没有这个文件或目录”的错误。 - Kajsa
如何在Windows上实现? - user924
4
  1. 通过ssh将~/.android/adbkey.pub文件复制到/data/misc/adb/adb_keys目录下。
  2. 在设备上执行以下命令:chmod 0640 /data/misc/adb/adb_keyschown system:shell /data/misc/adb/adb_keyschcon u:object_r:adb_keys_file:s0 /data/misc/adb/adb_keysstart adbd。最后,使用默认的、未更改过的adb在主机上工作了。
- grandrew
@grandrew 我尝试了这些步骤,但在 Android 4.4.2(已 root)上没有成功,所有命令都通过了,cat adbkey.pub 在 PC 上匹配,但仍然要求进行身份验证。 - Mamdouh Saeed
这个解决方案对我很有效(在vmware上运行的android x86 7.1 LineageOS 14.1)。将pubkey文件复制到(必须先获得root访问权限)引用的文件夹后,我能够在虚拟机中部署和运行我的应用程序!谢谢! - digfish
显示剩余2条评论

50

检查并取消选中设备中的USB调试选项。 如果这样做不起作用,可以多次拔插USB。

在某个时刻,设备会显示一个消息框询问您是否授权计算机。点击是,然后设备将获得授权。


2
这对我很有帮助,我在设备插入时进行了操作,然后手机上弹出一个窗口询问是否信任该电脑,我选择了“始终信任”,现在我可以通过adb访问它。 - Steve
3
我必须在我的电脑上执行 adb kill-server 命令。然后拔掉 USB 电缆,等待 5 秒钟,再插入电缆,此时我的手机会询问是否允许 USB 调试。我点击了 确定,然后它就可以正常工作了(未授权 的提示消失了)。 - erik

33

如果有人遇到手机屏幕破裂的类似问题,需要访问adb:

  1. Root您的手机(我的已经root过了,所以我至少很幸运)。

如果您忘记启用开发者模式或adb未运行,请执行以下操作:

  1. 将您的手机重新启动进入恢复模式。
  2. 使用电缆连接手机。
  3. 打开终端。
  4. 如果您键入 adb devices,您应该在列表中看到设备。
  5. 如果是这样,请输入:

    adb shell mount /system
    abd shell
    
    echo "persist.service.adb.enable=1" >> default.prop 
    echo "persist.service.debuggable=1" >> default.prop
    echo "persist.sys.usb.config=mtp,adb" >> default.prop
    echo "persist.service.adb.enable=1" >> /system/build.prop 
    echo "persist.service.debuggable=1" >> /system/build.prop
    echo "persist.sys.usb.config=mtp,adb" >> /system/build.prop
    

如果你要重启手机,安卓系统会告诉你:"噢,你的adb工作正常,请点击OK按钮,这样我们就可以信任你的电脑。"如果我们无法在手机上操作,则需要保持恢复模式并执行以下步骤(假设你没有处于adb shell模式下,如果是的话,请先键入 exit):

cd ~/.android
adb push adbkey.pub /data/misc/adb/adb_keys
  1. 太好了,现在一切都应该很顺利了!只需重新启动手机,当手机运行时就应该能够访问adb:

    adb shell reboot

P.S. 我使用的是OS X和有破裂屏幕的Moto X Style。


1
adb shell rebootadb kill-serveradb shell按照这个顺序执行命令可以解决问题。 - Gelldur
@SifaturRahman 不确定您所说的终端仿真器是什么意思。您应该能够在macOS上的Terminal.app和Windows上的cmd.exe中使用adb。但是,显然,在这两种情况下,您需要下载和安装adb在您的操作系统上运行所需的任何内容。 - kiradotee
我已经到达了设备被列为“主机”的地步。不过,我发送的任何adb命令都会返回“错误:关闭”。我该如何跨越这一点呢? - Daniel Reina

12

你尝试过吗

adb kill-server
adb shell
有时adb会卡住,先杀死adb服务器,然后执行一些命令会弹出授权窗口。 请检查手机上的adb客户端版本。据我所记,此功能从adb 1.0.31开始支持。

1
终端显示的错误是:此adb服务器的$ADB_VENDOR_KEYS未设置。 - FelixH

8

经验:ASUS ZENFONE

如果您遇到了Asus Zenfones的驱动程序丢失问题,请按照以下链接操作: (http://donandroid.com/how-to-install-adb-interface-drivers-windows-7-xp-vista-623)

我尝试过:

1)在adb cmd中杀死并启动adb服务器。

2)打开和关闭USB调试等...

这是对我有效的方法:

步骤1:断开与设备的连接并关闭Eclipse

步骤2:导航至C:/Users/User_name/.android/

步骤3:您会发现adb_key

步骤4:只需将其删除。

步骤5:重新连接,系统将再次询问您。

步骤6:当它提示时,请让设备记住RSA密钥。 我想这就完成了。

如果您在几天后遇到相同的问题,请禁用并重新启用USB调试。


7

由于未知的原因,我只有~/.android/adbkey文件,而没有~/.android/adbkey.pub文件。

我猜测adb无法将公钥推送到设备上,因此设备无法显示授权对话框。

在杀死adb服务器、删除adbkey文件并重新启动adb后,手机弹出了授权对话框。


1
这就像我尝试的第15件事情,也是唯一有效的一件。谢谢你。 - LomaxOnTheRun
1
这也是对我有效的唯一选择。谢谢。 - nirojan

6

请按照以下步骤操作:

  1. 拔掉设备
  2. 执行adb kill-server命令
  3. 执行adb start-server命令
  4. 重新连接设备

在弹出窗口中允许USB调试。


1
当您第一次连接到计算机时,弹出窗口显示时,需要允许USB调试

0

我必须在手机上勾选调试器的框,选择“始终允许此手机”。然后我执行了adb devices命令,接着输入adb命令来清除广告。这样就可以正常工作了。在此之前,它无法识别pm和其他命令。


0

C:/users/<user name>/.android中删除文件夹.android。这对我解决了问题。


这对我来说已经足够了。 - Marcelo de Andrade
完全不相关的答案。他是从手机到手机,而不是从手机到Windows电脑。 - Eric Labelle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接