首页
版块
资源库
社区
工具箱
WiKi
搜索
仅搜索标题
用户:
仅搜索标题
用户:
登录
搜索
仅搜索标题
用户:
仅搜索标题
用户:
菜单
安装应用
安装
回复主题
首页
小米4/4S/4C
我想去掉adb授权提示,但我实在搞不懂资料
禁用JavaScript。为了获得更好的体验,请在运行之前启用浏览器中的JavaScript。
您正在使用一款已经过时的浏览器!部分功能不能正常使用。
请使用Chrome或其他浏览器。
信息
[QUOTE="ymltsh, post: 19916, member: 15129"] 用adb调试android设备时,首次连接时,会出现一个授权提示: error: device unauthorized. Please check the confirmation [URL='https://so.csdn.net/so/search?q=dialog&spm=1001.2101.3001.7020']dialog[/URL] on your device. 工作原理: 原来在我们的PC机(以windows为例)上启动了adb.exe进程时,adb会在本地生成一对[URL='https://so.csdn.net/so/search?q=%E5%AF%86%E9%92%A5&spm=1001.2101.3001.7020']密钥[/URL]adbkey(私钥)与adbkey.pub(公钥); 根据弹框提示“The computer's RSA key fingerprint is:xxxx”,可以看出是一对RSA算法的密钥,其中公钥是用来发送给手机的; 当你执行“adb shell”时,adb.exe会将当前PC的公钥(或者公钥的hash值)(fingerprint)发送给android设备;这时,如果android上已经保存了这台PC的公钥,则匹配出对应的公钥进行认证,建立adb连接;如果android上没有保存这台PC的公钥,则会弹出提示框,让你确认是否允许这台机器进行adb连接,当你点击了允许授权之后,android就会保存了这台PC的adbkey.pub(公钥); 当然手机厂商也有可能会内置一些adbkey.pub(公钥); 那么问题来了,这些密钥在PC与Android上分别存储在哪里? 首先PC上,以Windows7为例,当你首次启动adb.exe时,会在C盘的当前用户的目录下生成一个".android"目录,其中adbkey与adbkey.pub就在这个目录下;(adb.exe会在启动时读取这两个文件(没有就重新生成),所以如果你要是删除或者修改了这两个文件之后,必须要关闭adb.exe进程,重启之后才能生效;) 其次Android上,PC的公钥被保存在一个文件中"/data/misc/adb/adb_keys"; 在知道了adb这种认证的原理之后,你可以在不希望自己android设备授权任何PC设备进行adb链接时,清除"/data/misc/adb/adb_keys"文件; 也可以在没有屏幕的情况下,让已经认证过的PC将你PC上的adbkey.pub中的公钥导入到android中的"/data/misc/adb/adb_keys"文件中,或者将已经认证过的PC机上的adbkey与adbkey.pub拷贝到本机上覆盖你自己的adbkey与adbkey.pub,然后重启adb.exe,即可执行adb命令; 需求:在用户版的情况下使用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、在/build/core/main.mk 把 ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=0 修改为 ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1 方法二: 直接关闭adb的认证机制(google adb secure)user版直接adb 调试模式 需要修改 /build/core 目录下的 main.mk ifeq (true,$(strip $(enable_target_debugging))) # Target is more debuggable and adbd is on by default ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1 # Include the debugging/testing OTA keys in this build. INCLUDE_TEST_OTA_KEYS := true else# !enable_target_debugging # Target is less debuggable and adbd is off by default #ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=0 ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1 ADDITIONAL_DEFAULT_PROPERTIES += ro.adb.secure=0 endif # !enable_target_debugging 根据ro.debuggable = 1 or 0 来设置,1 就是开启adb, 0 即关闭adb debug. 关闭授权框提示:这个ro.adb.secure=0(0为不显示信任此电脑,1为显示信任此电脑) 去掉adb 密钥校验:ro.adb.secure=0 不显示对话框 而ro.adb.secure 这个system property 对于adbd 的控制点在/system/core/adb/adb.c 中的 property_get("ro.adb.secure", value,"0"); auth_enabled =!strcmp(value,"1"); if(auth_enabled) adb_auth_init(); [/QUOTE]
发送
+
文明上网,理性发言