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

Posted

技术标签:

【中文标题】如何解决 Android ADB 主机设备中未经授权的 ADB 设备?【英文标题】:How to solve ADB device unauthorized in Android ADB host device? 【发布时间】:2014-11-30 13:52:53 【问题描述】:

当我使用 root 的 android 设备作为 ADB 主机向三星 S4 发送 adb 命令“adb devices”时,我收到了设备未经授权的错误消息。但是,当我尝试 adb 到三星 Galaxy Nexus 时,它工作正常。谁能建议如何解决我的三星 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服务器的查询。 在这里回答:***.com/questions/25236960/… 【参考方案1】:

必须在 s4 屏幕中提示您授权该计算机。你可以告诉它记住它。这是出于安全原因,在 Android 4.4+ 中发生

【讨论】:

感谢 webo80。来自计算机的亚行工作正常。但我的问题是当我尝试从 Android 手机的终端发送 ADB 命令时。 @KongKen 等一下 - 您是否正在尝试通过 ADB 将一部手机与另一部手机连接起来?你的意思是通过OTG还是无线ADB?如果是这样 - 这是一个非常有趣的尝试......顺便说一句,需要接收命令的手机上启用了开发人员选项,对吧? @Dev-iL 是的,我正在尝试通过 OTA 连接两部 Android 手机。 很难判断您是否通过 OTG 从手机终端使用 adb shell。不知道在“主机”使用的电话上可以使用 adb @KongKen 谷歌搜索ADB between two phones OTG 给出了一些相关结果(以及关于SO的类似问题)。也许this article on XDA 可以帮助你。【参考方案2】:

选中和取消选中设备中的 USB 调试选项。 如果这不起作用,请拔下并插入 USB 几次。

在某些时候,设备应该会显示一个消息框,要求您授权计算机。单击是,然后设备将被授权。

【讨论】:

这对我有帮助,在插入设备时这样做了,我的手机上弹出一个窗口询问我是否要信任 PC,说总是信任,现在我可以通过 adb 访问它 我必须在我的电脑上执行adb kill-server。然后拔掉 USB 数据线,等待 5 秒,插上电源,我的手机要求我允许 USB 调试。我检查了OK,然后它起作用了(unauthorized这个词消失了)。【参考方案3】:

你试过了吗

adb kill-server
adb shell

有时 adb 卡住了,先杀死 adb 服务器,然后启动一些命令会强制弹出授权窗口。

另外请检查您手机上的 adb 客户端版本。 据我所知,adb 1.0.31 支持此功能。

【讨论】:

This adb server's $ADB_VENDOR_KEYS is not set 是终端显示的错误【参考方案4】:

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

cat /data/.android/adbkey.pub

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

cat /data/misc/adb/adb_keys

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

尝试在目标 start adbd 上重新启动 adb 守护程序,或者直接重新启动它们。

如果您在上述步骤中读取或写入 ADB KEYS 时遇到问题,请使用临时路径 try setting environment variable ADB_KEYS_PATH(例如:/data/local/tmp)。更多详情请参考that link it goes into

    "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"

【讨论】:

嗨 ashoke,在 android 手机中如何永久更改 $HOME 路径? @KongKen 如果它已植根,您可以更改默认的$HOME;很多其他的东西都依赖它,不知道它是否会引起其他副作用。无论如何,您始终可以设置adb kill-server;HOME=/sdcard adb start server。请参阅this discussion there is custom script,这可能会对您有所帮助。 为什么引用的提交说adb_key(.pub)而文件叫adbkey(.pub) 如何将文件复制到目标手机?如果我尝试cat /data/misc/adb/adb_keys 甚至cd /data/ 我会得到No such file or directory 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【参考方案5】:

使用经验:华硕 ZENFONE

如果您遇到过 Asus Zenfone 缺少驱动程序 按照这个链接 (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 调试

【讨论】:

很有魅力,谢谢【参考方案6】:

我找到了一个安装了 Nexus 5 和 TWRP 的解决方案。基本上格式是我找到的唯一解决方案,我尝试了之前列出的所有解决方案:ADB Android Device Unauthorized

请 Google 备份您的应用。保存您手机上可能拥有的所有重要文件

请注意,如果失败,我拒绝承担所有责任,因为我所做的风险很大,但在我的情况下有效:

在开发者选项中启用 USB 调试(不确定是否有帮助,因为设备未经授权但仍然...)

确保您的手机已连接到计算机并且您可以访问存储空间

下载您的联系的 google img:https://developers.google.com/android/nexus/images 解压缩文件并将它们放在计算机上的新文件夹中,将其命名为工厂(任何名称都可以)。

擦除所有数据...您将在您的 android 中从计算机访问 0 个文件。

然后重新启动进入 BOOTLOADER 模式...您将收到消息“您没有安装操作系统,您确定要重新启动吗?”

然后执行(双击)“工厂”文件夹内的 .bat 文件。

您将看到操作系统的命令行详细安装。当然避免在此阶段断开电缆...

电话初始化大约需要 500 万。

【讨论】:

【参考方案7】:

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

    root 你的手机(我的手机已经root了,所以至少我很幸运)。

如果您忘记启用开发者模式并且您的 adb 没有运行,请执行以下操作:

    重启手机进入恢复模式。 用数据线连接手机。 打开终端。 如果您输入adb devices,您应该会在列表中看到该设备。

    如果是,请输入:

    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
    

现在,如果您要重新启动手机,android 会告诉您“哦,您的 adb 正在工作,但请点击此 OK 按钮,这样我们就可以信任您的 PC”。显然,如果我们无法点击手机,请保持在恢复模式并执行以下操作(假设您未处于 adb shell 模式,如果是,请先输入exit):

cd ~/.android
adb push adbkey.pub /data/misc/adb/adb_keys

    万岁,现在一切都应该是大块头了!重启手机就可以在手机运行时访问adb了:

    adb shell 重启

附:正在使用屏幕破裂的 OS X 和 Moto X Style。

【讨论】:

@Baxtex 尝试将~/.android 替换为C:\User\user_name\.android 啊,是的,我确实从 .android 复制了 adb_keys,试了 3 次,没有任何区别。我还尝试过刷新库存固件并恢复出厂设置。没有任何效果。一个星期前它工作得很好,然后突然停止了。我的另一部手机 Moto G 仍然可以正常工作... 非常感谢。自 2 小时以来,我一直在寻找解决方案,终于成功了。 此解决方案在屏幕损坏且我们无法点击记住此设备等时很有帮助... adb shell reboot adb kill-server adb shell 此顺序的命令有帮助。【参考方案8】:

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

【讨论】:

这对我来说已经足够了。 完全不相关的答案。他是从手机到手机,而不是从手机到windows pc。【参考方案9】:

我必须在手机上选中“始终允许在此手机上”的调试器复选框。然后我做了一个 adb devices 然后输入 adb 命令来清除添加。它工作得很好。在此之前,它不识别 pm 和其他命令

【讨论】:

【参考方案10】:

当你第一次连接电脑出现弹窗时,你需要允许Allow USB debugging

【讨论】:

【参考方案11】:

对我来说,模拟器无法启用 Google Play 服务。它可能有 Google API 或者是 x86 或 x64 但不是 google play store。

【讨论】:

【参考方案12】:

试试这个步骤:

    拔掉设备 adb kill-server adb 启动服务器 插头装置

您需要在弹出时允许设备中的允许 USB 调试。

【讨论】:

【参考方案13】:

不知什么原因,我只有~/.android/adbkey,没有~/.android/adbkey.pub

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

杀死adb服务器后,删除adbkey文件,再次启动adb,手机上弹出授权对话框。

【讨论】:

这就像我尝试的第 15 件事,也是唯一有效的。谢谢。 这也是唯一对我有用的选项。谢谢

以上是关于如何解决 Android ADB 主机设备中未经授权的 ADB 设备?的主要内容,如果未能解决你的问题,请参考以下文章

com.android.ddmlib.adbcommandrejectedexception:未经授权的设备。

如何通过 TCP 使用 ADB 连接到 Android? [关闭]

无法将 Nexus 4 连接到 adb:未经授权

ADB工具常用指令和使用情形分析

无法将Nexus 4连接到adb:未经授权

Adb connect监听指定的主机和端口/Adb监听Visual Studio Emulator for Android模拟器