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

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);
    }
    

三、验证步骤

  1. 构建定制ROM并刷入Pixel 4a 5G
  2. 进入设置-辅助功能,确认目标Assist服务显示为已启用且无法点击关闭
  3. 启动Assist APK,测试屏幕捕获功能,确认无需用户授权即可正常运行
  4. 进入应用信息页面,确认权限列表中对应权限显示为已授予且无法撤销

内容的提问来源于stack exchange,提问作者Adarsh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:34:57