Android13 网络 Adb 默认开启
Android 13 网络 Adb 默认开启
文章目录
- Android 13 网络 Adb 默认开启
- 一、前言
- 二、默认adb 代码实现
- 1、修改的目录:
- 2、具体修改:
- (1)在XXX_device.mk 添加属性
- (2)设置固定端口号
- (3)去除判断网络后,设置 ADB_WIFI_ENABLED 为 0 的代码
- 三、日志查看
- 四、其他
- 1、adb 相关属性
- (1) prop属性:persist.adb.tls_server.enable
- (2)prop属性:service.adb.tls.port
- (3)Settings属性:Settings.Global.ADB_WIFI_ENABLED "adb_wifi_enabled"
- 2、AdbService.java、AdbDebuggingManager.java、adb_wifi.cpp 的关系
- (1) adb_wifi 是底层init/cpp 启动的服务
- (2)AdbService启动时机
- (3)ramework\base\core\java\android\debug\IAdbManager.aidl
一、前言
通过代码分析发现Android13 上对 网络adb 进行了限制!
Android13原生代码要求:必现连接上某个wifi,才能进行adb ,并且切换wifi或者关闭wifi都是会停止adb。
如果要做成Android11 或者之前一样,设备连接WiFi/有线网络后电脑可以直接进行adb连接,就要对系统代码进行适配修改。
关键:
1、mk 设置系统属性:persist.adb.tls_server.enable=1
2、写死端口号 5555
3、注释若干判断Wifi情况停止adb的代码
之前以为设置端口号和persist.adb.tls_server.enable 属性就ok了,但是还是有些小bug,还是要完全研究一遍具体流程。
二、默认adb 代码实现
1、修改的目录:
packages\modules\adb\daemon\adb_wifi.cpp
framework\base\services\core\java\com\android\server\adb\AdbDebuggingManager.java//修改前面两个文件就可以实现adb了,后面的文件试辅助分析的。//虽然 SettingsProvider 也有加载 Settings属性 Settings.Global.ADB_WIFI_ENABLED ,
//但是 prop那个属性更优先,所以可以不用考虑这里默认情况
framework\base\packages\SettingsProvider\src\com\android\providers\settings\SettingsProvider.java//增加分析定位文件,系统服务启动后会判断 属性persist.adb.tls_server.enable 进行相关操作
//如果属性设置不生效,可以在这里添加打印日志查看过程
framework\base\services\core\java\com\android\server\adb\AdbService.java
2、具体修改:
(1)在XXX_device.mk 添加属性
persist.adb.tls_server.enable = 1
手动添加,也是会记忆的!
(2)设置固定端口号
+++ b/release/packages/modules/adb/daemon/adb_wifi.cpp
@@ -160,7 +160,8 @@ static void enable_wifi_debugging() {if (sTlsServer != nullptr) {delete sTlsServer;}
- sTlsServer = new TlsServer(0);
+ // default port 0 means random,change to 5555 ,by liwenzhi
+ sTlsServer = new TlsServer(5555);if (!sTlsServer->Start()) {LOG(ERROR) << "Failed to start TlsServer";delete sTlsServer;
(3)去除判断网络后,设置 ADB_WIFI_ENABLED 为 0 的代码
一个是初始化的时候判断,另外一个是监听网络变化的时候判断,都去掉就行。
+++ b/release/frameworks/base/services/core/java/com/android/server/adb/AdbDebuggingManager.java
public class AdbDebuggingManager {case MSG_ADBDWIFI_ENABLE: {if (mAdbWifiEnabled) {break;}//not to check network state ,change by liwenzhi //(1)去除下面一大段判断网络和监听网络的代码/** AdbConnectionInfo currentInfo = getCurrentWifiApInfo();if (currentInfo == null) {Settings.Global.putInt(mContentResolver,Settings.Global.ADB_WIFI_ENABLED, 0); //关闭 adb wifibreak;}if (!verifyWifiNetwork(currentInfo.getBSSID(),currentInfo.getSSID())) {// This means that the network is not in the list of trusted networks.// We'll give user a prompt on whether to allow wireless debugging on// the current wifi network.Settings.Global.putInt(mContentResolver,Settings.Global.ADB_WIFI_ENABLED, 0);break;}setAdbConnectionInfo(currentInfo); **///no listener network change for disable adb_wifi,by liwenzhi/** IntentFilter intentFilter =new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);mContext.registerReceiver(mBroadcastReceiver, intentFilter); **/SystemProperties.set(WIFI_PERSISTENT_CONFIG_PROPERTY, "1");case MSG_ADBDWIFI_DISABLE:if (!mAdbWifiEnabled) {break;}mAdbWifiEnabled = false;setAdbConnectionInfo(null);//no need unregisterReceiver, because no listener network,chenge by liwenzhi,//(2)监听已经注释,不需要再注销监听//mContext.unregisterReceiver(mBroadcastReceiver);case MSG_ADBWIFI_ALLOW:if (mAdbWifiEnabled) {break;}String bssid = (String) msg.obj;boolean alwaysAllow = msg.arg1 == 1;if (alwaysAllow) {mAdbKeyStore.addTrustedNetwork(bssid);}// Let's check again to make sure we didn't switch networks while verifying// the wifi bssid.//no to check network ,change by liwenzhi //(3)不需要判断网络/** AdbConnectionInfo newInfo = getCurrentWifiApInfo();if (newInfo == null || !bssid.equals(newInfo.getBSSID())) {break;}setAdbConnectionInfo(newInfo); **/Settings.Global.putInt(mContentResolver,Settings.Global.ADB_WIFI_ENABLED, 1);//no listener network change for disable adb_wifi,by liwenzhi //(4)不需要要监听网络变化/** IntentFilter intentFilter =new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);mContext.registerReceiver(mBroadcastReceiver, intentFilter); **/SystemProperties.set(WIFI_PERSISTENT_CONFIG_PROPERTY, "1");
三、日志查看
日志查看主要是:AdbService.java、AdbDebuggingManager.java、adb_wifi.cpp
AdbService 的日志默认是关闭模式的,需要设置成true,并且如果要看里面数据具体值,相关属性的日志需要自己添加打印出来。
AdbDebuggingManager 是有相关异常过程日志的
adb_wifi 该文件的打印,TAG 是adbd, 不管有没有打开adb,整个系统是一直有这个 adbd 的相关打印的,每秒大概有十几行日志!
这里查看打印相关日志多个关键字的信息命令:
logcat | grep -E "lwz|AdbService|changed to|adb wifi|AdbDebuggingManager"
lwz 是我自己加的关键字。
通过日志查看,正常开启的情况大概日志过程是:
01-01 08:00:22.756 496 511 I adbd : Waiting for persist.adb.tls_server.enable=1
08-16 15:13:50.123 762 762 D SystemServerTiming: StartAdbService
08-16 15:13:51.528 762 762 D AdbService: systemReady //修改 DEBUG = true 才看到的日志
08-16 15:13:51.528 762 762 D AdbService: lwz systemReady= persist.adb.tls_server.enable = 1 //自己加的日志打印
08-16 15:13:51.528 762 762 D AdbService: lwz systemReady mIsAdbWifiEnabled= true //自己加的日志打印,确认查看服务启动是否打开 adb
08-16 15:13:58.993 762 799 D AdbService: setAdbEnabled(true), mIsAdbUsbEnabled=true, mIsAdbWifiEnabled=true, transportType=0
08-16 15:13:58.994 762 762 D AdbService: lwz onChange shouldEnable = true
08-16 15:13:58.995 762 799 D AdbService: setAdbEnabled(true), mIsAdbUsbEnabled=true, mIsAdbWifiEnabled=true, transportType=1
08-16 15:13:59.015 762 802 D ActivityManagerTiming: OnBootPhase_1000_com.android.server.adb.AdbService$Lifecycle
08-16 15:13:59.016 762 802 V ActivityManagerTiming: OnBootPhase_1000_com.android.server.adb.AdbService$Lifecycle took to complete: 1ms
08-16 15:13:59.016 762 799 D AdbService: boot completed
08-16 15:13:59.033 496 511 I adbd : persist.adb.tls_server.enable changed to 1 //正常开启adb的日志
08-16 15:13:59.056 496 511 I adbd : adb wifi started on port 5555
08-16 15:13:59.058 496 511 I adbd : Waiting for persist.adb.tls_server.enable=0
如果未屏蔽网络判断,添加打印日志查看过程:
08-18 16:51:20.104 762 762 D SystemServerTiming: OnBootPhase_550_com.android.server.adb.AdbService$Lifecycle
08-18 16:51:20.104 762 762 D AdbService: systemReady
08-18 16:51:20.105 762 762 D AdbService: lwz systemReady mIsAdbWifiEnabled= true //这里说明,prop 属性已经设置了
08-18 16:51:26.248 762 798 I AdbDebuggingManager: Not connected to any wireless network. Not enabling adbwifi. //这里提示没网络,会执行关闭adb
08-18 16:51:26.586 762 762 D AdbService: lwz onChange shouldEnable = false
08-18 16:51:27.411 762 762 D AdbService: lwz onChange shouldEnable = false
08-18 16:51:27.971 762 798 D AdbService: setAdbEnabled(true), mIsAdbUsbEnabled=true, mIsAdbWifiEnabled=true, transportType=0
08-18 16:51:27.972 762 798 D AdbService: setAdbEnabled(false), mIsAdbUsbEnabled=true, mIsAdbWifiEnabled=true, transportType=1 //关闭adb
08-18 16:51:27.973 510 517 I adbd : persist.adb.tls_server.enable changed to 0 //到这里 persist.adb.tls_server.enable 属性又变成了 0
08-18 16:51:27.973 510 517 I adbd : adb wifi stopped
08-18 16:51:27.981 762 798 D AdbService: Broadcasting enable = false, type = 1
这个也是为啥配置了那个 persist.adb.tls_server.enable =1 属性后,系统启动发现获取属性还是0 ,并且wifi adb未打开。
四、其他
1、adb 相关属性
(1) prop属性:persist.adb.tls_server.enable
系统启动后,AdbService 会判断该属性决定后续是否执行开启adb。
(2)prop属性:service.adb.tls.port
该属性是 adb_wifi.cpp 使能adb的时候设置的. 后续让你知道它的端口号。
所以设置这个属性值是没有意义的。
在 adb_wifi.cpp,初始化 TlsServer 设置固定端口 5555,那么这个属性一直就是 5555.
(3)Settings属性:Settings.Global.ADB_WIFI_ENABLED “adb_wifi_enabled”
同时在 AdbService 是有监听 这个Global 属性的变化,关联上 AdbDebuggingManager ,设置 adb 使能。
查询和设置命令:
//查询属性;
setttings get global adb_wifi_enabled
//设置属性 0/1:
setttings put global adb_wifi_enabled 1
该属性是系统上层设置的一个值,原本主要用来记录adb wifi 的开关状态。
因为Android13 会判断当前wifi是否是信任的,切换wifi后设置这个属性是无效的。
但是如果修改了上面去除网络限制对策后,直接设置Global属性,是会正常开关adb的。
如果未去除网络限制对策,你会发现 adb_wifi_enabled 无法设置成1,
因为 AdbDebuggingManager 在开启的是会还会判断网络情况,如果没有网络会设置为 0 .
2、AdbService.java、AdbDebuggingManager.java、adb_wifi.cpp 的关系
(1) adb_wifi 是底层init/cpp 启动的服务
具体哪里启动的暂不去研究
里面的日志是跑在比较前面的,比SystemServer 更早。
同时也是具体能够使能 网络adb 的关键;
也是为啥设置了 persist.adb.tls_server.enable=1 能够直接使能网络adb的原因。
正常开启和关闭adb 是有相关日志的。
(2)AdbService启动时机
AdbService 是SystemServer 执行 startOtherServices 里面启动的服务。
AdbService extends IAdbManager.Stub //具体暴露接口可以看 IAdbManager
AdbDebuggingManager 是一个管理adbDebug的类,在 AdbService 里面实例化,其实就是分化了一下具体执行的代码。
很多无法进入adb wifi 的情况都是在AdbDebuggingManager 拒绝的,并且重新设置了 Global属性 和 Prop 属性为0
(3)ramework\base\core\java\android\debug\IAdbManager.aidl
package android.debug;import android.debug.FingerprintAndPairDevice;
import android.debug.IAdbCallback;/*** Interface to communicate remotely with the {@code AdbService} in the system server.** @hide //隐藏的!*/
interface IAdbManager {/*** Allow ADB debugging from the attached host. If {@code alwaysAllow} is* {@code true}, add {@code publicKey} to list of host keys that the* user has approved.** @param alwaysAllow if true, add permanently to list of allowed keys* @param publicKey RSA key in mincrypt format and Base64-encoded*/void allowDebugging(boolean alwaysAllow, String publicKey);/*** Deny ADB debugging from the attached host.*/void denyDebugging();/*** Deny ADB wireless debugging on the connected network.*/void denyWirelessDebugging();/*** Returns true if device supports secure Adb over Wi-Fi.*/boolean isAdbWifiSupported();}
上面接口估计对开发者没啥用!
适配了去除网络限制上面代码后,就应用而言,使用 Settings.Global.ADB_WIFI_ENABLED 控制和或者当前 网络adb状态最合适的。
虽然使用prop 属性也能生效,但是系统应用Settings判断的是Settings.Global.ADB_WIFI_ENABLED的值是否为1,会出现状态显示不同步的情况。
相关文章:
Android13 网络 Adb 默认开启
Android 13 网络 Adb 默认开启 文章目录 Android 13 网络 Adb 默认开启一、前言二、默认adb 代码实现1、修改的目录:2、具体修改:(1)在XXX_device.mk 添加属性(2)设置固定端口号(3)去…...
Git分享-规范/建议/技巧
1. Git多人协作开发流程图 1.1 processOn默认的模板 1.2 改造之后 https://www.processon.com/view/link/64ccaf56a433c931b2f9428a 访问密码:512I ① 总流程图 ② feat分支(功能/需求 分支)流程 ③ bugfix分支(紧急补丁分支&…...
vue3文件下载功能
定义方法: utils.js /**** param url 目标下载接口* param query 查询参数* param fileName 文件名称* returns {*}*/ export function downBlobFile(url: any, query: any, fileName: string) {return request({//url: url,method: get,responseType: blob,param…...
Python调用文心一言的API
最近申请了文心一言的key,然后尝试调用了一下文心一言,这里使用一个简单的方式来调用文心一言: pip install paddle-pipelinesfrom pipelines.nodes import ErnieBotapi_key "your apply key" secret_key "your apply secr…...
【计算机网络八股】计算机网络(一)
目录 计算机网络的各层协议及作用?TCP和UDP的区别?UDP 和 TCP 对应的应用场景是什么?详细介绍一下 TCP 的三次握手机制?为什么需要三次握手,而不是两次?为什么要三次握手,而不是四次?…...
记录一次arcgis engine开发版本引入问题
之前基于arcigs 10.1vs2013开发的程序,现在拿出来要改,但是目前版本是arcgis10.7vs2017/vs2019,打开后无论如何替换引用版本,都报错 (具体版本对应可以看这:ArcGIS Engine 与 Visual Studio 版本对照表_vs2019对应啥版…...
2023年Java毕业设计怎样选题,有哪些注意事项,300道Java毕业设计题目
文章目录 一、确定个人兴趣和技能二、考虑实际应用价值三、注重创新和独特性四、合理规划时间和资源五、注重实践和测试Java 毕业设计题目参考第一部分第二部分 小结 随着计算机技术的不断发展,Java编程语言已经成为了众多大学计算机专业学生必修的一门课程。而Java…...
算法-滑动窗口-串联所有单词的子串
算法-滑动窗口-串联所有单词的子串 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/substring-with-concatenation-of-all-words/ 1.2 题目描述 2 滑动窗口Hash表 2.1 解题思路 构建一个大小为串联子串的总长的滑动窗口为每个words中的子串创建一个hash表, <子…...
2023年7月京东美妆护肤品小样行业数据分析(京东数据挖掘)
如今,消费者更加谨慎,消费决策也更加理性。在这一消费环境下,美妆护肤市场中,面对动辄几百上千的化妆品,小样或体验装无疑能够降低消费者的试错成本。由此,这门生意也一直备受关注。 并且,小样…...
记录Taro巨坑,找不到sass类型定义文件
问题 taronutuisassts项目里tsconfig.json一直报红报错。 找不到“sass”的类型定义文件。 程序包含该文件是因为: 隐式类型库 “sass” 的入口点 其实正常人想的肯定是装上 types/sass试试。开始我试过了,没用。删了依赖重装也没用。后面在issue中找到答案了 解决…...
CS1988|C#无法在异步方法中使用ref,in,out类型的参数的问题
CS1988|C#无法在异步方法中使用ref,in,out类型的参数 🌀|场景: BlazorServer的场景中推荐使用异步方法,使用ref,out,in为参数前缀则报错CS1988 原因如下: ref parameters are not supported in async methods because the method may not h…...
ubuntu开机失败——ACPI Error
开机循环进入GNU GRUB 或者 黑屏 1.acpioff 解决办法 1)先用下面方法进入系统 2)更改grub ref 开机循环进入GNU GRUB 或者 黑屏 有提示ACPI Error错误如图: 解决办法 1)先用下面方法进入系统 在GUN GRUB界面,选择ubun…...
搭建开发环境-操作系统篇(一键搭建开发环境)
概述 所谓工欲善其事必先利其器,搭环境往往是开发过程中卡出很多初学者的拦路虎。 对于很多老鸟来说,很多东西都已经习惯成自然,也就没有刻意和初学者说。但对于很多初学者,却是受益良多。 这个系列,先从操作系统开始…...
人工智能AI绘画接入使用文档
人工智能AI绘画接入使用 一、人工智能AI绘画二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 AI绘画优秀描述例子四、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 五、重要说明六、AI绘画成果展示 一、人工智能AI绘画 AI作画,用户可以在平台上…...
如何使用PyQt进行文件操作
PyQt是一个非常强大的Python GUI库,它可以帮助我们创建漂亮的跨平台应用程序。不过,在你开始使用PyQt进行文件操作之前,我想提醒你,这并不是在操作文件系统,而是在操作文件和文件夹。 首先,我们要导入PyQt…...
阿里云CDN加速器基本概念与购买开通
文章目录 1.CDN加速器的基本概念1.1.CDN加速器基本介绍1.2.网站引入CDN加速器的架构图1.3.CDN加速器的工作原理1.4.引入CDN后域名解析变成了CNAME? 2.开通阿里云CDN加速服务 1.CDN加速器的基本概念 CDN加速器官方文档:https://help.aliyun.com/product/…...
2023河南萌新联赛第(六)场:河南理工大学-F 爱睡大觉的小C
2023河南萌新联赛第(六)场:河南理工大学-F 爱睡大觉的小C https://ac.nowcoder.com/acm/contest/63602/F 文章目录 2023河南萌新联赛第(六)场:河南理工大学-F 爱睡大觉的小C题意解题思路 题意 新学期的概…...
[C++ 网络协议编程] 域名及网络地址
1. DNS服务器 DNS(Domain Name System):是对IP地址和域名(如:www.baidu.com等)进行相互转换的系统,其核心是DNS服务器。 我们输入的www.baidu.com是域名,是一种虚拟地址,而非实际地…...
Java【HTTP】什么是 Cookie 和 Session? 如何理解这两种机制的区别和作用?
文章目录 前言一、Cookie1, 什么是 Cookie2, Cookie 从哪里来3, Cookie 到哪里去4, Cookie 有什么用 二、Session1, 什么是 Session2, 理解 Session 三、Cookie 和 Session 的区别总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: 📕 …...
使用U盘重装Windows10系统详细步骤及配图【官方纯净版】
文章目录 1.制作启动盘1.1准备U盘及一台电脑1.2下载win10安装包 2.安装操作系统2.1插入系统安装盘2.2设置启动盘为第一启动项2.3开始安装操作系统 3.安装成功后进入图形界面3.1启动问题3.2驱动问题3.3调出"控制面板"3.4给磁盘分区 4.win10激活 前天下午不知道怎么想的…...
Arm Neoverse CMN-650架构与编程实践详解
1. CMN-650架构概述Arm Neoverse CMN-650是一种基于Mesh拓扑的一致性互连网络,专为多核处理器和加速器系统设计。作为SoC内部的数据高速公路,它通过优化的路由算法和一致性协议,实现了高带宽、低延迟的核间通信。1.1 核心组件解析CMN-650由多…...
Figma中文汉化插件完整指南:3分钟让Figma界面说中文的终极方案
Figma中文汉化插件完整指南:3分钟让Figma界面说中文的终极方案 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的英文界面而烦恼吗?对于中文设计师来…...
告别虚拟机卡顿:在 Windows WSL2 的 Kali 子系统中配置 Pwn 调试环境
告别虚拟机卡顿:在 Windows WSL2 的 Kali 子系统中配置 Pwn 调试环境 对于安全研究人员和 CTF 爱好者来说,Kali Linux 是必不可少的工具集。然而,传统的虚拟机方案常常面临性能瓶颈——内存占用高、启动速度慢、与主机系统交互不便。WSL2 的出…...
NVIDIA Profile Inspector终极指南:解锁700+显卡隐藏设置,提升游戏性能30%
NVIDIA Profile Inspector终极指南:解锁700显卡隐藏设置,提升游戏性能30% 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector是一款强大的开源显卡配置工具…...
PP 蜂窝板生产线智能控制系统架构与 PLC 程序设计思路
PP 蜂窝板生产线智能控制系统架构与 PLC 程序设计思路摘要:针对 PP 蜂窝板产线多段速度同步、温度压力闭环、真空度稳定与定长裁切精度要求,本文介绍基于 PLCHMI 的智能控制系统整体架构,分模块阐述挤出温控、真空定型、牵引同步、在线测厚与…...
3分钟掌握B站视频下载神器BilibiliDown:跨平台免费开源下载工具
3分钟掌握B站视频下载神器BilibiliDown:跨平台免费开源下载工具 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_…...
STM32H743 FDCAN实战:手把手教你调试CAN节点错误计数器与Bus_Off状态
STM32H743 FDCAN实战:从寄存器到代码的Bus_Off恢复指南 当你的STM32H743项目突然出现CAN通信中断,调试器里FDCAN_PSR寄存器的BOFF位亮起红灯时,真正的挑战才刚刚开始。这不是普通的通信故障,而是触发了CAN协议中最严厉的惩罚机制—…...
STM32L4实战:用RTC唤醒定时器实现33秒超长待机,实测功耗从52mA降到2.2mA
STM32L4超低功耗实战:从52mA到2.2mA的RTC唤醒优化全解析 当一块STM32L4开发板的功耗从52mA骤降到2.2mA,这不仅仅是数字的变化——它意味着智能穿戴设备的续航从1天延长到3周,工业传感器节点可以摆脱电源线的束缚,便携医疗设备的安…...
如何高效管理命令历史:yargs readline功能的终极指南
如何高效管理命令历史:yargs readline功能的终极指南 【免费下载链接】yargs yargs the modern, pirate-themed successor to optimist. 项目地址: https://gitcode.com/gh_mirrors/ya/yargs 在现代命令行工具开发中,提供流畅的用户交互体验至关…...
如何用免费开源工具彻底解决Dell G15散热问题:3步终极控制方案
如何用免费开源工具彻底解决Dell G15散热问题:3步终极控制方案 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 你是否正在为Dell G15游戏本的散热问…...
