当前位置: 首页 > news >正文

展锐平台(Android15)WLAN热点名称修改不生效问题分析

前言

在展锐Android V项目开发中,需要修改softAp/P2P热点名称时,发现集成GMS后直接修改framework层代码无效。具体表现为:

  • 修改packages/modules/Wifi/WifiApConfigStore中的getDefaultApConfiguration方法
  • 编译烧录后修改不生效

问题根源在于:Wi-Fi模块在Android S(12)及以上版本已纳入Mainline模块

Mainline模块机制解析

什么是Mainline?

Google将部分核心模块独立开发维护,这些模块会随系统更新单独升级,不再依赖AOSP版本迭代。这导致:

  • 修改本地代码会被系统预置模块覆盖
  • 整编时无法打包修改后的模块

受影响模块列表

参考Google官方文档:模块化系统架构

Wi-Fi模块自Android 11开始Mainline化

问题分析

修改失效原因

  1. 代码覆盖:Mainline模块优先级高于本地修改
  2. 编译机制:GMS版本会强制使用预置模块
  3. 认证限制:关闭Mainline会影响GTS测试

解决方案矩阵

方案适用场景限制条件
Overlay机制修改配置参数需展锐平台支持
运行时设置动态修改热点名需处理冲突逻辑
关闭Mainline仅限国内版本影响GMS认证

具体解决方案

方案1:使用Overlay机制(推荐)

展锐平台已提供Overlay配置入口:
vendor/sprd/platform/frameworks/opt/net/wifi/service/ServiceUniWifiResources/res/values/config.xml

<string name="config_wifi_softap_ssid">custom</string>
<string name="config_wifi_p2p_device_name">MyP2PName</string>

方案2:运行时动态设置

通过系统广播监听实现首次启动配置:

// 监听BOOT_COMPLETED广播
public class HotspotInitializer extends BroadcastReceiver {private static final String PREF_HOTSPOT_SET = "hotspot_initialized";@Overridepublic void onReceive(Context context, Intent intent) {if (isAlreadyConfigured(context)) return;WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);SoftApConfiguration config = wifiManager.getSoftApConfiguration();String newSsid = SystemProperties.get("ro.product.model") + "_HOTSPOT";wifiManager.setSoftApConfiguration(new SoftApConfiguration.Builder(config).setSsid(newSsid).build());markAsConfigured(context);}private boolean isAlreadyConfigured(Context ctx) {return PreferenceManager.getDefaultSharedPreferences(ctx).getBoolean(PREF_HOTSPOT_SET, false);}
}

关键点:

  1. 使用SharedPreferences记录配置状态
  2. 通过系统属性获取设备型号作为SSID基础
  3. 需在AndroidManifest.xml中注册广播接收器

方案3:关闭Mainline模块(仅限国内版本)

在BoardConfig.mk中添加:

# 关闭Wi-Fi Mainline模块(影响GTS测试)
MAINLINE_INCLUDE_WIFI_MODULE := false

风险提示:

  • 可能导致GMS认证失败
  • 无法接收Wi-Fi模块安全更新
  • 仅建议在非GMS版本或测试环境使用

在这里插入图片描述

总结与建议

  1. 优先方案:使用Overlay机制(方案1),这是最安全合规的方式
  2. 备选方案:运行时设置(方案2),需处理好配置冲突
  3. 最后手段:关闭Mainline(方案3),仅限特定场景使用

对于GMS认证设备,建议采用方案1+方案2组合:

  • 使用Overlay设置默认值
  • 通过运行时机制允许用户自定义
  • 保留系统设置入口作为最终配置渠道

最后

附上Android15上测试可用的修改方法:
vendor/sprd/platform/packages/app/UniWifi/app/res/values/config.xml

     <!-- Carrier default softap ssid via IMEI, like as 1234, name1, name2 --><string-array translatable="false" name="config_uniwifi_softap_default_ssid_via_imei"></string-array><!-- Customer default softap ssid -->
-    <string translatable="false" name="config_uniwifi_softap_default_ssid"></string>
+    <string translatable="false" name="config_uniwifi_softap_default_ssid">custom</string><!-- Preset Carrier Network as Suggestion according to software version --><!-- ro.carrier, ssid, eap type(WifiConfiguration.SECURITY_TYPE#3-5-9),
http://www.lryc.cn/news/617063.html

相关文章:

  • 使用tcp ntrip 协议 接收数据报错 java.net.SocketException: Connection reset
  • IDEA 安装插件的两种方式
  • CVPR医学图像三套创新方案:通用分割+3D高效解码+SSM肿瘤定位(附链接)
  • C++高频知识点(二十)
  • jupyter notebook如何打开其他盘目录
  • 创建降阶模型用于搅拌槽中的涡流预测
  • P3232 [HNOI2013] 游走,solution
  • 后量子密码学的迁移与安全保障:迎接量子时代的挑战
  • 力扣559:N叉树的最大深度
  • Beelzebub靶机攻略
  • 腾讯云EdgeOne KV存储在游戏资源发布中的技术实践与架构解析
  • 机器学习之K-means(K-均值)算法
  • 【数据分析】循环移位岭回归分析:光遗传学冻结行为模式研究
  • 复现论文《多无人机协同任务分配算法设计与实现》
  • 小学数学计算技巧全攻略
  • 7、西门子PLC基础术语:数据单位、存储区域、寻址方式、字节序
  • 生产环境中atop命令使用总结
  • FreeRTOS 任务与中断函数:运行机制、关键区别与使用准则
  • GC如何判断对象可以被回收?
  • 利用容器编排完成haproxy和nginx负载均衡架构实施
  • 【代码随想录day 15】 力扣 222.完全二叉树的节点个数
  • 【Python 小脚本·大用途 · 第 2 篇】
  • Day11 原理篇
  • afsim2.9_使用QtCreator和VSCode编译
  • Excel版经纬度和百分度互转v1.1
  • 第二章、LSTM(Long Short-term Memory:长短时记忆网络)
  • 基于python/django框架的车型识别系统
  • iptables -F 与 iptables -X
  • 基于Django的图书馆管理系统的设计与实现
  • 精准计算Word文档页数的PHP类