一、概述
最近在看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
# /data/misc/apexdata/com.android.wifi/WifiConfigStoreSoftAp.xml"AndroidAP_6906" s3yspgxk7rw9vb6 ba: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 }