Android init语言调试:hostapd.android.rc自定义规则不生效如何排查
调试方案
1 验证property触发事件是否生效
- 开启init进程调试日志:执行
setprop init.debug 1,重启设备后过滤logcat或dmesg的init关键词,可查看所有已触发的init规则匹配记录,确认是否匹配到init.svc.hostapd=running对应的规则块。 - 新增属性标记验证:在你编写的
on property:init.svc.hostapd=running规则块最开头添加属性写入语句:
热点开启后执行setprop debug.hostapd.rc_triggered 1getprop debug.hostapd.rc_triggered,若返回值为1则事件触发正常,若为空或0则规则未被触发,问题出在事件匹配环节。
2 捕获exec命令执行日志
init默认不会将exec命令的输出打印到系统日志,可通过重定向输出到本地文件查看执行结果,将规则修改为如下内容:
on property:init.svc.hostapd=running # 先写触发标记到日志 exec - -- /system/bin/sh -c "echo rc rule triggered at $(date) > /data/local/tmp/hostapd_rc.log 2>&1" exec - -- /system/bin/sleep 2 # 执行ip命令并记录输出和错误 exec - -- /system/bin/sh -c "/system/bin/ip address add 192.168.43.1/24 dev wlan0 >> /data/local/tmp/hostapd_rc.log 2>&1" # 记录执行后的网卡状态 exec - -- /system/bin/sh -c "ip addr show wlan0 >> /data/local/tmp/hostapd_rc.log 2>&1"
操作前先执行chmod 777 /data/local/tmp确保目录可写,热点开启后查看/data/local/tmp/hostapd_rc.log即可获取命令执行的所有输出、报错信息。
3 常见问题补充排查
如果确认事件触发正常但命令执行失败,可优先检查两个点:
- 权限问题:exec命令默认执行身份可能缺少网卡操作权限,可显式指定执行用户组:将exec语句改为
exec u:r:shell:s0 root root -- /system/bin/ip xxx确保拥有NET_ADMIN权限。 - 等待时长不足:2秒可能不足以完成wlan0接口初始化,可将sleep时长调整为3秒再测试。
内容的提问来源于stack exchange,提问作者Jerónimo Agulló
相关产品推荐
相关产品推荐

