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
[2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462]US[{ "chipId":0,"chipCapabilities":0,"availableModes":[{ "id":0,"availableCombinations":[{ "limits":[{ "maxIfaces":1,"types":[0]},{ "maxIfaces":1,"types":[3]}]}]},{ "id":1,"availableCombinations":[{ "limits":[{ "maxIfaces":1,"types":[1]}]}]}]}]
# /data/misc/apexdata/com.android.wifi/WifiConfigStoreSoftAp.xml
"AndroidAP_6906"s3yspgxk7rw9vb6ba:dd:19:c6:a5:b9

三、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     }