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

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

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

文章目录

  • Android EDLA 打开5G热点失败分析解决2
    • 一、前言
    • 二、分析解决
      • 1、日志分析
      • 2、源码分析
      • 3、修改解决
        • (1)源码搜索修改
        • (2)创建res overlay应用
          • ①Android.bp
          • ②AndroidManifest.xml
          • ③config.xml
          • ④编译添加的模块名称
        • 4、查看当前运行环境中是否存在添加的overlay应用
    • 三、其他
      • 1、小结
      • 2、确认Wifi应用是不是mainline包里面的
      • 3、自定义或者普通应用的res属性可以被overlay覆盖吗?

一、前言

在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

<bool translatable="false" name ="config_wifi24ghzSupport">true</bool>//5G wifi,源码这里默认false
<bool translatable="false" name ="config_wifi5ghzSupport">false</bool><!-- Wifi driver supports 5GHz band for softap when chip support 5GHz -->
//5G 热点
<bool translatable="false" name="config_wifiSoftap5ghzSupported">true</bool>

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

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="XXX.overlay" //这个包名的名称可以随便写android:versionCode="1"android:versionName="1.0"><application android:hasCode="false" /><overlayandroid:targetPackage="com.google.android.wifi.resources"android:targetName="WifiCustomization"android:priority="0"android:isStatic="true" />
</manifest>

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

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

    <bool translatable="false" name ="config_wifi5ghzSupport">true</bool><bool translatable="false" name ="config_wifiSoftap5ghzSupported">true</bool>

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

(2)创建res overlay应用

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

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

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

②AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.google.wifi.resources.config.overlay" //这个命名是随意的android:versionCode="1"android:versionName="1.0"><application android:hasCode="false" /><overlayandroid:targetPackage="com.google.android.wifi.resources" //这个覆盖的必须正确android:targetName="WifiCustomization"android:priority="0"android:isStatic="true" />
</manifest>
③config.xml
    <bool translatable="false" name ="config_wifi5ghzSupport">true</bool><bool translatable="false" name ="config_wifiSoftap5ghzSupported">true</bool>    //下面的是5G热点信道值范围,一般是下面的范围。也可以根据实际定制<!-- List of allowed channels in 5GHz band for softap. --><string  translatable="false" name="config_wifiSoftap5gChannelList">36-48,149-161,165</string>

上面的目录结构需要符合普通的源码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: 1Packages: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.apk runtime 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.dtcms.com/a/553891.html

相关文章:

  • 长沙网站seo收费网站怎么做图片动态图片不显示不出来的
  • (107页PPT)园区智能楼宇BIM云平台方案(附下载方式)
  • 昆山苏州网站建设网站怎么修改好之后再上线
  • 【搭建】个人博客网站的搭建
  • Rust开发之Trait作为参数与返回值使用
  • 深入解析linux 的 rsyncd服务
  • 长沙做旅游网站多少钱建设厅网站用户名和密码
  • 设计网站推广公司网页制作怎样做安居客网站
  • Python快速入门专业版(五十五):Requests库入门:HTTP请求实战与Header伪装(避坑403反爬)
  • 软件设计师重点笔记-4
  • rabbitmq-k8s下双架构镜像+手动sts部署完全文档(上)
  • 如何使用 C# 将 CSV 数据轻松转换为 PDF
  • 【每天一个知识点】数据湖(Data Lake)与数据仓库(Data Warehouse)
  • 深入理解外边距重叠与 BFC —— 为什么粉色背景多出一块?
  • 网站开发学什么数据库网站建设美工百度百科
  • 怎样制作网站站点免费的网站认证
  • 使用cvx工具箱求解svm的原问题及其对偶问题
  • 国内免费无版权视频素材网站泉州做网站设计公司
  • CVPR-2025 | 端到端导航智能体的推理能力探究:动态系统学习、规划能力与记忆使用
  • 百度网盘下载怎么免费提速?2025最新教程分享
  • 一个交易网站开发的成本是多少钱上海市中学生典型事例网站
  • 网站 验证码错误本地南京网站建设
  • 如何通过右键实现音视频/PDF/Office 一键格式转换?
  • 深入理解 Python 的 __init_subclass__ 方法:自定义类行为的新方式 (Effective Python 第48条)
  • 用遗传算法求解“旅行商问题(TSP)”
  • 蜜桃汇免费的wordpress账号网站文章来源seo
  • 嘉立创EDA四层板PCB学习记录(44小点)
  • 使用yolov8训练自己的数据集
  • 中高端社交网站建设服务商织梦个人网站模板
  • 走进Linux的世界:冯诺依曼体系结构