You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

编译AOSP时预配置WiFi SSID和密码实现自动连接的方法

当然可以实现!作为经常折腾AOSP的开发者,我来给你分享几种靠谱的方案,都是实际项目中用过的,能让你烧录ROM后直接自动连上WiFi,省掉手动输入的麻烦:

方法1:通过wpa_supplicant.conf预配置(最通用)

Android底层靠wpa_supplicant管理WiFi连接,我们直接把WiFi信息打包到系统的配置文件里,系统启动后会自动加载。

步骤如下:

  1. 找到你的设备配置目录:device/<你的厂商>/<设备型号>/(如果没有就自己创建这个目录)
  2. 新建wifi文件夹,里面创建wpa_supplicant.conf,内容按下面的格式写:
ctrl_interface=/data/misc/wifi/sockets
update_config=1
country=CN  # 换成你所在地区的国家代码

network={
    ssid="你的WiFi名称"  # 注意引号要保留
    psk="你的WiFi密码"
    key_mgmt=WPA-PSK  # 加密方式,WPA2-PSK也用这个;开放网络直接删掉这行和psk
    priority=1  # 优先级,数字越大越优先连接
}
  1. 在设备的device.mk里添加编译规则,把这个配置文件拷贝到系统路径:
PRODUCT_COPY_FILES += \
    device/<你的厂商>/<设备型号>/wifi/wpa_supplicant.conf:system/etc/wifi/wpa_supplicant.conf
  1. 搞定权限:因为系统对文件权限要求严格,得给配置文件设置正确的权限。创建set_wifi_permissions.sh脚本放在设备目录:
chmod 644 /system/etc/wifi/wpa_supplicant.conf
chown system:wifi /system/etc/wifi/wpa_supplicant.conf

然后在device.mk里加:

PRODUCT_COPY_FILES += \
    device/<你的厂商>/<设备型号>/set_wifi_permissions.sh:system/bin/set_wifi_permissions.sh

# 添加开机执行的rc文件
PRODUCT_COPY_FILES += \
    device/<你的厂商>/<设备型号>/init.wifi.rc:system/etc/init/init.wifi.rc

init.wifi.rc的内容:

on boot
    exec system system -- /system/bin/sh /system/bin/set_wifi_permissions.sh

这样开机后会自动给配置文件设置权限,wpa_supplicant启动时就会加载它,自动连接WiFi。

方法2:通过Settings默认配置(Android 8.0+适用)

从Android O开始,可以通过系统Settings的默认值来预配置,这种方式更贴近原生系统的设置逻辑。

步骤:

  1. 在设备目录下创建overlay文件夹,路径是device/<你的厂商>/<设备型号>/overlay
  2. 新建frameworks/base/packages/SettingsProvider/res/values/defaults.xml文件,添加WiFi默认配置:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="def_wifi_on">true</bool> <!-- 默认开启WiFi -->
    <string name="def_wifi_ssid">"你的WiFi名称"</string>
    <string name="def_wifi_psk">"你的WiFi密码"</string>
    <string name="def_wifi_key_mgmt">"WPA-PSK"</string>
</resources>
  1. device.mk里引用这个overlay:
PRODUCT_PACKAGE_OVERLAYS += device/<你的厂商>/<设备型号>/overlay

⚠️ 注意:有些原生AOSP的SettingsProvider可能不会自动读取这些值,这时候你需要修改frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java里的loadSystemSettings方法,添加逻辑把这些默认值插入到WiFi的配置数据库中。

方法3:通过开机脚本自动添加WiFi(灵活易调试)

如果不想改太多系统文件,用开机执行shell命令的方式也很方便,适合快速测试。

步骤:

  1. 创建add_wifi.sh脚本放在设备目录:
#!/system/bin/sh

# 等WiFi服务启动,避免执行太早失败
sleep 10

# 添加并启用WiFi网络
wpa_cli -i wlan0 add_network
wpa_cli -i wlan0 set_network 0 ssid '"你的WiFi名称"'
wpa_cli -i wlan0 set_network 0 psk '"你的WiFi密码"'
wpa_cli -i wlan0 set_network 0 key_mgmt WPA-PSK
wpa_cli -i wlan0 enable_network 0
wpa_cli -i wlan0 save_config
  1. device.mk里把脚本拷贝到系统:
PRODUCT_COPY_FILES += \
    device/<你的厂商>/<设备型号>/add_wifi.sh:system/bin/add_wifi.sh
  1. 添加开机启动的rc文件init.addwifi.rc
on boot
    exec system system -- /system/bin/sh /system/bin/add_wifi.sh

然后在device.mk里加:

PRODUCT_COPY_FILES += \
    device/<你的厂商>/<设备型号>/init.addwifi.rc:system/etc/init/init.addwifi.rc

⚠️ 注意:wlan0是WiFi接口名称,不同设备可能不一样,比如有些平板是wlan1,你可以先烧个原生ROM,用ip link命令查看实际接口名。

几个关键注意事项
  • 加密方式要匹配:如果是开放WiFi,就删掉key_mgmtpsk;如果是企业级WPA2,需要配置eapidentity等额外参数。
  • 版本兼容性:不同Android版本的系统路径、权限规则有差异,比如Android 10+对系统分区写权限限制更严,要确保路径正确。
  • 测试排查:烧录后如果没自动连接,用logcat | grep wpa_supplicant看日志,一般能找到是配置文件权限不对还是加密方式不匹配的问题。

内容的提问来源于stack exchange,提问作者Saleh

火山引擎 最新活动