栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android 10 添加权限白名单

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android 10 添加权限白名单

一、需要修改的source code 位置:

frameworks/ base/ core/ res/ res/ values/ config.xml

frameworks/ base/ core/ res/ res/ values/ symbols.xml

frameworks/ base/ services/ core/ java/ com/ android/ server/ pm/ permission/ PermissionManagerService.java
 

二、具体修改方法:

第一步:

 / frameworks/ base/ core/ res/ res/ values/ config.xml中增加一个apk_whitelist的string-array,可以添加到最后面位置,代码如下:


     "com.google.middleware.startup"
     "com.google.sh.test"
     "com.google.middleware.videotest.test"

 

第二步:

/ frameworks/ base/ core/ res/ res/ values/ symbols.xml 中声明上述添加的string-array变量,可以添加到最后面位置,代码如下:

 
 

第一步:frameworks/ base/ services/ core/ java/ com/ android/ server/ pm/ permission/ PermissionManagerService.java中处理apk权限请求时判断是否时白名单中的apk给予放行与授权,修改如下:

1. PermissionManagerService中增加存储白名单apk包名的List:mAPkWhitelist,及初始化方法initApkWhitelist和判断方法isInApkWhitelist

private List mAPkWhitelist = new ArrayList();

private boolean isInApkWhitelist(String pkgName) {
    for (String token : mAPkWhitelist) {
        if (pkgName.equals(token)) {
            return true;
        }
    }
    return false;
}

private void initApkWhitelist() {
    String[] apkWhitelist = Resources.getSystem().getStringArray(
            com.android.internal.R.array.apk_whitelist);
    mAPkWhitelist = Arrays.asList(apkWhitelist);
}

2. PermissionManagerService构造函数中对mAPkWhitelist进行初始化,即读取资源文件中apk_whitelist的包名

  PermissionManagerService(Context context,
            @Nullable DefaultPermissionGrantedCallback defaultGrantCallback,
            @NonNull Object externalLock) {
        mContext = context;
        mLock = externalLock;

    ......

        LocalServices.addService(
                PermissionManagerInternal.class, new PermissionManagerInternalImpl());

        initCMCCApkWhitelist(); // 对白名单进行初始化
    }
 

3. PermissionManagerService::grantPermissions函数中请求处理权限时,判断是否时白名单中的应用给予授权

  if (bp.isNormal()) {
                    grant = GRANT_INSTALL;
                } else if (bp.isRuntime()) {
                    if (origPermissions.hasInstallPermission(bp.getName())
                            || upgradedActivityRecognitionPermission != null) {     
                        grant = GRANT_UPGRADE;
                    } else {
                        grant = GRANT_RUNTIME;                        
                        if(isInApkWhitelist(pkg.packageName)) // 白名单应用判断
                           grant = GRANT_INSTALL;
                    }
                } else if (bp.isSignature()) {
                    allowedSig = grantSignaturePermission(perm, pkg, bp, origPermissions);
                    if (allowedSig) {
                        grant = GRANT_INSTALL;
                    }
                    if(isInApkWhitelist(pkg.packageName))  // 白名单应用判断
                       grant = GRANT_INSTALL;                        

  }
               

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/933780.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号