Andrid framework 新增xml资源文件(APK授权白名单)

Framework新增资源文件

  1. frameworks/base/core/res/res/values/custom_whitelist.xml
<?xml version="1.0" encoding="utf-8"?>

<!-- custom apk runtime permission grant -->
<resources>

<string-array name="permission_custom_packagename" translatable="false">
    <item>com.demo.runpermissionrequest</item>
</string-array>

</resources>

2.frameworks/base/core/res/res/values/symbols.xml 增加新的字符串id定义
经查证,大部分字符串没有在public.xml中声明,而是在./frameworks/base/core/res/res/values/symbols.xml中被声明。而symbols中声明的字符串ID没有在current.txt中找到,应该是framework内部使用的非公共资源。因此,在framework中添加一个内部使用的字符串,仅需修改:

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

而添加一个所有应用程序都可以调用到的字符串资源,则需要修改:

frameworks/base/core/res/res/values/public.xml
frameworks/base/core/res/res/values/strings.xml

另外需要注意的是,修改xml后最好强制重新编译framework-res(mmm framework/base/core/res -B),以免出现R.java没有重新生成的问题。

3.在framework中的代码调用如下接口获取

final String []itemString = mContext.getResources().
            getStringArray(com.android.internal.R.array.permission_custom_packagename);

        if(ArrayUtils.isEmpty(itemString)){
            Slog.e(TAG, "grantPermissionsToCustomApp itemString is null ");
            return false;
        }

实例新装apk权限授权功能

    private void handlePackagePostInstall(PackageInstalledInfo res, boolean grantPermissions,
            boolean killApp, boolean virtualPreload, String[] grantedPermissions,
            boolean launchedForRestore, String installerPackage,
            IPackageInstallObserver2 installObserver) {
        if (res.returnCode == PackageManager.INSTALL_SUCCEEDED) {
            // Send the removed broadcasts
            if (res.removedInfo != null) {
                res.removedInfo.sendPackageRemovedBroadcasts(killApp);
            }

            //[ADD] custom apk grant permission,20190501
            final boolean doCustomApk = grantPermissionsToCustomApp(res.name);
            Slog.d(TAG, "grantPermissions: " + grantPermissions + ", pkg name : " + res.name + ", doCustomApk: " + doCustomApk);
            // Now that we successfully installed the package, grant runtime
            // permissions if requested before broadcasting the install. Also
            // for legacy apps in permission review mode we clear the permission
            // review flag which is used to emulate runtime permissions for
            // legacy apps.
            if (grantPermissions || doCustomApk) {
                final int callingUid = Binder.getCallingUid();
                mPermissionManager.grantRequestedRuntimePermissions(
                        res.pkg, res.newUsers, grantedPermissions, callingUid,
                        mPermissionCallback);
            }

            final boolean update = res.removedInfo != null
                    && res.removedInfo.removedPackage != null;
            final String installerPackageName =
                    res.installerPackageName != null
 private final boolean grantPermissionsToCustomApp(@NonNull final String packageName){
        final String []itemString = mContext.getResources().
            getStringArray(com.android.internal.R.array.permission_custom_packagename);

        if(ArrayUtils.isEmpty(itemString)){
            Slog.e(TAG, "grantPermissionsToCustomApp itemString is null ");
            return false;
        }

        Slog.d(TAG, "grantPermissionsToCustomApp pkg count = " + itemString.length +", start ");
        for (int i = 0; i < itemString.length; i++) {
            /*
            PackageSetting ps = mSettings.getPackageLPr(itemString[i]);
            PackageParser.Package customPackage = ((ps == null)?null:ps.pkg);
            if ((customPackage != null) && (packageName.equals(itemString[i]))) {
                Slog.d(TAG, "grantPermissionsToCustomApp pkg name : " + itemString[i] + ", end");
                return true;
            }
            */
            
            if (packageName.equals(itemString[i])) {
                Slog.d(TAG, "grantPermissionsToCustomApp pkg name : " + itemString[i] + ", end");
                return true;
            }
        }

        return false;
    }
    //[ADD-END] custom apk grant permission,20190501
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值