Android 源码添加无线调试 ADB 功能

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: Android 源码添加无线调试 ADB 功能

前言


由于跟源码打交道比较频繁,加之 RK 和 MTK 平台的源码都有接触,发现 RK 的系统能通过局域网无线调试 ADB

MTK 的一直没在意,今天有空尝试了发现不行一直提示 cannot connect to xxxxx:5555: 由于目标计算机积极拒绝,无法连接

在网上得到的答案大多都是 adb 调试桥挂了需重启之类的,然鹅试了没什么用,也有说需要 root 权限的。

其实我的实际情况是设备从源头上就没打开这个功能,在此记录一下修改过程。


进入正题


先来效果图

VRq0hj.png


VRqdAg.png


要启用无线调试 ADB 功能其实很简单,只需在 system.prop 中增加配置 service.adb.tcp.port = 5555 即可


adb 早期版本只能通过 USB 来对设备调试,从 adb v1.0.25开始,增加了对通过 tcp/ip 调试 Android 设备的功能,


所以只需我们增加端口支持就行,所以一般大多提示目标计算机积极拒绝,无法连接的情况,也有可能是系统本身没有启用


这个功能。


system.prop 文件位置一般在 device\公司名字\项目名字 路径下


项目名字 看你的out/target/product/文件夹名称


为了更方便的控制无线调试的开关,你还可以做接下来的操作


在 Settings 中的开发者选项页面增加一个 SwitchPreference 用于控制无线调试的开关


1.在资源文件中添加 string 描述

  //中文
  <string name="enable_wiress_adb" >"无线调试"</string>
  <string name="enable_wiress_adb_summary" >"连接IP后启用调试模式"</string>
  //英文
  <string name="enable_wiress_adb" >"Wiress Debuging"</string>
  <string name="enable_wiress_adb_summary" >"Debug mode when IP is connected"</string>

2.添加 SwitchPreference 开关


packages/apps/Settings/res/xml/development_prefs.xml

packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java

<PreferenceCategory android:key="debug_debugging_category"
    android:title="@string/debug_debugging_category">
    <SwitchPreference
        android:key="enable_adb"
        android:title="@string/enable_adb"
        android:summary="@string/enable_adb_summary"/>
  //add
    <SwitchPreference
        android:key="enable_wiress_adb"
        android:title="@string/enable_wiress_adb"
        android:summary="@string/enable_wiress_adb_summary"/>
  ....
</PreferenceCategory>
private void updateAllOptions() {
    final Context context = getActivity();
    final ContentResolver cr = context.getContentResolver();
    mHaveDebugSettings = false;
    /// M: CR ALPS00244115. Lock and unlock screen, the "USB debugging" is unchecked.
    boolean isChecked = (mAdbDialog != null && mAdbDialog.isShowing()) ? true :
                (Settings.Global.getInt(cr, Settings.Global.ADB_ENABLED, 0) != 0);
    updateSwitchPreference(mEnableAdb, isChecked);
    //add
    String adbWiress = SystemProperties.get("sys.connect.adb.wiress");
    updateSwitchPreference(mEnableWiressAdb, "1".equals(adbWiress));
  .....
  } 
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
    if (Utils.isMonkeyRunning()) {
        return false;
    }
    if (preference == mEnableAdb) {
        if (mEnableAdb.isChecked()) {
            mDialogClicked = false;
            if (mAdbDialog != null) dismissDialogs();
            mAdbDialog = new AlertDialog.Builder(getActivity()).setMessage(
                    getActivity().getResources().getString(R.string.adb_warning_message))
                    .setTitle(R.string.adb_warning_title)
                    .setPositiveButton(android.R.string.yes, this)
                    .setNegativeButton(android.R.string.no, this)
                    .show();
            mAdbDialog.setOnDismissListener(this);
        } else {
            Settings.Global.putInt(getActivity().getContentResolver(),
                    Settings.Global.ADB_ENABLED, 0);
            mVerifyAppsOverUsb.setEnabled(false);
            mVerifyAppsOverUsb.setChecked(false);
            /// M: ALPS01256802, The "Developer options" status is opened.
            onPreferenceTreeClick(null, mVerifyAppsOverUsb);
            updateBugreportOptions();
        }
  //add
    }else if (preference == mEnableWiressAdb) {
        if (mEnableWiressAdb.isChecked()) {
            Settings.Global.putInt(getActivity().getContentResolver(),
                    Settings.Global.ADB_ENABLED, 1);
            SystemProperties.set("sys.connect.adb.wiress","1");
        }else{
            SystemProperties.set("sys.connect.adb.wiress","0");
            Settings.Global.putInt(getActivity().getContentResolver(),
                    Settings.Global.ADB_ENABLED, 0);
        }
     //add  
    } 
  ...
}

3.在 init.rc 中添加控制端口(service.adb.tcp.port)的代码

system\core\rootdir\init.rc

on property:sys.connect.adb.wiress=1
   setprop service.adb.tcp.port 5555
   stop adbd
   start adbd
on property:sys.connect.adb.wiress=0
   setprop service.adb.tcp.port 0
   stop adbd
   start adbd


当 SwitchPreference 打开,则设置端口为 5555, 允许无线调试


当 SwitchPreference 关闭,则设置端口为 0, 禁止无线调试


4.去除允许USB调试弹框,默认授权


frameworks\base\packages\SystemUI\src\com\android\systemui\usb\UsbDebuggingActivity.java

@Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
    ......
    //屏蔽弹出授权框
    //setupAlert();
    //默认授权,始终允许
        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);
        }
    //关闭授权框,不然 会显示一个系统界面的半截对话框
        finish();
}


这样就大功告成了,尽情的享受无线调试的便利吧。

参考

Android init.rc文件详解

adb通过TCP/IP来调试Android设备

Android下USB框架

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
27天前
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
75 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
6月前
|
Shell Linux 开发工具
"开发者的救星:揭秘如何用adb神器征服Android设备,开启高效调试之旅!"
【8月更文挑战第20天】Android Debug Bridge (adb) 是 Android 开发者必备工具,用于实现计算机与 Android 设备间通讯,执行调试及命令操作。adb 提供了丰富的命令行接口,覆盖从基础设备管理到复杂系统操作的需求。本文详细介绍 adb 的安装配置流程,并列举实用命令示例,包括设备连接管理、应用安装调试、文件系统访问等基础功能,以及端口转发、日志查看等高级技巧。此外,还提供了常见问题的故障排除指南,帮助开发者快速解决问题。掌握 adb 将极大提升 Android 开发效率,助力项目顺利推进。
156 0
|
3月前
|
前端开发 数据处理 Android开发
Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍
本文深入探讨了Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍,以及具体操作步骤、常见问题解决、高级调试技巧、团队协作中的调试应用和未来发展趋势,旨在帮助开发者提高调试效率,提升应用质量。
89 8
|
6月前
|
Ubuntu Android开发
安卓系统调试与优化:(一)bootchart 的配置和使用
本文介绍了如何在安卓系统中配置和使用bootchart工具来分析系统启动时间,包括安装工具、设备端启用bootchart、PC端解析数据及分析结果的详细步骤。
297 0
安卓系统调试与优化:(一)bootchart 的配置和使用
|
8月前
|
安全 API Android开发
Android打开USB调试命令
【6月更文挑战第20天】
265 1
|
8月前
|
Shell 开发工具 Android开发
|
9月前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
703 1
|
9月前
|
Android开发 Python
Python封装ADB获取Android设备wifi地址的方法
Python封装ADB获取Android设备wifi地址的方法
201 0
|
开发工具 Android开发
Mac 安卓(Android) 配置adb路径
Mac 安卓(Android) 配置adb路径
972 0
|
9月前
|
Shell Android开发
ADB更改Android设备屏幕显示方向
ADB更改Android设备屏幕显示方向
430 5

热门文章

最新文章

  • 1
    如何修复 Android 和 Windows 不支持视频编解码器的问题?
  • 2
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 3
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
  • 4
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 5
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 6
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 7
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
  • 8
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 9
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 10
    向量数据库 milvus 快速入门