一、问题处理思路
1、定位SELinux权限问题
当遇到问题时,想判断是不是 SELinux 权限导致的,在 userdebug 或 eng 版本,通过 adb 命令让 selinux 处于宽容模式,命令如下:
adb root
adb remount
adb shell setenforce 1
然后再通过 adb logcat 或 logger manager 抓取 Log,最好先执行下清空 Log 的操作(adb logcat -c), 便于排查问题再看问题是否还存在。如果问题不存在,可以确认是 SELinux 权限不足导致。(注意,特殊情况下可能还需要验证重启过程,上面命令重启失效,这个时候可以考虑修改 init 的代码来设置关闭模式)
2、抓取SELinux问题日志
SELinux 在 permissive 模式下运行时,会检查当前运行的应用是否存在错误,错误会以事件日志的形式传给 dmesg 和 logcat,并可在设备上从本地查看。SELinux 日志消息中包含 avc: 字样,因此可使用 grep 轻松找到。
adb shell dmesg |grep avc > dmesg.log
adb log