You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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'

操作步骤:

  1. 安装系统应用:
adb root
adb remount
adb push /Users/Downloads/example-debug.apk /system/priv-app
  1. 推送权限配置文件:
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>
后续操作
  1. 重新推送修改后的配置文件:
adb root
adb remount
adb push /Users/Downloads/default-permissions-example.xml /etc/permissions/
  1. 恢复出厂设置并重启设备,验证权限是否自动授予:
adb shell settings put secure user_setup_complete 0
adb reboot
  1. 重启后通过以下命令检查权限状态:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 20:42:11