首页 > 其他分享 >Android 13.0 app应用安装白名单

Android 13.0 app应用安装白名单

时间:2024-12-14 09:32:24浏览次数:11  
标签:java app 白名单 return Android com WHITE android

前言

应用场景和用户需求‌:

  • ROM定制化开发‌: 在定制ROM时,客户可能需要限制某些应用安装,以确保系统的安全和稳定。通过实现应用安装白名单功能,可以满足这种需求。
  • 企业设备管理‌: 在企业设备中,可能需要限制员工只能安装指定的应用,以防止恶意软件和不当使用。通过白名单功能,可以有效地控制应用安装。

核心组件

在Android 13中,实现应用安装白名单功能主要涉及以下几个步骤和组件‌:

  1. ‌PackageManagerService‌: 在PackageManagerService中添加白名单逻辑。PackageManagerService负责管理应用安装,通过修改其代码可以实现白名单功能。具体来说,需要在PackageManagerService.java中添加判断逻辑,检查待安装应用是否在白名单中‌。
  2. IPackageManager接口‌: IPackageManager接口定义了服务端和客户端的通信方式。通过修改这个接口,可以实现白名单的判断逻辑,确保只有白名单中的应用才能被安装‌。
  3. PackageInstallerApplication‌: 在PackageInstallerApplication中添加白名单逻辑。这个应用负责处理应用的安装请求,通过修改其代码可以实现对安装请求的白名单检查‌。

代码实例

diff --git a/frameworks/base/services/core/java/com/android/server/pm/InstallPackageHelper.java b/frameworks/base/services/core/java/com/android/server/pm/InstallPackageHelper.java
index 90ccc4825ec..d589367a192 100755
--- a/frameworks/base/services/core/java/com/android/server/pm/InstallPackageHelper.java
+++ b/frameworks/base/services/core/java/com/android/server/pm/InstallPackageHelper.java
@@ -198,6 +198,8 @@ import com.android.server.pm.PackageManagerService;
 import com.android.server.pm.pkg.component.ParsedUsesPermission;
 import com.android.server.pm.pkg.component.ParsedUsesPermissionImpl;
 // @}
+import android.text.TextUtils;
+import android.widget.Toast;
 
 final class InstallPackageHelper {
     private final PackageManagerService mPm;
@@ -1783,9 +1785,20 @@ final class InstallPackageHelper {
             // we're passing the freezer back to be closed in a later phase of install
             shouldCloseFreezerBeforeReturn = false;
 
-            return new PrepareResult(replace, targetScanFlags, targetParseFlags,
-                    oldPackage, parsedPackage, replace /* clearCodeCache */, sysPkg,
-                    ps, disabledPs);
+            // Create by yeruilai 2024-10-01 19:38:46 Restricted application installation
+            // return new PrepareResult(replace, targetScanFlags, targetParseFlags,
+            //         oldPackage, parsedPackage, replace /* clearCodeCache */, sysPkg,
+            //         ps, disabledPs);
+            if (filterAppWhiteList(parsedPackage, sysPkg)) {
+                return new PrepareResult(replace, targetScanFlags, targetParseFlags,
+                        oldPackage, parsedPackage, replace /* clearCodeCache */, sysPkg,
+                        ps, disabledPs);
+            } else {
+                Toast.makeText(mPm.mContext, "安装包非白名单应用,无法安装", Toast.LENGTH_LONG).show();
+                throw new PrepareFailure(INSTALL_FAILED_INVALID_APK,
+                        "The application installation whitelist is being controlled, " +
+                                "Package: " + parsedPackage.getPackageName() + " is not in the whitelist.");
+            }
         } finally {
             res.mFreezer = freezer;
             if (shouldCloseFreezerBeforeReturn) {
@@ -4531,4 +4544,212 @@ final class InstallPackageHelper {
 
         return scanFlags;
     }
+
+    // Create by yeruilai 2024-10-01 19:38:46 Restricted application installation
+    private static final String TAG_WHITE_LIST = "install_white";
+    private static final boolean DEBUG_WHITE = true;
+    private static final String[] WHITE_LIST_SPLIT = new String[] {
+        "com.longzhiye.demo1",
+        "com.longzhiye.demo2",
+        "com.longzhiye.demo3",
+    };
+
+    /**
+     * Create by yeruilai 2024-10-01 19:38:46 Restricted application installation
+     */
+    private boolean filterAppWhiteList(ParsedPackage parsedPackage, boolean isSysPkg) {
+        String parsedName = parsedPackage.getPackageName();
+        List<String> whiteList = Arrays.asList(WHITE_LIST_SPLIT);
+        if (whiteList == null || whiteList.size() == 0) {
+            if (DEBUG_WHITE) android.util.Log.d(TAG_WHITE_LIST, "whiteListLabel [ whiteList ] = NULL or Empty, [ DISALLOW ]");
+            return false;
+        }
+        for (String pkg : whiteList) {
+            if (DEBUG_WHITE) android.util.Log.d(TAG_WHITE_LIST, "[ whiteList ] >>> Package : " + pkg);
+            if (TextUtils.equals(parsedName, pkg)) {
+                if (DEBUG_WHITE) android.util.Log.d(TAG_WHITE_LIST, "[ ALLOW ] *** " + parsedName);
+                return true;
+            }
+        }
+        if (DEBUG_WHITE) android.util.Log.d(TAG_WHITE_LIST, "[ DISALLOW ]");
+        return false;
+    }
+
 }

标签:java,app,白名单,return,Android,com,WHITE,android
From: https://blog.csdn.net/u010345983/article/details/143860713

相关文章

  • uniapp:3D轮播切换
    <viewclass="header"> <swiperclass="swiper"previous-margin="170rpx"next-margin="170rpx":current="current"@change="changeSwiper"> <swiper-itemclass="item"v-for=&......
  • AndroidStudio记单词APP带SQLite数据库期末作业
    AndroidStudio词汇学习应用:利用资源助力期末复习项目概述这款基于AndroidStudio开发的词汇学习应用,充分利用了SQLite数据库的强大功能,为期末复习提供了全方位的支持。这款应用包含了单词记忆、管理和多用户帐号功能,旨在帮助用户有效提升词汇量和备考效率。独特优......
  • 基于Java的springboot/SSM+vue.js+uniapp小程序软件学院学生成绩管理系统的附带文章源
    文章目录前言详细视频演示具体实现截图后端框架SpringBoot前端框架Vue持久层框架MyBaits为什么选择我代码参考数据库参考测试用例参考源码获取前言......
  • 谷歌发布 Android XR 集成 Gemini 语音对话;Voice Agent 平台 Vapi 获 2000 万美元融资
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......
  • Android 设置沉浸式状态栏
    原文地址:Android设置沉浸式状态栏-Stars-One的杂货小窝标题所说的沉浸式状态栏实际就是底部有背景图,而状态栏是沉浸效果(可以在背景图上面展示的),如下面的这种效果:官方API实现官方新版本出了个api,名为enableEdgeToEdge(),方便我们使用这种方法主要适用Activity的整......
  • rockchip刷机,更换rootfs后系统卡死,提示unable to read squashfs_super_block,mounting
     rochchippx30刷机后卡在系统引导界面。具体系统引导日志为:[2.812287]device-mapper:verity:sha256usingimplementation"sha256-ce"VerityOK[2.824325]EXT4-fs(mmcblk1p11):recoverycomplete[2.824840]EXT4-fs(mmcblk1p11):mountedfilesyste......
  • uniapp的uview2.0框架u--textarea组件(或uv-ui uv-textarea)(或uviewui u--textarea)无法
    问题描述在使用uniapp的uview2.0框架u–textarea组件时,想要使u–textarea支持换行输入,但是默认不支持换行输入,各种百度,没有找到解决问题的方案,最后只有查看源码如下但发现源码没有对属性有过多的处理,我开始怀疑是不是原生组件又问题,但是测试之后发现原生组件并没有问题,经过一天......
  • Android13开机向导
    文章目录前言需求-场景第三方资料说明需求思路按照平台思路从配置上去feature换个思路,去feature。SimMissingActivity判断跳过逻辑SetupWizardUtils判断SIM、hasSystemFeatureFEATURE_TELEPHONYPackageManager.FEATURE_TELEPHONYApplicationPackageManagerhasSy......
  • Post请求的两种编码格式:application/x-www-form-urlencoded和multipart/form-data
    一、前端表单提交时application/x-www-form-urlencoded表单代码:<formaction="http://localhost:8888/task/"method="POST">Firstname:<inputtype="text"name="firstName"value="Mickey&"><br>Last......
  • Uniapp插件如何通过NFC读取多种证卡信息?
    nfc读卡uniapp插件,由中软高科进行开发,主要是通过NFC读取居民身份证、港澳台居住证、外国人居住证、护照等证卡的信息。经过多个版本的升级更新,目前性能已趋于稳定,并且读卡速度较之最初版本有了大的提升。注意事项测试使用的appid不可用于商用(否则后果自负)。商用的a......