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

相关推荐
tianyagukechat24 分钟前
rockylinux9.5 配置IP
java·网络·tcp/ip
程序员Sonder32 分钟前
黑马java----正则表达式(一文弄懂)
java·正则表达式·新人首发
doris820433 分钟前
Python 正则表达式 re.findall()
java·python·正则表达式
Anastasiozzzz1 小时前
阿亮随手记:动态条件生成Bean
java·前端·数据库
丹牛Daniel2 小时前
Java解决HV000183: Unable to initialize ‘javax.el.ExpressionFactory‘
java·开发语言·spring boot·tomcat·intellij-idea·个人开发
消失的旧时光-19432 小时前
智能指针(三):实现篇 —— shared_ptr 的内部设计与引用计数机制
java·c++·c·shared_ptr
芒克芒克2 小时前
深入浅出CopyOnWriteArrayList
java
wuqingshun3141592 小时前
说一下java的反射机制
java·开发语言·jvm
A懿轩A2 小时前
【Java 基础编程】Java 异常处理保姆级教程:try-catch-finally、throw/throws、自定义异常
java·开发语言·python
极客先躯2 小时前
高级java每日一道面试题-2025年7月14日-基础篇[LangChain4j]-如何集成开源模型(如 Llama、Mistral)?需要什么基础设施?
java·langchain·存储·计算资源·模型服务框架·网络 / 协议·java 依赖