天河做网站,孝感建设银行网站,wordpress必备工具,世界杯数据分析文章目录 概述一、app应用安装黑名单核心代码二、app应用安装黑名单核心功能分析三、代码实战1.先导入所需要的包2.添加获取黑名单方法3.添加限制黑名单方法4.上层使用PS:查看当前黑名单 总结 概述
在13.0系统rom定制化开发中#xff0c;客户需求要实现应用安装黑名单功能客户需求要实现应用安装黑名单功能在黑名单中的应用不允许安装实现一个 控制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系统中应用程序的信息查询应用程序相关信息(applicationactivityreceiverserviceprovider及相应属性等、查询已安装的应用、 增加或删除权限、清除数据用户、服务器、代码段等 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.先导入所需要的包
//add LQX
import android.text.TextUtils;
import java.util.Arrays;
import java.util.List;
//add LQX有些Android13是没有android.provider.Settings.System定义的就需要多加一个
import android.provider.Settings2.添加获取黑名单方法
//add LQXprivate 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(,);ListString installBlackAppList Arrays.asList(split);if (installBlackAppList.contains(packagename)) {return true;}}return false;}
//add LQX3.添加限制黑名单方法
在preparePackageLI(InstallArgs args, PackageInstalledInfo res)中添加 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 LQXif(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.上层使用
Settings.System.putString(mContext.getContentResolver(), install_black_app,com.LQX.systemproperties,com.LQX);多个包名用逗号隔开
PS:查看当前黑名单
settings get system install_black_app总结
以上就是安卓13的应用安装黑名单以及接口教程。