做服装要看国外哪些网站,许昌做网站优化,张家港网站优化,展会布置文章目录 Android framework修改#xff0c;禁止指定包名的apk安装到设备上(基于Android10.0.0-r41)1.新增接口提供给上层调用2.在pms中实现新增的接口3.找到preparePackageLI方法。4.测试验证 Android framework修改#xff0c;禁止指定包名的apk安装到设备上(基于Android10… 文章目录 Android framework修改禁止指定包名的apk安装到设备上(基于Android10.0.0-r41)1.新增接口提供给上层调用2.在pms中实现新增的接口3.找到preparePackageLI方法。4.测试验证 Android framework修改禁止指定包名的apk安装到设备上(基于Android10.0.0-r41)
1.新增接口提供给上层调用
pms就是负责apk的安装和卸载从pms入手
frameworks/base/core/java/android/content/pm/IPackageManager.aidl //qfh addvoid pmList(in ListString pkgNames);ListString getPackageInfoList();//qfh end自定义两个接口在aidl文件中pmList主要设置要禁止安装的包名的列表getPackageInfoList是获取包名列表
2.在pms中实现新增的接口
frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
在pms中 //qfh addprivate ListString pkNames;Overridepublic void pmList(ListString pkNames) {this.pkNames pkNames;Slog.d(TAG, pkNames pkNames);}Overridepublic ListString getPackageInfoList(){return this.pkNames;}private boolean refuseInstallationAppList(String packagename){if(this.pkNames null || this.pkNames.size() 0){return false;}for(String pkNameItem : this.pkNames) {if (pkNameItem.equals(packagename)) {return true;}}return false;}//qfh end主要是对pmListgetPackageInfoList两个接口的实现refuseInstallationAppList是判断我们传入的包名是否被列入禁止安装的列表中
3.找到preparePackageLI方法。
只要是安装apk都会走这个方法包括adb以及Android studio等各种方式安装进系统内。 //qfh addif(refuseInstallationAppList(pkg.packageName)) {Log.d(refuseInstallationAppList,refuseInstallationAppList);throw new PrepareFailure(INSTALL_FAILED_INSTANT_APP_INVALID, this is a app for refuseInstallationAppList);}//qfh end判断传入的包名是否在禁止安装的列表中如果在就抛出异常禁止安装。
由于pms是父类它有一个子类ApplicationPackageManager还需要我们添加一个接口方法提供给app外界调用
frameworks/base/core/java/android/app/ApplicationPackageManager.java public void setPkgNamesList(ListString pkgNames) {try {Log.w(PackageManager, pkgNames pkgNames);mPM.pmList(pkgNames);} catch (RemoteException e) {throw e.rethrowFromSystemServer();}}4.测试验证
添加我们需要禁止安装的app的包名 public void createPackageManagerTest(View view) {Context context getApplicationContext();ApplicationPackageManager packageManager (ApplicationPackageManager) context.getPackageManager();ListString pkNames new ArrayList();pkNames.add(com.example.myapplication6);packageManager.setPkgNamesList(pkNames);}我们可以把包名修改成禁用的包名测试下 使用adb安装这是我们抛出异常的日志信息 Androidstuduio直接安装也是被禁止 至此就达到了我们的要求可以有选择性的禁止一些app的安装