Android 14 AOSP集成预编译APK:设为设备管理员及预授权权限
针对Android 14预编译APK集成、设备管理员配置及权限预授予的解决方案
1. 预编译APK集成最优方案
针对特权应用(需要设备管理员权限),正确的集成步骤如下,解决你设置LOCAL_PRIVILEGED_MODULE=true后应用不显示的问题:
步骤1:放置APK与编写构建脚本
将预编译APK放入packages/apps/YourApp目录,在该目录下创建Android.mk,内容如下:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := YourAppName # 与APK文件名(不含.apk)一致 LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := $(LOCAL_MODULE).apk LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_PRIVILEGED_MODULE := true # 标记为特权应用 LOCAL_CERTIFICATE := platform # 核心:特权应用必须使用平台签名,若APK已用平台密钥签名则直接用,否则构建时会自动重新签名 LOCAL_DEX_PREOPT := false # 预编译APK无需DEX优化,避免与原有优化冲突 include $(BUILD_PREBUILT)
步骤2:添加到构建产物
在build/target/product/handheld_system.mk或你的设备专属device.mk中,将应用名称加入PRODUCT_PACKAGES:
PRODUCT_PACKAGES += YourAppName
问题排查(之前应用不显示的原因)
- 签名不匹配:特权应用必须用平台签名,未设置
LOCAL_CERTIFICATE := platform会导致安装失败; - DEX优化冲突:预编译APK自带优化后的DEX,开启
LOCAL_DEX_PREOPT会引发构建错误; - 模块名称不一致:
LOCAL_MODULE必须与APK文件名、PRODUCT_PACKAGES中的名称完全一致。
2. 设备管理员与所有者配置
需分两步完成,且仅能在首次开机前通过构建配置设置,无法在开机后修改(除非恢复出厂):
步骤1:配置设备管理员
- 确认应用的设备管理员接收器完整类名(如
com.your.app.DeviceAdminReceiver); - 在
device/<oem>/<device>/etc目录下创建device_admin_policy.xml,定义管理员权限:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <limit-password /> <force-lock /> <wipe-data /> <!-- 添加应用需要的其他设备管理员权限 --> </uses-policies> </device-admin>
- 在设备
device.mk中添加配置:
# 拷贝管理员策略文件 PRODUCT_COPY_FILES += \ device/<oem>/<device>/etc/device_admin_policy.xml:system/etc/device_policies/com.your.app.xml # 设置默认设备管理员 PRODUCT_PRODUCT_PROPERTIES += \ ro.device_admin.component=com.your.app/com.your.app.DeviceAdminReceiver
步骤2:设置设备所有者
在设备device.mk中添加属性配置,设备所有者必须是已配置的设备管理员:
PRODUCT_PRODUCT_PROPERTIES += \ ro.device_owner.component=com.your.app/com.your.app.DeviceAdminReceiver
3. Android 14权限预授予步骤
Android 14对权限预授予的限制更严格,需按权限类型分别配置:
普通危险权限(如CAMERA、ACCESS_FINE_LOCATION)
- 在
device/<oem>/<device>/etc/permissions目录下创建privapp-permissions-your_app.xml:
<?xml version="1.0" encoding="utf-8"?> <permissions> <privapp-permissions package="com.your.app"> <!-- Android 14新增的媒体权限 --> <permission name="android.permission.READ_MEDIA_IMAGES" /> <permission name="android.permission.READ_MEDIA_VIDEO" /> <!-- 传统危险权限 --> <permission name="android.permission.CAMERA" /> <permission name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 系统特权权限 --> <permission name="android.permission.MANAGE_DEVICE_ADMINS" /> </privapp-permissions> </permissions>
- 在设备
device.mk中拷贝该文件:
PRODUCT_COPY_FILES += \ device/<oem>/<device>/etc/permissions/privapp-permissions-your_app.xml:system/etc/permissions/privapp-permissions-your_app.xml
特殊权限(如SYSTEM_ALERT_WINDOW、WRITE_SETTINGS)
需通过系统属性预授予,在device.mk中添加:
PRODUCT_PRODUCT_PROPERTIES += \ persist.sys.appops.com.your.app.SYSTEM_ALERT_WINDOW=allow \ persist.sys.appops.com.your.app.WRITE_SETTINGS=allow
4. Android 14专属注意事项
- 签名验证强化:特权应用必须使用平台签名或系统签名组签名,普通签名的APK会被拒绝安装;
- 权限名称变更:存储权限拆分为
READ_MEDIA_IMAGES、READ_MEDIA_VIDEO等,预授予时必须使用新权限名,旧的READ_EXTERNAL_STORAGE已废弃; - 设备所有者限制:Android 14禁止通过ADB设置设备所有者(调试版本除外),必须通过构建时的属性配置完成;
- 隐私沙箱影响:若应用涉及广告ID等隐私权限,需额外配置豁免规则,但特权应用通常不受限制;
- 预编译APK兼容性:Android 14默认开启严格的DEX验证,预编译APK需确保目标SDK版本适配Android 14,否则可能触发安装失败。
内容的提问来源于stack exchange,提问作者Hemanth Chowdary
相关产品推荐
相关产品推荐

