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的应用安装黑名单以及接口教程。

相关推荐
天选之女wow10 分钟前
【代码随想录算法训练营——Day60】图论——94.城市间货物运输I、95.城市间货物运输II、96.城市间货物运输III
android·算法·图论
Spirit_NKlaus12 分钟前
Springboot自定义配置解密处理器
java·spring boot·后端
龙猫蓝图26 分钟前
IDEA新UI设置
java
沐怡旸35 分钟前
【底层机制】Android对Linux线程调度的移动设备优化深度解析
android·面试
梅梅绵绵冰40 分钟前
SpringAOP的相关概念
java·开发语言
Xiaoyu Wang40 分钟前
GC垃圾回收
java·开发语言·jvm
CodeBlossom41 分钟前
Spring Cache快速入门
java·数据库·spring
麦烤楽鸡翅42 分钟前
挡住洪水 (牛客)
java·数据结构·c++·python·算法·bfs·牛客
bigdata-rookie43 分钟前
JVM 垃圾收集器介绍
java·jvm·算法
⑩-1 小时前
如何保证Redis和Mysql数据缓存一致性?
java·数据库·redis·mysql·spring·缓存·java-ee