我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android13 网络 Adb 默认开启

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android13 网络 Adb 默认开启

Android 13 网络 Adb 默认开启

文章目录

一、前言

通过代码分析发现Android13 上对 网络adb 进行了限制!
Android13原生代码要求:必现连接上某个wifi,才能进行adb ,并且切换wifi或者关闭wifi都是会停止adb。

如果要做成Android11 或者之前一样,设备连接WiFi/有线网络后电脑可以直接进行adb连接,就要对系统代码进行适配修改。

关键:1、mk 设置系统属性:persist.adb.tls_server.enable=12、写死端口号 55553、注释若干判断Wifi情况停止adb的代码

之前以为设置端口号和persist.adb.tls_server.enable 属性就ok了,但是还是有些小bug,还是要完全研究一遍具体流程。

二、默认adb 代码实现

1、修改的目录:

packages\modules\adb\daemon\adb_wifi.cppframework\base\services\core\java\com\android\server\adb\AdbDebuggingManager.java//修改前面两个文件就可以实现adb了,后面的文件试辅助分析的。//虽然 SettingsProvider 也有加载 Settings属性 Settings.Global.ADB_WIFI_ENABLED ,//但是 prop那个属性更优先,所以可以不用考虑这里默认情况framework\base\packages\SettingsProvider\class="lazy" data-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.javapublic class AdbDebuggingManager {                case MSG_ADBDWIFI_ENABLE: {                    if (mAdbWifiEnabled) {                        break;                    }                    //not to check network state ,change by  liwenzhi //(1)去除下面一大段判断网络和监听网络的代码                                        //no listener network change for disable adb_wifi,by  liwenzhi                                        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)不需要判断网络                                        Settings.Global.putInt(mContentResolver,Settings.Global.ADB_WIFI_ENABLED, 1);                    //no listener network change for disable adb_wifi,by  liwenzhi //(4)不需要要监听网络变化                                        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=108-16 15:13:50.123   762   762 D SystemServerTiming: StartAdbService08-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 //自己加的日志打印,确认查看服务启动是否打开 adb08-16 15:13:58.993   762   799 D AdbService: setAdbEnabled(true), mIsAdbUsbEnabled=true, mIsAdbWifiEnabled=true, transportType=008-16 15:13:58.994   762   762 D AdbService: lwz onChange shouldEnable = true08-16 15:13:58.995   762   799 D AdbService: setAdbEnabled(true), mIsAdbUsbEnabled=true, mIsAdbWifiEnabled=true, transportType=108-16 15:13:59.015   762   802 D ActivityManagerTiming: OnBootPhase_1000_com.android.server.adb.AdbService$Lifecycle08-16 15:13:59.016   762   802 V ActivityManagerTiming: OnBootPhase_1000_com.android.server.adb.AdbService$Lifecycle took to complete: 1ms08-16 15:13:59.016   762   799 D AdbService: boot completed08-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 555508-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$Lifecycle08-18 16:51:20.104   762   762 D AdbService: systemReady08-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. //这里提示没网络,会执行关闭adb08-18 16:51:26.586   762   762 D AdbService: lwz onChange shouldEnable = false08-18 16:51:27.411   762   762 D AdbService: lwz onChange shouldEnable = false08-18 16:51:27.971   762   798 D AdbService: setAdbEnabled(true), mIsAdbUsbEnabled=true, mIsAdbWifiEnabled=true, transportType=008-18 16:51:27.972   762   798 D AdbService: setAdbEnabled(false), mIsAdbUsbEnabled=true, mIsAdbWifiEnabled=true, transportType=1 //关闭adb08-18 16:51:27.973   510   517 I adbd    : persist.adb.tls_server.enable changed to 0  //到这里 persist.adb.tls_server.enable 属性又变成了 008-18 16:51:27.973   510   517 I adbd    : adb wifi stopped08-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 IAdbManager {        void allowDebugging(boolean alwaysAllow, String publicKey);        void denyDebugging();        void denyWirelessDebugging();        boolean isAdbWifiSupported();}

上面接口估计对开发者没啥用!

适配了去除网络限制上面代码后,就应用而言,使用 Settings.Global.ADB_WIFI_ENABLED 控制和或者当前 网络adb状态最合适的。
虽然使用prop 属性也能生效,但是系统应用Settings判断的是Settings.Global.ADB_WIFI_ENABLED的值是否为1,会出现状态显示不同步的情况。

来源地址:https://blog.csdn.net/wenzhi20102321/article/details/132382549

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android13 网络 Adb 默认开启

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

计算机网络默认网关如何算

这篇文章主要介绍了计算机网络默认网关如何算的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇计算机网络默认网关如何算文章都会有所收获,下面我们一起来看看吧。如何算默认网关 首先要铺垫一些基础知识,整个互联网就是一个
2023-07-01

windows8系统怎么开启802.1x网络认证增强网络安全性

802.1X 身份验证有助于增强 802.11 无线网络和有线以太网网络的安全性,方法是要求提供用于网络访问的证书或智能卡。 此身份验证类型通常用于工作场所连接。操作步骤:1、Metro 界面中,单击“桌面”图标。如
2022-06-04

win7默认网络不可用如何解决

本文小编为大家详细介绍“win7默认网络不可用如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“win7默认网络不可用如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。win7默认网络不可用解决办法:1
2023-07-01

Win10如何开启或关闭内置定位功能默认开启

Win10中自带有定位功能,而且是默认开启的,这是系统收集数据的一个途径,比如地图应用会用到我们的定位。Win10系统http://www.cppcns.com如何关闭Windows定位平台?首先我们打开“控制面板”
2023-06-11

windows默认远程连接端口怎么开启

在Windows操作系统中,默认的远程桌面连接端口是3389。要开启远程连接功能,请按照以下步骤操作:1. 打开控制面板。可以通过在开始菜单中搜索"控制面板",然后点击打开。2. 在控制面板中,选择"系统和安全",然后选择"系统"。3. 在
2023-09-08

如何让电脑开机后默认开启小键盘

这篇文章将为大家详细讲解有关如何让电脑开机后默认开启小键盘,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。方法一 开机后按相应的快捷键进入BIOS设置,在BIOS中把NumLock项设为ON即可,但是
2023-06-13

win10启动时如何默认小键盘打开

这篇“win10启动时如何默认小键盘打开”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“win10启动时如何默认小键盘打开”文
2023-06-27

Win10设置启动IE后默认打开主页以便快速上网

IE依旧是多数网民上网时浏览器js的第一选择,而很多用户也习惯让IE启动后打开主页。虽然默认已经是如此,但如果设置被更改了,如何改回来呢?我们以Win10为例,看看如何设置IE启动后python打开主页。操作方法1.在IE浏览器上点击齿轮按
2023-06-13

电脑如何设置开机默认开启小键盘锁

小编给大家分享一下电脑如何设置开机默认开启小键盘锁,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、按“WIN键+R键”组合快捷键,打开运行窗口,输入“reged
2023-06-28

windows8系统怎么关闭快速启动功能(默认为开启)

Win8增加了快速启动功能,能让计算机尽快的启动进入Windows界面。win8的这种快速启动功能只会在“关机”后再开机时起作用,对于直接选择“重启”不起作用。在默认的情况下,win8的快速启
2022-06-04

win10注册表如何修改开机小键盘默认开启

本篇内容介绍了“win10注册表如何修改开机小键盘默认开启”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!设置方法1、在电脑开机之后,进入桌面
2023-07-01

win7系统设置开机默认开启小键盘不需要自己手动开启

大家都知道在我们的键盘的右侧有一个小键盘,可以让我们输入数字,但是当我们电脑每次开机的时候小键盘是默认关闭的,如果是设置了数字的开机密码的话的就显得很麻烦了,每次开机都要自己手动开启小键盘,这里为大家支个招让win7系统开机默认开启小键盘哦
2023-06-05

JDK默认开启压缩指针问题怎么解决

本篇内容介绍了“JDK默认开启压缩指针问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Sun的HotSpot VM从JDK5开始会
2023-06-17

怎么设置网页打开默认最大化

设置网页打开默认最大化的方法:1、找到浏览器的设置选项;2、打开浏览器的主页设置;3、输入您需要设置的默认网页;4、保存设置并测试;5、设置其他需要的站点。设置默认网页可能是每个用户在浏览器中的一个基本操作,也是每个使用浏览器的人最常见的需
2023-07-10

win7网络服务如何开启

这篇“win7网络服务如何开启”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“win7网络服务如何开启”文章吧。win7网络服
2023-07-01

win7如何开启网络服务

这篇文章主要为大家展示了“win7如何开启网络服务”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“win7如何开启网络服务”这篇文章吧。win7网络服务开启方法/步骤:1.点击win7系统中的开始
2023-06-27

linux怎么开启网络连接

在Linux系统中,开启网络连接有多种方法,下面是其中两种常见的方法:1. 命令行方式:- 打开终端(命令行界面)。- 输入以下命令以启用网络连接:```sudo systemctl start network-manager```- 输入
2023-09-22

Win10 9926预览版如何开启默认的锁定功能

相信大家都还记得前一段时间泄露的Win10预览版9901中曾经出现过新版登录锁屏画面,现android在相信很多人都更新到了Win10预览版9926,下面就讲一下如何开启这一默认的锁定功能 1、regedit打开注册表编辑器。 2、定位注册
2023-06-11

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录