rk3588 安卓13 应用安装黑名单的接口

文章目录


概述

在13.0系统rom定制化开发中,客户需求要实现应用安装黑名单功能,在黑名单中的应用不允许安装,实现一个

控制app安装的功能并且暴露接口给上层应用,这需要从app安装流程入手才可以实现功能

PMS就是负责管理app安装的,功能就在这里添加就可以了,接下来看具体实现这个功能


一、app应用安装黑名单核心代码

framework/base/core/java/android/content/pm/IPackageManager.aidl

framework/base/services/core/java/com/android/server/pm/InstallPackageHelper.java

framework/base/services/core/java/com/android/server/pm/PackageManagerService.java

二、app应用安装黑名单核心功能分析

PackageManager是用于获取Android系统中应用程序的信息,查询应用程序相关信息(application,activity,receiver,service,provider及相应属性等)、查询已安装的应用、

增加或删除权限、清除数据用户、服务器、代码段等

IPackageManager接口类中定义了服务端和客户端通信的业务函数,还定义了内部类Stub,该类从Binder派生并实现了IPackageManager接口。

PackageManagerService继承自IPackageManager.Stub类,由于Stub类从Binder派生,因此PackageManagerService将作为服务端参与Binder通信。

PackageManagerService(简称PKMS),是Android系统中核心服务之一,管理着所有与package相关的工作,常见的比如安装、卸载应用、信息查询等工作,主要完成以下核心功能

1.解析AndroidManifest.xml清单文件,解析清单文件中的所有节点信息

2.扫描本地文件,主要针对apk,主要是系统应用、本地安装应用等。

实现功能需求:

我这里用了简单的方法在InstallPackageHelper.java中增加黑名单接口,实现设置黑名单和获取黑名单,接下来在InstallPackageHelper中的安装app的方法中判断是否是黑名单内的app,然后确定是否让安装从而实现功能

三、代码实战

1.先导入所需要的包

java 复制代码
//add LQX
import android.text.TextUtils;
import java.util.Arrays;
import java.util.List;
//add LQX

有些Android13是没有android.provider.Settings.System定义的,就需要多加一个:

java 复制代码
import android.provider.Settings;

2.添加获取黑名单方法

java 复制代码
//add LQX
    private boolean isBlackListApp(String packagename){
        String installBlackApp = android.provider.Settings.System.getString(mContext.getContentResolver(), "install_black_app");
        if (TextUtils.isEmpty(installBlackApp)) {
            return true;
        }else{
            String[] split = installBlackApp.split(",");
            List<String> installBlackAppList = Arrays.asList(split);
            if (installBlackAppList.contains(packagename)) {
                return true;
            }
        }
        return false;
    }
//add LQX

3.添加限制黑名单方法

在preparePackageLI(InstallArgs args, PackageInstalledInfo res)中添加:

java 复制代码
        try (PackageParser2 pp = mPm.mInjector.getPreparingPackageParser()) {
            parsedPackage = pp.parsePackage(tmpPackageFile, parseFlags, false);
            AndroidPackageUtils.validatePackageDexMetadata(parsedPackage);
        } catch (PackageManagerException e) {
            throw new PrepareFailure("Failed parse during installPackageLI", e);
        } finally {
            Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
        }

        //add LQX
        if(isBlackListApp(parsedPackage.getPackageName())){
            Log.d("InstallPackageHelper",parsedPackage.getPackageName()+" is does not instant app");
            throw new PrepareFailure(INSTALL_FAILED_INTERNAL_ERROR,
                    "app is in the BlackList.packageName");
        }
        //add LQX

        // Instant apps have several additional install-time checks.

4.上层使用

java 复制代码
Settings.System.putString(mContext.getContentResolver(), "install_black_app","com.LQX.systemproperties,com.LQX");

多个包名用逗号隔开

PS:查看当前黑名单

java 复制代码
settings get system install_black_app

总结

以上就是安卓13的应用安装黑名单以及接口教程。

相关推荐
陈小桔14 分钟前
idea中重新加载所有maven项目失败,但maven compile成功
java·maven
小学鸡!15 分钟前
Spring Boot实现日志链路追踪
java·spring boot·后端
爱学习的大牛12317 分钟前
MVVM 架构 android
android·mvvm
xiaogg367826 分钟前
阿里云k8s1.33部署yaml和dockerfile配置文件
java·linux·kubernetes
逆光的July42 分钟前
Hikari连接池
java
微风粼粼1 小时前
eclipse 导入javaweb项目,以及配置教程(傻瓜式教学)
java·ide·eclipse
番茄Salad1 小时前
Spring Boot临时解决循环依赖注入问题
java·spring boot·spring cloud
天若有情6731 小时前
Spring MVC文件上传与下载全面详解:从原理到实战
java·spring·mvc·springmvc·javaee·multipart
祈祷苍天赐我java之术1 小时前
Redis 数据类型与使用场景
java·开发语言·前端·redis·分布式·spring·bootstrap
Olrookie2 小时前
若依前后端分离版学习笔记(二十)——实现滑块验证码(vue3)
java·前端·笔记·后端·学习·vue·ruoyi