Android 9及以上版本AOSP构建时预配置WiFi SSID与密码方法
Android 9及以上版本不再支持通过修改wpa_supplicant_overlay.conf预置WiFi凭据。从该版本开始Google将WiFi配置的读写权限全部收归系统Wifi服务,wpa_supplicant仅保留底层连接执行能力,所有配置必须经过系统服务校验写入才会生效,直接修改supplicant配置会在服务启动时被覆盖清空。以下是经过量产验证的可行实现方案:
方案1:资源Overlay预置(适配Android9-Android14,官方推荐)
该方案完全遵循AOSP定制规范,不需要修改核心业务逻辑,版本兼容性最好。
- 第一步:在设备专属的overlay目录下创建对应资源路径,模块化AOSP(Android10+)路径为
device/<你的厂商名>/<你的设备codename>/overlay/packages/modules/Wifi/service/res/values/;未做WiFi模块化的Android9版本路径为device/<厂商名>/<设备codename>/overlay/frameworks/opt/net/wifi/service/res/values/。如果不想做独立overlay,直接修改AOSP源码中对应路径下的config.xml也能生效,但后续同步AOSP代码时会被覆盖,不推荐量产使用。 - 第二步:在上述路径下新建(或修改已有)
config.xml文件,写入预置WiFi配置,支持同时配置多个网络,参考配置如下:
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array translatable="false" name="config_defaultWifiNetwork"> <!-- 单个网络对应一个item节点 --> <item> <WifiConfiguration> <!-- SSID必须用双引号包裹,双引号属于配置值的一部分 --> <string name="SSID">"Office_WiFi"</string> <!-- PSK密码同样需要双引号包裹,开放网络不需要该字段 --> <string name="PreSharedKey">"12345678"</string> <!-- 安全类型:开放网络填NONE,WPA2个人填PSK,WPA2/WPA3混合兼容填PSK SAE,企业网填EAP --> <string name="AllowedKeyMgmt">PSK SAE</string> <!-- 连接优先级,数值越大优先级越高 --> <int name="Priority" value="200" /> <boolean name="IsShareable" value="false" /> </WifiConfiguration> </item> </string-array> </resources>
- 第三步:确认设备编译配置文件(一般是对应目录下的
device.mk)中已经加入overlay目录的编译规则,即存在PRODUCT_PACKAGE_OVERLAYS += device/<厂商名>/<设备codename>/overlay配置,全量编译刷入后,设备首次开机会自动加载配置并尝试连接对应网络,用户后续可以手动删除该预置网络。
方案2:首次开机文件注入(适配全版本,适合固定配置场景)
该方案通过init触发规则,在WiFi服务启动前直接写入预置好的配置文件,不需要修改framework资源。
- 第一步:提前从已经连接过目标WiFi的样机中导出
WifiConfigStore.xml配置文件,Android10+的文件路径为/data/misc/apexdata/com.android.wifi/WifiConfigStore.xml,Android9路径为/data/misc/wifi/WifiConfigStore.xml,将导出的文件存放到设备目录device/<厂商名>/<设备codename>/wifi/下。 - 第二步:编写init触发规则,在
post-fs-data阶段检测到首次开机无对应配置文件时,将预置文件复制到目标路径并修正权限,参考规则如下:
on post-fs-data # 创建对应目录并设置权限 mkdir /data/misc/apexdata/com.android.wifi 0770 wifi wifi # 预置配置不存在时才复制,避免覆盖用户后续保存的WiFi配置 copy /system/etc/wifi/WifiConfigStore.xml /data/misc/apexdata/com.android.wifi/WifiConfigStore.xml chown wifi wifi /data/misc/apexdata/com.android.wifi/WifiConfigStore.xml chmod 0660 /data/misc/apexdata/com.android.wifi/WifiConfigStore.xml
- 第三步:在
device.mk中添加配置,将预置的WifiConfigStore.xml和init规则文件分别复制到系统/system/etc/wifi/和/system/etc/init/目录下,全编译即可生效。
注意:Android12及以上版本因为Apex模块加载顺序调整,该方案可能出现配置被服务重置的问题,无特殊需求优先选择方案1。
旧方案失效原因
Android 8及更早版本中,wpa_supplicant进程直接持有WiFi配置的读写权限,系统启动时会直接读取wpa_supplicant目录下的配置文件加载网络,因此修改overlay配置即可生效;Android9开始新增WifiConfigStore作为配置唯一可信来源,所有配置变更必须通过系统Wifi服务的API写入,直接修改底层supplicant文件会被判定为非法篡改,启动时直接重置。
内容的提问来源于stack exchange,提问作者Hemanth Chowdary
相关产品推荐
相关产品推荐

