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

深入解析:Android EDLA 打开5G热点失败分析解决2

Android EDLA 打开5G热点失败分析解决2

一、前言

在Android13 EDLA已经遇到过Android EDLA 打开5G热点失败问题;

解决方法是res的两个5G属性:config_wifiSoftap5ghzSupported、config_wifi5ghzSupport需要设置为true。

之前已经有分析解决:

https://blog.csdn.net/wenzhi20102321/article/details/140531433

之前的源码是mtk方案的,现在开发Android16 AML方案的,也有一样问题。

如果想看源代码分析可以看之前的链接;

本文主要分析不同方案上,实际运行环境和代码中如何解决这个EDLA项目 打开5G热点失败问题。

之前主要的博客主要是进行分析过程,本文内容主要是介绍解决内容和验证过程。

开发Android EDLA的都是有这个问题的,有需要的可以收藏。

二、分析解决

1、日志分析

logcat | grep ApConfigUtil
可以看到:
ApConfigUtil : Can not start softAp with band 5G not supported.

logcat还有打印不支持6G,那个是无所谓的,因为目前Android设备都不支持6G,这个估计是为了后面兼容。

2、源码分析

packages\modules\Wifi\service\java\com\android\server\wifi\util\ApConfigUtil.java

    public static boolean isBandSupported(@BandType int apBand, Context context) {if (!isBandValid(apBand)) {Log.e(TAG, "Invalid SoftAp band " + apBand);return false;}//报错是下面的打印。for (int b : SoftApConfiguration.BAND_TYPES) { //BAND_TYPES: 6G,5G,2.4Gif (containsBand(apBand, b) && !isSoftApBandSupported(context, b)) {Log.e(TAG, "Can not start softAp with band " + bandToString(b)+ " not supported.");return false;}}return true;}//containsBand 方法,band = 2,是true 的,public static boolean containsBand(@BandType int band, @BandType int testBand) {return ((band & testBand) != 0);}//所以关键是 isSoftApBandSupported,如果为false 就是有问题public static boolean isSoftApBandSupported(@NonNull Context context, @BandType int band) {switch (band) {case SoftApConfiguration.BAND_2GHZ:return context.getResources().getBoolean(R.bool.config_wifi24ghzSupport)&& context.getResources().getBoolean(R.bool.config_wifiSoftap24ghzSupported);case SoftApConfiguration.BAND_5GHZ://5G热点的判断,这里有判断两个属性return context.getResources().getBoolean(R.bool.config_wifi5ghzSupport)&& context.getResources().getBoolean(R.bool.config_wifiSoftap5ghzSupported);case SoftApConfiguration.BAND_6GHZ:return context.getResources().getBoolean(R.bool.config_wifi6ghzSupport)&& context.getResources().getBoolean(R.bool.config_wifiSoftap6ghzSupported);default:return false;}}

其中一个为false都会导致无法打开5G热点。

如果没有overlay的情况,这个res 属性的位置在:

package\modules\Wifi\service\ServiceWifiResources\res\values\config.xml

true
//5G wifi,源码这里默认false
false//5G 热点
true

EDLA项目是有mainline包配套的应用会覆盖Wifi应用;

所以会出现修改package\modules\Wifi 的源码是没有作用的,所以修改上面res的属性是没有用的。

3、修改解决

覆盖 Wifi应用的谷歌应用是 com.google.android.wifi.apks

所以需要修改谷歌应用的res,源码是无法修改的,进行res 的overlay覆盖就可以。

Google的mainline包是在vendor目录下的,查看当前的源码方案是否存在overlay wifi.apks 的

(1)源码搜索修改

vendor源码下搜索:

find . -name "AndroidManifest.xml" |xargs grep "com.google.android.wifi.resources"

如果能搜索到应该是下面这样的。

源码下查看:AndroidManifest.xml


上面就是overlay覆盖 com.google.android.wifi.apks 的res属性的应用;

找到这个应用定义的res/values/config.xml文件,写入或者修改这两个属性就行:

    truetrue

如果查找不到就需要自己添加一个res overlay的应用。

(2)创建res overlay应用

其实就添加三个文件,一个编译apk的bp文件,一个定义包名的xml文件,一个定义属性的xml文件:

①Android.bp
runtime_resource_overlay {name: "EdlaWifiConfigOverlay", //编译模块名称product_specific: true,
}

为啥这样写?我也不清楚,参考的其他overlay文件夹的。

②AndroidManifest.xml

③config.xml
    truetrue//下面的是5G热点信道值范围,一般是下面的范围。也可以根据实际定制36-48,149-161,165

上面的目录结构需要符合普通的源码app目录结构:

EdlaWifiConfigOverlay-Android.bp-AndroidMainfest.xml-/res/values/config.xml

如果不符合上面的目录结构需要在bp里面特殊声明,声明目录结构算是最简单的,系统可识别的。

相当于一个普通apk应该,只是没有src代码而已,专门用来覆盖res属性的。

刚开始我是加了上面三个文件,但是编译大包好像没用,发现应用没有编译进去。

我是在 release\vendor\partner_gms\overlay 目录下添加的,这个目录下还有很多其他的overlay。

搜索发现模块名称未进行 PRODUCT_PACKAGES 声明。

④编译添加的模块名称

解决方法是在某个mk里面编译

# GMS RRO packages
PRODUCT_PACKAGES += \GmsConfigOverlayCommon \
+    EdlaWifiConfigOverlay  //添加编译模块名称

编大包就可以了。

4、查看当前运行环境中是否存在添加的overlay应用

系统编译、烧录、运行后运行后查看运行环境是否包含overlay的应用:

通过包名确认:

 dumpsys package | grep XXX.overlaydumpsys package XXX.overlay

正常是有如下信息的:

1|console:/ # dumpsys package com.rockchip.wifi.resources.config.overlay
Domain verification status:
Key Set Manager:[com.rockchip.wifi.resources.config.overlay]Signing KeySets: 1
Packages:Package [com.rockchip.wifi.resources.config.overlay] (5d7821a):appId=10007pkg=Package{82814b com.rockchip.wifi.resources.config.overlay}codePath=/product/overlay/EdlaWifiConfigOverlay.apkresourcePath=/product/overlay/EdlaWifiConfigOverlay.apklegacyNativeLibraryDir=/product/lib64/EdlaWifiConfigOverlayextractNativeLibs=trueprimaryCpuAbi=nullsecondaryCpuAbi=nullcpuAbiOverride=nullversionCode=1 minSdk=36 targetSdk=36...dataDir=/data/user/0/com.rockchip.wifi.resources.config.overlayfirstInstallTime=2025-10-28 21:24:07uninstallReason=0runtime permissions:
Dexopt state:[com.rockchip.wifi.resources.config.overlay]
Compiler stats:[com.rockchip.wifi.resources.config.overlay]

如果没有这个包名的应用就是:

W82B_A:/ # dumpsys package com.rockchip.wifi.resources.config.overlay
Unable to find package: com.rockchip.wifi.resources.config.overlay
W82B_A:/ #

三、其他

1、小结

(1)wifi打不开5G可以查看日志,是否是 ApConfigUtil 打印的不支持5G
(2)如果确定是ApConfigUtil的打印,可以尝试添加支持5G 的wifi和热点的属性
(3)一个res overlay应用只能覆盖一个应用的res属性,主要覆盖说明在AndroidManifest.xml
(4)编译后查看运行环境中是否编译了res overlay的应用
(5)系统底层驱动异常也会导致无法打开5G热点,分析具体报错,这个可以找底层帮忙分析

2、确认Wifi应用是不是mainline包里面的

其实比较简单,通过包名可以判断:

Android 源码wifi模块的包名是:com.android.wifi.resources
mainline包中Google wifi模块的包名是:com.google.android.wifi.resources

AOSP项目也会有客户要求导入GMS和mainline包的,EDLA项目是Google强制需求导入GMS和mainline包;

导入mainline包的应用后,源码的wifi模块是没有作用的。

所以可以判断当前系统重有没有运行 com.google.android.wifi.resources 应用就知道源码的wifi有没有用。

dumpsys package com.google.android.wifi.resources

Packages:Package [com.google.android.wifi.resources] (d3cc940):appId=10138pkg=Package{fb36079 com.google.android.wifi.resources}codePath=/apex/com.android.wifi/priv-app/ServiceWifiResourcesGoogle@360840080
...dataDir=/data/user_de/0/com.google.android.wifi.resourcesfirstInstallTime=1969-12-31 19:00:35uninstallReason=0overlay paths:/data/resource-cache/com.android.systemui-neutral-naMy.frro/data/resource-cache/com.android.systemui-accent-ZAWx.frro/data/resource-cache/com.android.systemui-dynamic-vtoK.frro/product/overlay/EdlaWifiConfigOverlay.apk //这里居然有Overlay属性的应用说明legacy overlay paths:/product/overlay/EdlaWifiConfigOverlay.apkruntime permissions:
...
Dexopt state:[com.google.android.wifi.resources]

如果导入了google 的wifi应用,那么 dumpsys package com.android.wifi.resources 肯定是返回找不到应用的;

如果当前运行环境使用了 google 的wifi应用, packages\modules\Wifi 里面的逻辑就无法适配修改了,

只能overlay修改一些Google wifi应用的config属性,另外Java代码好像没法overlay的。

3、自定义或者普通应用的res属性可以被overlay覆盖吗?

我试了一下是可以的;

测试的是Studio编译的普通app应用,定义res属性,系统源码添加res overlay应用,可以进行res overlay。

无论是string.xml或者config.xml的属性,都是可以进行overlay覆盖的。

重点就是修改一下AndroidManifest.xml的覆盖声明。

我这里的overlay应用是通过源码编译的是生成在product目录下面的;

overlay应用估计是需要系统权限的,如果 普通权限的overlay应用都可以覆盖res属性那不就会乱套了吗!

有兴趣的可以自己测试一下,哈哈。
万一普通应用的overlay应用可以覆盖系统应用的res属性就是google源码的漏洞了。

http://www.jsqmd.com/news/317122/

相关文章:

  • 2025-2026留学移民机构行业分析:市场格局与选择要点
  • 【2025最新】基于SpringBoot+Vue的美食烹饪互动平台管理系统源码+MyBatis+MySQL
  • Java SpringBoot+Vue3+MyBatis 球队训练信息管理系统系统源码|前后端分离+MySQL数据库
  • 【毕业设计】SpringBoot+Vue+MySQL 大学生心理健康管理系统平台源码+数据库+论文+部署文档
  • Java SpringBoot+Vue3+MyBatis 物流管理系统系统源码|前后端分离+MySQL数据库
  • 【2025最新】基于SpringBoot+Vue的web大学生一体化服务平台管理系统源码+MyBatis+MySQL
  • 【毕业设计】SpringBoot+Vue+MySQL 开发精简博客系统平台源码+数据库+论文+部署文档
  • NVIDIA GRID vGPU Driver 19.0 for VMware vSphere 9.0(含客户机驱动)驱动包分享|附部署教程
  • 基于SpringBoot+Vue的实习管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • vSphere.Next 潜在特性揭秘、VUM 自动化方案及 ghettoVCB 邮件功能更新
  • C++面向对象入门:实验一
  • 2026年塑料垃圾桶厂家排名,高性价比品牌揭晓
  • 分析东辉清洁胶带的生产工艺,浙江靠谱清洁胶带推荐
  • 说说东辉清洁胶带基本信息,性价比如何?
  • Stripe MCP
  • 盒理收纳品牌口碑好不好,推荐适合家庭的款式
  • Fetch MCP
  • 盘点电动升降工作台供应商,了解费用及选购要点
  • Blender MCP
  • 2026必备10个降AI率工具,继续教育人必看
  • 2026年值得关注的家用厨下净水器品牌推荐:十大高口碑产品选购指南
  • 2026必备!专科生毕业论文神器TOP8一键生成论文工具测评
  • 2026年负压/造景/观赏/智能鱼缸实力推荐:六如家居鱼缸满足多元场景需求
  • 2026年国内UL变压器排名推荐榜 480V变380V、480V变220V、600V变208V变压器
  • DELL R610服务器如何配置iDRAC带外管理地址
  • 核心口碑领先!北京中医健康咨询哪家好?北京宝福堂全网推荐
  • 2025 北京贷款中介公司权威榜单:河北迅拍入选 5 家实力助贷机构推荐
  • 完整项目:安全通信中的二项分布随机噪声类型的概率分析与统计
  • YOLO26优化:neck优化 | Hyper-YOLO创新点(HyperC2Net+MANet)助力YOLO26,实现二次创新
  • 深入解析:AI+云计算互融共生,2025AI云产业发展大会即将举行