Android EDLA项目 5G热点打开失败分析

Android EDLA项目 5G热点打开失败分析

文章目录

    • 一、前言
    • 二、EDLA 打开5G热点的分析和实现
      • 1、现象
        • (1) 已原生Settings设置打开5G热点(关闭拓展性开关)
        • (2)设置band=2,channel=36 的5G热点信息打开热点,无法打开5G热点
      • 2、代码分析
      • 3、EDLA 中Google apk 的overlay
    • 三、其他
      • 1、EDLA项目因为配置属性导致 5G 热点开启失败分析解决思路
        • (1)查看日志确定问题
        • (2)查看是否有overlay属性
      • 2、Android13 热点默认5G频道配置修改
      • 3、Android13 设置固定热点ip地址192.168.43.1
      • 4、Android11 热点开启流程

一、前言

Android 13 外销国外的产品都要过EDLA认证了!
EDLA认证的项目基本都是默认集成GMS Google mainline 和开启KPI;
所以系统会自带了谷歌的很多apk和apex等数据,会造成系统某些代码修改没有作用。

谷歌自动集成的部分的apk目录:

vendor\partner_modules\XXXPrebuilt

部分mainline apk 和Java代码 的关系:

//Google apk
vendor\partner_modules\TetheringPrebuilt\com.google.android.tethering.apks//Java 代码--Connectivity
package\modules\Connectivity//Google apk
vendor\partner_modules\WiFiPrebuilt\com.google.android.wifi.apks//Java 代码-- Wifi
package\modules\Wifi

虽然部分模块的代码无法修改,但是还是要进行分析验证,
谷歌集成的代码和原生代码是差不多的,主要差别就是res的默认属性可能有差别,
所以系统代码逻辑还有要看的,这样才能更准确的定位问题。

本文介绍一下 EDLA 项目5G热点打开失败的一种情况进行分析,对EDLA项目其他一些系统默认配置修改有参考价值,有兴趣的可以看看。

二、EDLA 打开5G热点的分析和实现

1、现象

(1) 已原生Settings设置打开5G热点(关闭拓展性开关)

通过其他手机扫描,连接测试,发现热点是2.4G 热点!

(2)设置band=2,channel=36 的5G热点信息打开热点,无法打开5G热点

查看关键错误如下:

ApConfigUtil : Can not start softAp with band 5G not supported.

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;}}

所以上面系统是否支持5G 是要判断下面两个res属性:

getResources().getBoolean(R.bool.config_wifi5ghzSupport)
getResources().getBoolean(R.bool.config_wifiSoftap5ghzSupported);

其中一个为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>

但是实际上很多项目都是在device或者vendor 目录下有overlay属性的情况。

可以命令搜查确认一下:

find . -name "*.xml" | xargs grep "config_wifi5ghzSupport"
find . -name "*.xml" | xargs grep "config_wifiSoftap5ghzSupported"

到这里,你以为就完了吗,其实正文还没开始!

如果是普通项目,查找所有可能的overlay 修改一下就OK了;
但是EDLA 项目不同,你要overlay的应用是 Google的应用,并不是源码的应用。

3、EDLA 中Google apk 的overlay

如果是EDLA 项目,应该是有应用被overlay的示例代码的。可以借鉴参考。

如果你不确定是 Google 的哪个apk 对应哪个模块代码,可以直接grep -nr “关键代码” 这样也能找出对应的apk。

比如 wifi modules下的代码关键字和查找命令:

grep -nr "Can not start softAp"

这里仅供参考,如果有比较多的重复的,可以使用其他关键代码。

查找结果:

release/vendor/partner_modules$ grep -nr "Can not start softAp"
匹配到二进制文件 WiFiPrebuilt/com.google.android.wifi.apks
匹配到二进制文件 WiFiPrebuilt/go/com.google.android.go.wifi.apks
release/vendor/partner_modules$ 

所以 package\modules\Wifi 的源码就是对应的 com.google.android.wifi.apks

release\vendor\mediatek\tv\packages\overlay\WifiRROOverlay\AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.android.wifi.resources.rro" //这个包名是无所谓的android:versionCode="1"android:versionName="1.0"><application android:hasCode="false" />//targetPackage包名是关键<overlayandroid:targetPackage="com.android.wifi.resources"android:targetName="WifiCustomization"android:isStatic="true"android:priority="0"/>
</manifest>

上面代码如果 targetPackage 如果不是google 的apk,那样也只替换了原生的而已,
如果要替换Google apk的资源,就要修改一下:

android:targetPackage="com.google.android.wifi.resources"

找到res里面的config 看看 5G属性是否支持,如果没有支持就设置支持:

release\vendor\mediatek\tv\packages\overlay\WifiRROOverlay\res\values\config.xml

<!-- Boolean indicating whether the wifi chipset has 5GHz frequency band support --><bool translatable="false" name="config_wifi5ghzSupport">true</bool>

上面是Android14 上 mtk EDLA 的源码目录,仅供参考。

如果你的方案没有 WifiRROOverlay 文件夹就要自己创建,进行overlay属性覆盖。

其实res voerlay 的代码,就三个文件

1、Android.bp 普通加载apk,只编译res就行
2、AndroidManifest.xml 写明需要覆盖的具体apk包名
3、config.xml 需要覆盖的属性

其中,第一点和第三点都不简单易懂的,
只有第二点要确定overlay 的apk包名,需要研究一下。

比如要覆盖的是:wifi 模块
但是实际要写 com.android.wifi.resources要覆盖的是:热点和Connectivity模块
但是实际要写 com.android.networkstack.tethering

从目录看大概种类就十个,常用的估计就三五个。这里不继续进行分析了。

三、其他

本文分析的主要是针对 EDLA 项目,并且内核驱动正常加载的情况,
如果底层驱动不支持5G,那又是另外的情况了,
这种情况,看wifi关键字,是可以看出大致异常信息的,这里不展开分析。

1、EDLA项目因为配置属性导致 5G 热点开启失败分析解决思路

(1)查看日志确定问题

查看是否存在ApConfigUtil文件打印的如下日志:

Can not start softAp with band 5G not supported

如果不是这种情况,那么另外分析。

(2)查看是否有overlay属性

一种思路是查看是否有overlay wifi apk 的情况,

//查看overlay 原生wifi应用
find . -name "AndroidManifest.xml" | xargs grep "com.android.wifi.resources"//查看overlay 谷歌wifi应用
find . -name "AndroidManifest.xml" | xargs grep "com.google.android.wifi.resources"

如果只是overlay了原生wifi应用,那么谷歌应用是未覆盖的。
要么要需要覆盖的应用修改为谷歌应用,要么重新创建一个应用,覆盖google应用的属性。

还有种思路是查看是否有 overlay wifi res属性的情况。

find . -name "*.xml" | xargs grep "config_wifi5ghzSupport"
find . -name "*.xml" | xargs grep "config_wifiSoftap5ghzSupported"

看看是哪个应该有overlay属性。并查看相关信息,进行适配修改。

2、Android13 热点默认5G频道配置修改

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

3、Android13 设置固定热点ip地址192.168.43.1

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

4、Android11 热点开启流程

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/47562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PlantUML-UML 绘图工具安装、Graphviz安装、本地使用/在线使用、语法、图示案例

文章目录 前言本地安装vscode安装插件下载安装Graphviz配置Graphviz环境变量测试 在线使用演示PlantUML语法总结活动图&#xff08;新语法&#xff09;时序图类图用例图其他图 更多相关内容可查看 前言 本篇提供两种使用方式分别为 在线使用地址1&#xff1a;https://www.pla…

在安卓手机上原生运行docker

前言 之前的文章(香橙派5plus上跑云手机方案一 redroid(带硬件加速))在Ubuntu的docker里运行安卓&#xff0c;这里说下怎么在安卓手机下运行docker&#xff0c;测试也可以跑Ubuntu。 想在手机上运行docker想的不是一天两天了&#xff0c;其实很久之前就有这个想法了&#xff…

Docker网络模式和Cgroup资源限制

目录 1、Docker网络 &#xff08;1&#xff09;Docker网络实现原理 查看容器的输出和日志信息 2、Docker 的网络模式 查看docker列表 &#xff08;1&#xff09;网络模式详解 1&#xff09;host模式 2&#xff09;container模式 3&#xff09;none模式 4&#xff09;br…

SpringCloud教程 | 第十篇: 读取Nacos的配置

1、nacos服务器选用 2、test.yaml这一个DataId配置如下&#xff1a; config:name: aabb222 spring:application:name: testdatasource:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/hmblogs?useUni…

MongoDB教程(十二):MongoDB数据库索引

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、MongoD…

openGauss学习笔记-311 openGauss 数据迁移-MySQL迁移-MySQL语法兼容性评估工具

文章目录 openGauss学习笔记-311 openGauss 数据迁移-MySQL迁移-MySQL语法兼容性评估工具311.1 代码获取311.2 编译插件311.3 运行311.4 举例311.4.1 case 1:311.4.2 case 2:311.4.3 case 3:311.5 结果311.6 原理openGauss学习笔记-311 openGauss 数据迁移-MySQL迁移-MySQL语法…

【鸿蒙OS】【ArkUI】鸿蒙OS UI布局适配终极攻略

鸿蒙OS UI布局适配终极攻略 像素适配大法&#xff0c;此方法也适合Android ArkUI为开发者提供4种像素单位&#xff0c;框架采用vp为基准数据单位。 vp相当于Android里的dp fp相当于Android里的sp 官方是如何定义的呢,如下图 今天我来教大家如何用PX做到ArkUI的终级适配&…

Leetcode 2011. 执行操作后的变量值

问题描述&#xff1a; 存在一种仅支持 4 种操作和 1 个变量 X 的编程语言&#xff1a; X 和 X 使变量 X 的值 加 1--X 和 X-- 使变量 X 的值 减 1 最初&#xff0c;X 的值是 0 给你一个字符串数组 operations &#xff0c;这是由操作组成的一个列表&#xff0c;返回执行所有…

慢SQL分析和优化

慢SQL查询优化是一个多方面的过程&#xff0c;涉及SQL语句本身、数据库表结构、索引设计、硬件性能以及数据库配置等多个层面。下面我将详细介绍慢SQL优化的一般步骤&#xff1a; 捕获慢查询 开启慢查询日志&#xff1a;在MySQL中&#xff0c;可以通过设置slow_query_log和lon…

electron 应用的生命周期

Electron应用的生命周期涵盖了从应用启动到关闭的各个阶段,以及在这些阶段中发生的一系列事件。了解这些生命周期事件对于开发Electron应用至关重要,因为它们允许开发者在应用的不同阶段执行特定的操作,如创建窗口、处理文件打开请求、执行清理工作等。以下是对Electron应用…

C++初学者指南-5.标准库(第一部分)--标准库算法介绍

C初学者指南-5.标准库(第一部分)–标准库算法介绍 文章目录 C初学者指南-5.标准库(第一部分)--标准库算法介绍C的标准算法是&#xff1a;第一个示例组织输入范围自定义可调用参数并行执行(C17)迭代器和范围的类别错误消息命名空间std::ranges中的算法 (C20)算法参数图标相关内容…

Unity Editor 小工具集合(持续更新)

1.LOD批量设置 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor;public class LODModelSet : EditorWindow {public GameObject rootObj;public GameObject lowAndMiddleRootObj;public float highLevel, middleLevel, lo…

C++ 库管理工具 vpkg Conan CMake pip

vcpkg 微软开发的跨平台库管理器&#xff0c;支持 Windows、Linux 和 macOS。vcpkg 提供了大量预编译的库&#xff0c;可以轻松集成到 C 项目中。 vcpkg安装配置visualstudio git clone https://github.com/microsoft/vcpkg.git cd vcpkg && bootstrap-vcpkg.batvcp…

树莓派使用蓝牙设置wifi网络

[外链图片转存中…(img-BteK79oW-1721104143862)] 在树莓派使用过程中,很多人都有遇到过这样的问题,经常由于工作场所变化,在无显示器和鼠标的情况下无法方便快捷对树莓派设置wifi网络。 在物联网场景下,成熟的方案是使用蓝牙为设备设置网络,在本教程中,我想向您展示一…

linux 安装 RocketMQ 4.7

安装介绍 Centos 7RocketMQ 4.7JDK 1.8 (安装JDK参考)RocketMQ的官网地址&#xff1a; http://rocketmq.apache.orgGithub地址是 https://github.com/apach e/rocketmq 安装操作 下载RocketMQ RocketMQ运行版本下载地址&#xff1a; Rocketmq-all-4.7.1-bin-release.zip …

httpx,一个网络请求的 Python 新宠儿

大家好&#xff01;我是爱摸鱼的小鸿&#xff0c;关注我&#xff0c;收看每期的编程干货。 一个简单的库&#xff0c;也许能够开启我们的智慧之门&#xff0c; 一个普通的方法&#xff0c;也许能在危急时刻挽救我们于水深火热&#xff0c; 一个新颖的思维方式&#xff0c;也许能…

echart 图表组件的封装

echart 图表组件的封装 思路: 1、主要的传递参数为 options 2、去监听options的变化,然后更新图表 3、设置宽高 父组件 <template><div class="chart-box"><GChart :options="chartData" /></div> </template> <scrip…

【VRP】基于常春藤算法IVY求解带时间窗的车辆路径问题TWVRP,最短距离附Matlab代码

% VRP - 基于IVY算法的TWVRP最短距离求解 % 数据准备 % 假设有一组客户点的坐标和对应的时间窗信息 % 假设数据已经存储在 coordinates、timeWindows 和 demands 变量中 % 参数设置 numCustomers size(coordinates, 1); % 客户点数量 vehicleCapacity 100; % 车辆容量 numV…

设计模式8大原则

1. 开放封闭 允许对类进行扩展&#xff0c;但禁止更改。 2. 依赖倒置 高层模块&#xff08;稳定的&#xff09;不应该依赖于低层模块&#xff08;变化的&#xff0c;如子类&#xff09;。二者都应该依赖于抽象。抽象不应该依赖于实现&#xff0c;实现应该依赖于抽象。 3. 里…

AI大模型新纪元:哪四大趋势引领未来智能革命?

在人工智能热潮持续居高不下背景下&#xff0c;虽然全球AI大模型企业卷参数的激烈程度有所放缓&#xff0c;但大模型仍不断朝着万亿、十万亿参数发展&#xff0c;并推动多模态持续演进以通向AGI。同时&#xff0c;大模型也在朝向轻量化、高效化、垂直多元化发展&#xff0c;进而…