但使书种多,会有岁稔时。这篇文章主要讲述android默认开启adb调试方法分析相关的知识,希望能为你提供帮助。
用adb调试android时,每次接入usb线,都会提示一个确认打开usb调试功能的窗口,有时候,我们需要默认打开usb调试功能。或者无需弹出对话框,直接默认开启。这个我们需要分析adb的流程了。
adb认证流程如下图:
文章图片
认证流程:
1. 我们如果在PC端使用过adb命令,则会在当前用户目录生成一对密钥,密钥存放在.android目录,其中adbkey为私钥,adbkey.pub为公钥。
2. adb会把公钥(adbkey.pub)发送给android设备来获取认证,建立adb连接。
3. android 会根据属性ro.adb.secure来判断,是否进行认证,如果为0,则不需要认证,允许建立adb连接。如果为1,则需要进行密钥认证。
4. 如果需要进行adb密钥认证,则把接收到的adbkey.pub与本地的/data/misc/adb/adb_keys进行对比,如果相同,则表明是允许此设备进行adb连接,如果不相同,则弹出对话框,提示用户是否允许打开usb调试功能。
解决方法:
从上面的流程我们可以通过如下三种方法来默认打开usb调试功能:
1. 在/frameworks/base/packages/SystemUI/src/com/android/systemui/usb 该目录下修改 UsbDebuggingActivity.java
privateclassUsbDisconnectedReceiverextendsBroadcastReceiver{
privatefinalActivity mActivity;
publicUsbDisconnectedReceiver(Activity activity){
mActivity = activity;
}
@Override
publicvoid onReceive(Context content,Intent intent){
String action = intent.getAction();
if(!UsbManager.ACTION_USB_STATE.equals(action)){
return;
}
boolean connected = intent.getBooleanExtra(UsbManager.USB_CONNECTED,false);
//boolean connected = false;
//直接关闭对话框
if(!connected){
mActivity.finish();
}
/*
//直接确认允许通过
//allowUsbDebugging
try {
IBinder b = ServiceManager.getService(USB_SERVICE);
IUsbManager service = IUsbManager.Stub.asInterface(b);
service.allowUsbDebugging(true, mKey);
} catch (Exception e) {
Log.e(TAG, "Unable to notify Usb service", e);
}
*/
}
}
直接默认允许通过
2. 修改属性ro.adb.secure=0,关闭认证即可。 不同的android版本修改的地方不一样,主要达到的目的是使得最终的default.prop中的ro.adb.secure=0即可。
3. 我们把PC端的公钥adbkey.pub直接导入到android的密钥文件/data/misc/adb/adb_keys中,这样每次认证的时候,就能够保证认证通过了,但是换一台PC之后,则需要把之前认证过的密钥拷贝到新的PC中,否则还是不能认证通过。
【android默认开启adb调试方法分析】参考链接:http://blog.csdn.net/a623891391/article/details/51097315
推荐阅读
- Android 8.0+ 通知不显示的适配
- 禁止APP内部截屏,系统截屏都不好使
- 安卓抽屉菜单(侧滑菜单)全屏设置
- android adb 流程原理代码分析
- 安卓真机或者模拟器运行安装应用时提示 Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res
- 安卓打印长日志
- [Java]基本資料包裝類別 Wrapper Classes
- Android 摇一摇监听实现
- android studio 环境配置及使用时遇到的问题