用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中,否则还是不能认证通过。

参考链接:http://blog.csdn.net/a623891391/article/details/51097315

android默认开启adb调试方法分析的更多相关文章

  1. NDK开发历程(一):android native code的调试方法

    引用:http://www.cnblogs.com/ychellboy/archive/2013/02/22/2922683.html 使用NDK在android上做开发是一件“痛并快乐着”的差事,之 ...

  2. 使用Unity开发Android的几种调试方法

    前言 本文举例几种Android 调试的方法(PS:我是通过unity引擎来开发安卓游戏) Eclipse + adt 查看LOG 1.为Eclipse 装上adt 插件 2.打开Eclipse 的L ...

  3. android机顶盒真机调试方法

    最近接触电视APP开发,之前对Android开发也不太了解还一直以为不能真机调试.最近静下心来想一想肯定能真机调试的,我是我不知道而已.现在讲述一下真机调试的步骤: 1.进入设置--关于,连续点击版本 ...

  4. Android 使用网络ADB调试.

    前提: android Phone和PC在同一局域网内. android Phone 有虚拟终端(CM系统集成了ADB网络调试,比较赞.); 1.在android phone虚拟终端输入 stop a ...

  5. Android虚拟机 USB转串口调试方法

    有时候需要在虚拟机调试串口,首先安装串口的驱动程序(不知道的话可以用驱动精灵),然后打开设备管理器找到驱动,查看驱动使用的端口(比如COM3),虚拟机需要在命令行启动: 将SDK下的tools文件夹加 ...

  6. android应用崩溃的调试方法(c++ lib so文件库崩溃)

    android调试工具addr2line使用: 1.将ndk中的arm-linux-androideabi-addr2line可执行文件的路径加入配置文件~/.bashrc中,例如: export P ...

  7. Android平台 Psensor传感器调试方法

    一. 驱动层调试1.在板级dts文件中增加相应的dts代码,如:调试sensor类,在代码中找到已经有的代码在修改,I2C使用那根(一般为I2C3),I2C地址(找datasheet或者FAE),哪个 ...

  8. 安卓源码默认开启USB调试

    找到\frameworks\base\services\usb\java\com\android\server\usb\UsbDeviceManager.java下的 Settings.Global. ...

  9. Android手机、电视(盒子) 打开ADB调试 一览表

    手机.电视(盒子) 打开ADB调试 一览表 一.手机打开ADB调试方法 序号 名称 描述 方式 1 华为手机 EMUI 1.设置 ->关于手机-> 版本号 点击(4~5次)2.返回设置 - ...

随机推荐

  1. Android Studio下HierarchyViewer的使用

    什么是HierarchyViewer Hierarchy Viewer是随AndroidSDK发布的工具,位置在tools文件夹下,名为hierarchyviewer.bat.它是Android自带的 ...

  2. Pulsar-Producer实现简介

    “Pulsar is a distributed pub-sub messaging platform with a very flexible messaging model and an intu ...

  3. Python—UI自动化完整实战

    实战项目 均来源于互联网 测试报告2017年11月29日优化后的测试报告:https://github.com/defnngj/HTMLTestRunner 1.项目概述: 本实战已126邮箱为例子进 ...

  4. Chapter 4 Invitations——10

    "Mr. Cullen?" the teacher called, seeking the answer to a question that I hadn't heard. “C ...

  5. 【EF6学习笔记】(九)异步处理和存储过程

    本篇原文:Async and Stored Procedures 为何要采用异步? 一个Web服务器肯定有可用线程的限制,那么在一些访问量特别大的情况下,线程肯定会消耗完:这个时候服务器肯定处理不了请 ...

  6. 第8章 CentOS包管理详解

    8.1 Linux上构建C程序的过程 在说明包相关的内容之前,我觉得有必要说一下在Linux上构建一个C程序的过程.我个人并没有学习过C,内容总结自网上,所以可能显得很小白,而且也并非一定正确,只希望 ...

  7. JuiceSSH使用教程: 玩转Linux与Windows

    JuiceSSH使用教程:  0.0.环境准备 1.PowerShellServer V6(一般安装这一个就够了,如果不行就考虑把后面两个也安装上) 2.PowerShell-6.0.1(一般电脑已经 ...

  8. React Fiber源码分析 第三篇(异步状态)

    先附上流程图~ 调用setState时, 会调用classComponentUpdater的enqueueSetState方法, 同时将新的state作为payload参数传进 enqueueSetS ...

  9. c# 接口的协变和逆变

    如果派生类只是用于输出值,那么这种结构化的委托有效性之间的常数关系叫做协变 就是创建一个派生类委托对象 让派生类赋值给基类对象 协变关键字out 对期望传入基类时允许传入派生对象的特性叫逆变  逆变关 ...

  10. 禅道导入bugfree 3.0的数据

    禅道项目导入bugfree功能只支持到2.0, 官方不提供3.0的导入,只好自己写了一个.因为bugfree 3.0换人开发了,表结构和禅道差别很大,所以,这个工具不是完全转换,一些History表内 ...