我有一个华为X1手机,版本是Android 4.2.2, 但之前用adb连接(包括usb/tcp)时总莫名其妙出现offline或unauthorized的问题,今天搞明白了原因并解决之:
1. 网上说从4.2.2开始,adb连接新增了认证确认功能,即用USB连接时在手机上会出现需要确认的对话框。用户点击确认后才可继续。在用户确认之前或出现其它认证相关的问题时,adb devices显示的状态是unauthorized。确认之后,android手机会在/data/misc/adb/adb_keys这个文件上添加一行key数据,据推测这个key应是运行adb的PC用户的RSA公钥。之后这个PC的用户运行adb连接这个手机时就不会再出现认证确认对话框了。
2. 上述说的是手机和adb(PC侧客户端)版本是4.2.2以上的情况。但如果adb的版本是旧的(不支持认证),而Android手机是新版本,这时连接肯定是不成功的,显示的状态是offline,而不是unauthorized,Android手机上也不会出现确认对话框。这时往往用户不知道是怎么回事。
3. 如果adb客户端不使用USB连接手机,而是使用TCP的方式(手机上需要启动adbd)连接手机, 例如: adb connect 192.168.1.10,估计是由于Android版本的BUG(不知后续版本是否有修复?),连接时不会出现认证确认对话框,导致出现unauthorized的问题。那么解决的方法是:先用USB连接并确认后,Android手机保存了该PC用户的Key后,使用TCP连接就可以直接成功了。