Android adb unauthorized 问题


关于这个问题,就像感冒一样,因人而异。也有很多朋友给出了很好的解决方案和解释,这里我记录一下自己碰上的情况。

我的问题在于:在开发者选项中撤回USB除错授权后打开USB调试,始终没有弹出授权界面(该界面如下图)。

解决方案是:

1. cmd > echo %ANDROID_SDK_HOME%   --->查看电脑环境变量中Android SDK的值是否正确(我的问题就是因为换了SDK位置导致的)

2. 修正ANDROID_SDK_HOME后,重启adb(adb kill 或者 任务管理器中杀掉进程就行)

3. 重新连接手机,adb devices。



碰上两次这样的情况了,因为没有总结,每次都重来一遍,我也是累了。。。

以后有机会还是应该看看源码的。

https://android.googlesource.com/platform/system/core/+/d5fcafaf41f8ec90986c813f75ec78402096af2d

这里有概述:

adb: Add public key authentification

Secure adb using a public key authentication, to allow USB debugging
only from authorized hosts.

When a device is connected to an unauthorized host, the adb daemon sends
the user public key to the device. A popup is shown to ask the user to
allow debugging once or permanantly from the host. The public key is
installed on the device in the later case. Other keys may be installed
at build time.

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.

ADB Protocol change:
If the device needs to authenticate the host, it replies to CNXN
packets with an AUTH packet. The AUTH packet payload is a random token.
The host signs the token with one of its private keys and sends an AUTH(0)
packet. If the signature verification succeeds, the device replies with
a CNXN packet. Otherwise, it sends a new AUTH packet with a new token so
that the host can retry with another private key. Once the host has tried
all its keys, it can send an AUTH(1) packet with a public key as
payload. adbd then sends the public key to the framework (if it has been
started) for confirmation.


你可能感兴趣的:(Android)