Android 14.0 wifi配置信息存储的位置,wifi配置文件xml的加载流程,以及初次上电没有xml该如何处理

一、概述

最近在看android wifi framework 的源码,发现在最新android版本上,wifi 代码改动很大,网上关于最新的android代码分析较少,因此打算出一系列关于wifi framework的文章。

本篇文章主要讲解,wifi 配置信息存储的位置,以及加载的时机,包括以下几部分:

  • wifi配置信息在android14 上存储的位置。
  • wifi 配置信息xml什么时机加载到内存当中的(从Zygote开始),以及首次上电的情况。
  • 代码分析,弄明白其中的函数调用关系。
  • 简单画了函数之间的调用关系。

二、 wifi配置信息在android14 上存储的位置

android14 版本,wifi的配置信息存在下面的路径:

/data/misc/apexdata/com.android.wifi

其默认有两个xml文件,一个对应是一般的wifi,另一个对应的是ap,内容如下:

# /data/misc/apexdata/com.android.wifi/WifiConfigStore.xml

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<WifiConfigStoreData>
<int name="Version" value="3" />
<WifiCarrierInfoStoreManagerDataStores>
<map name="MergedCarrierNetworkOffloadMap" />
<map name="UnmergedCarrierNetworkOffloadMap" />
<boolean name="AutoJoinFlippedOnOobPseudonymEnabled" value="true" />
</WifiCarrierInfoStoreManagerDataStores>
<NetworkList />
<MacAddressMap>
<map name="MacMapEntry" />
</MacAddressMap>
<Settings>
<map name="Values">
<string name="wifi_available_soft_ap_freqs_mhz">[2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462]</string>
<string name="wifi_last_country_code">US</string>
<string name="wifi_static_chip_info">[{
  &quot;chipId&quot;:0,&quot;chipCapabilities&quot;:0,&quot;availableModes&quot;:[{
  &quot;id&quot;:0,&quot;availableCombinations&quot;:[{
  &quot;limits&quot;:[{
  &quot;maxIfaces&quot;:1,&quot;types&quot;:[0]},{
  &quot;maxIfaces&quot;:1,&quot;types&quot;:[3]}]}]},{
  &quot;id&quot;:1,&quot;availableCombinations&quot;:[{
  &quot;limits&quot;:[{
  &quot;maxIfaces&quot;:1,&quot;types&quot;:[1]}]}]}]}]</string>
</map>
</Settings>
<PasspointConfigData>
<long name="ProviderIndex" value="0" />
</PasspointConfigData>
</WifiConfigStoreData>
# /data/misc/apexdata/com.android.wifi/WifiConfigStoreSoftAp.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<WifiConfigStoreData>
<int name="Version" value="3" />
<SoftAp>
<string name="WifiSsid">&quot;AndroidAP_6906&quot;</string>
<boolean name="HiddenSSID" value="false" />
<int name="SecurityType" value="1" />
<string name="Passphrase">s3yspgxk7rw9vb6</string>
<int name="MaxNumberOfClients" value="0" />
<boolean name="ClientControlByUser" value="false" />
<boolean name="AutoShutdownEnabled" value="true" />
<long name="ShutdownTimeoutMillis" value="-1" />
<BlockedClientList />
<AllowedClientList />
<boolean name="BridgedModeOpportunisticShutdownEnabled" value="true" />
<int name="MacRandomizationSetting" value="2" />
<BandChannelMap>
<BandChannel>
<int name="Band" value="1" />
<int name="Channel" value="0" />
</BandChannel>
</BandChannelMap>
<boolean name="80211axEnabled" value="true" />
<boolean name="UserConfiguration" value="false" />
<long name="BridgedModeOpportunisticShutdownTimeoutMillis" value="-1" />
<VendorElements />
<boolean name="80211beEnabled" value="true" />
<string name="PersistentRandomizedMacAddress">ba:dd:19:c6:a5:b9</string>
</SoftAp>
</WifiConfigStoreData>

三、wifi 配置信息xml什么时机加载到内存当中的

WifiConfigStoreSoftAp.xml和WifiConfigStore.xml是在系统上电时加载的。

系统启动后,SystemServer 会调用WifiServiceImpl.java类中的checkAndStartWifi函数,checkAndStartWifi 函数会判断本次系统启动,是否需要开启wifi功能,后续会分析wifi开启流程,先留个位置~

四、代码分析

系统启动后,就会判断是否需要自动开启wifi,因此wifi的配置信息读取工作也是在系统启动后就进行的。
接下来,我们分析这部分代码。这部分分两大类:

  • Zygote是如何启动SystemServer进程的,当然,这部分只是简单描述一下,后续会出一篇专门的篇张进行讲解。
  • 如何读取xml文件,以及初次上电无法获取xml时又该如何应对。

1、Zygote是如何启动SystemServer进程的

init进程启动后,就会启动Zygote进程。下面分析Zygote如何启动SystemServer进程的。从Zygote的main函数说起,代码分析如下:

//这里只保留关键函数
//frameworks/base/core/java/com/android/internal/os/ZygoteInit.java

864     public static void main(String[] argv) {
                                                                         
   ...
   	//注意看,这里fork一个systemServer进程
955            Runnable r = forkSystemServer(abiList, zygoteSocketName, zygoteServer);                   
   ...                                                                                                                       
984     }                                                         
  • 38
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值