Android 13 AOSP中预授予系统Priv-App辅助及录屏权限的方法咨询
针对Android 13内置Priv-App预授予并锁定权限的方案
一、辅助功能权限:预授予+禁止用户关闭
1. 系统设置默认值配置
在ROM构建阶段,修改系统默认设置参数,确保辅助功能默认启用:
- 编辑
frameworks/base/packages/SettingsProvider/res/values/defaults.xml,添加:<!-- 替换为你的Assist APK包名 --> <bool name="def_accessibility_enabled_com.your.assist.package">true</bool> - 编辑
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java,在loadSystemSettings方法中加入:loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_ENABLED + "_com.your.assist.package", R.bool.def_accessibility_enabled_com.your.assist.package);
2. 锁定权限不可修改
修改系统设置的可写性,禁止用户手动关闭:
- 编辑
frameworks/base/core/java/android/provider/Settings.java,找到Secure类下对应辅助功能的字段配置,重写canWrite方法:@Override public boolean canWrite(Context context) { return false; // 锁定权限,禁止用户修改 }
3. 系统服务强制维持启用状态
在辅助功能服务初始化时强制启用目标应用,防止用户通过特殊路径关闭:
- 编辑
frameworks/base/services/core/java/com/android/server/accessibility/AccessibilityManagerService.java,在onBootPhase方法中添加:ComponentName assistComponent = new ComponentName("com.your.assist.package", "com.your.assist.accessibility.Service"); AccessibilityServiceInfo serviceInfo = new AccessibilityServiceInfo(); serviceInfo.packageNames = new String[]{"android"}; // 按需配置监听范围 serviceInfo.flags = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS; // 强制注册并启用服务 mAccessibilityManager.enableAccessibilityService(assistComponent, true);
二、屏幕捕获权限:预授予+锁定
1. Priv-App权限白名单配置
利用系统Priv-App的权限豁免特性,直接授予权限:
- 在你的Assist APK的
AndroidManifest.xml中声明所需权限:<uses-permission android:name="android.permission.CAPTURE_SCREENSHOT" /> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <!-- 如需录屏,补充以下权限 --> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT" /> - 在ROM的
system/etc/permissions/目录下创建privapp-permissions-com.your.assist.package.xml,内容如下:<permissions> <privapp-permissions package="com.your.assist.package"> <permission name="android.permission.CAPTURE_SCREENSHOT" /> <permission name="android.permission.READ_MEDIA_IMAGES" /> <permission name="android.permission.RECORD_AUDIO" /> <permission name="android.permission.CAPTURE_VIDEO_OUTPUT" /> </privapp-permissions> </permissions>
2. 权限状态强制锁定
确保系统权限检查时始终返回已授予状态:
- 编辑
frameworks/base/services/core/java/com/android/server/pm/permission/PermissionManagerService.java,在checkPermission方法中添加判断:@Override public int checkPermission(String perm, int pid, int uid) { String pkgName = getPackageNameForUid(uid); if ("com.your.assist.package".equals(pkgName) && (perm.equals("android.permission.CAPTURE_SCREENSHOT") || perm.equals("android.permission.READ_MEDIA_IMAGES"))) { return PackageManager.PERMISSION_GRANTED; } return super.checkPermission(perm, pid, uid); }
三、验证步骤
- 构建定制ROM并刷入Pixel 4a 5G
- 进入设置-辅助功能,确认目标Assist服务显示为已启用且无法点击关闭
- 启动Assist APK,测试屏幕捕获功能,确认无需用户授权即可正常运行
- 进入应用信息页面,确认权限列表中对应权限显示为已授予且无法撤销
内容的提问来源于stack exchange,提问作者Adarsh
相关产品推荐
相关产品推荐

