AOSP 12系统应用默认权限XML无法自动授予运行时权限求助
问题
在Pixel 4a的AOSP 12镜像中,将服务类应用作为系统应用安装后,通过default-permissions-example.xml无法自动授予运行时/危险权限。执行恢复出厂设置并重启后,应用安装成功,但权限未自动授予,日志显示XML解析异常:
2024-07-18 17:36:13.514 1993-2458 SystemConfig system_process I Reading permissions from /product/etc/permissions/default-permissions-example.xml 2024-07-18 17:36:13.518 1993-2458 SystemConfig system_process W Got exception parsing permissions. org.xmlpull.v1.XmlPullParserException: Unexpected start tag in /product/etc/permissions/default-permissions-example.xml: found exceptions, expected 'permissions' or 'config'
操作步骤:
- 安装系统应用:
adb root adb remount adb push /Users/Downloads/example-debug.apk /system/priv-app
- 推送权限配置文件:
adb push /Users/Downloads/default-permissions-example.xml /etc/permissions/ adb push /Users/Downloads/privapp-permissions-example.xml /etc/permissions/
原default-permissions-example.xml内容:
<?xml version="1.0" encoding="utf-8"?> <exceptions> <exception package="com.abc.example"> <permission name="android.permission.ACCESS_NETWORK_STATE" fixed="true"/> <permission name="android.permission.INTERNET" fixed="true"/> <permission name="android.permission.ACCESS_WIFI_STATE" fixed="true"/> <permission name="android.permission.CHANGE_WIFI_STATE" fixed="true"/> <permission name="android.permission.RECEIVE_BOOT_COMPLETED" fixed="true"/> <permission name="android.permission.FOREGROUND_SERVICE" fixed="true"/> <permission name="android.permission.POST_NOTIFICATIONS" fixed="true"/> <permission name="android.permission.FOREGROUND_SERVICE_LOCATION" fixed="true"/> <permission name="android.permission.READ_SMS" fixed="true"/> <permission name="android.permission.PROCESS_OUTGOING_CALLS" fixed="true"/> <permission name="android.permission.READ_EXTERNAL_STORAGE" fixed="true"/> <permission name="android.permission.READ_PHONE_STATE" fixed="true"/> <permission name="android.permission.ACCESS_FINE_LOCATION" fixed="true"/> <permission name="android.permission.ACCESS_BACKGROUND_LOCATION" fixed="true"/> </exception> </exceptions>
原因分析
Android 11及以后版本(包括AOSP 12)对default-permissions系列XML文件的格式做了变更:
- 根标签不再是
<exceptions>,必须使用<permissions>作为根元素 - 权限定义需通过
<default-permission>标签直接配置,不再嵌套在<exception>内
解决方案
修改default-permissions-example.xml的格式为AOSP 12要求的结构:
<?xml version="1.0" encoding="utf-8"?> <permissions> <default-permission package="com.abc.example" permission="android.permission.ACCESS_NETWORK_STATE" fixed="true"/> <default-permission package="com.abc.example" permission="android.permission.INTERNET" fixed="true"/> <default-permission package="com.abc.example" permission="android.permission.ACCESS_WIFI_STATE" fixed="true"/> <default-permission package="com.abc.example" permission="android.permission.CHANGE_WIFI_STATE" fixed="true"/> <default-permission package="com.abc.example" permission="android.permission.RECEIVE_BOOT_COMPLETED" fixed="true"/> <default-permission package="com.abc.example" permission="android.permission.FOREGROUND_SERVICE" fixed="true"/> <default-permission package="com.abc.example" permission="android.permission.POST_NOTIFICATIONS" fixed="true"/> <default-permission package="com.abc.example" permission="android.permission.FOREGROUND_SERVICE_LOCATION" fixed="true"/> <default-permission package="com.abc.example" permission="android.permission.READ_SMS" fixed="true"/> <default-permission package="com.abc.example" permission="android.permission.PROCESS_OUTGOING_CALLS" fixed="true"/> <default-permission package="com.abc.example" permission="android.permission.READ_EXTERNAL_STORAGE" fixed="true"/> <default-permission package="com.abc.example" permission="android.permission.READ_PHONE_STATE" fixed="true"/> <default-permission package="com.abc.example" permission="android.permission.ACCESS_FINE_LOCATION" fixed="true"/> <default-permission package="com.abc.example" permission="android.permission.ACCESS_BACKGROUND_LOCATION" fixed="true"/> </permissions>
后续操作
- 重新推送修改后的配置文件:
adb root adb remount adb push /Users/Downloads/default-permissions-example.xml /etc/permissions/
- 恢复出厂设置并重启设备,验证权限是否自动授予:
adb shell settings put secure user_setup_complete 0 adb reboot
- 重启后通过以下命令检查权限状态:
adb dumpsys package com.abc.example | grep grantedPermissions
额外注意事项
privapp-permissions-example.xml的格式是正确的,无需修改,它用于授予特权应用专属权限(如READ_PRIVILEGED_PHONE_STATE),和default-permissions负责的普通危险/运行时权限是不同的配置维度- 确保配置文件的权限正确,推送后可执行
adb shell chmod 644 /etc/permissions/default-permissions-example.xml设置正确权限 - 部分AOSP 12设备可能需要将权限配置文件推送到
/product/etc/permissions/目录(日志中显示系统读取的是该路径),可根据实际情况调整推送路径
内容的提问来源于stack exchange,提问作者Arpit
相关产品推荐
相关产品推荐

