RK3399 Android7.1增加應用安裝白名單機制

通過設置應用包名白名單的方式限制未授權的應用軟件安裝。

diff --git a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
index af9a533..caa122d 100755
--- a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -787,6 +787,19 @@ public class PackageManagerService extends IPackageManager.Stub {
? ? ?private List<String> mKeepUninstalledPackages;
?
? ? ?private UserManagerInternal mUserManagerInternal;
+? ? ? ?
+? ? ? ?//白名單文件路徑
+? ? ? ?private static final String WHITELIST_FILE_PATH = "/system/etc/package_whitelist.txt";
+? ? ? ?
+? ? ? ?// 定義默認白名單
+? ? ? ?private static final List<String> DEFAULT_WHITELIST = Arrays.asList(
+? ? ? ? ? ? ? ?"com.antutu.ABenchMark",
+? ? ? ? ? ? ? ?"com.qihoo360.mobilesafe"
+? ? ? ?);
?
? ? ?private static class IFVerificationParams {
? ? ? ? ?PackageParser.Package pkg;
@@ -8196,10 +8209,91 @@ public class PackageManagerService extends IPackageManager.Stub {
? ? ? ? ? ? ?}
? ? ? ? ?}
? ? ?}
+? ? ? ?
+? ? ? ? ? ? ? ?/**
+? ? ? ? * 檢查應用是否允許安裝
+? ? ? ? */
+? ? ? ?private boolean isPackageAllowed(PackageParser.Package pkg) {
+? ? ? ? ? ? ? ?
+? ? ? ? ? ? ? ?// 檢查白名單
+? ? ? ? ? ? ? ?final List<String> allowedPackages = loadWhitelist();
+? ? ? ? ? ? ? ?final String packageName = pkg.packageName;
+? ? ? ? ? ? ? ?
+? ? ? ? ? ? ? ?// 精確匹配
+? ? ? ? ? ? ? ?if (allowedPackages.contains(packageName)) {
+? ? ? ? ? ? ? ? ? ? ? ?return true;
+? ? ? ? ? ? ? ?}
+? ? ? ? ? ? ? ?
+? ? ? ? ? ? ? ?return false;
+? ? ? ?}
+? ? ? ?
+? ? ? ? ? ? ? ?/**

+
+? ? ? ?/**
+? ? ? ? * 從配置文件加載白名單
+? ? ? ? */
+? ? ? ?private List<String> loadWhitelist() {
+? ? ? ? ? ? ? ?//List<String> whitelist = new ArrayList<>();
+? ? ? ? ? ? ? ?List<String> whitelist = new ArrayList<>(DEFAULT_WHITELIST);? // 使用默認列表
+? ? ? ? ? ? ? ?File whitelistFile = new File(WHITELIST_FILE_PATH);
+? ? ? ? ? ? ? ?
+? ? ? ? ? ? ? ?if (whitelistFile.exists() && whitelistFile.canRead()) {
+? ? ? ? ? ? ? ? ? ? ? ?try (BufferedReader reader = new BufferedReader(new FileReader(whitelistFile))) {
+? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?String line;
+? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?while ((line = reader.readLine()) != null) {
+? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?line = line.trim();
+? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 跳過空行和注釋
+? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if (!line.isEmpty() && !line.startsWith("#")) {
+? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?whitelist.add(line);
+? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
+? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
+? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
+? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Slog.i(TAG, "Loaded " + whitelist.size() + " packages from whitelist");
+? ? ? ? ? ? ? ? ? ? ? ?} catch (FileNotFoundException e) {
+? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Slog.e(TAG, "Whitelist file not found: " + WHITELIST_FILE_PATH);
+? ? ? ? ? ? ? ? ? ? ? ?} catch (IOException e) {
+? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Slog.e(TAG, "Error reading whitelist file", e);
+? ? ? ? ? ? ? ? ? ? ? ?}
+? ? ? ? ? ? ? ?}
+? ? ? ? ? ? ? ?
+? ? ? ? ? ? ? ?return whitelist;
+? ? ? ?}
+
?
? ? ?private PackageParser.Package scanPackageDirtyLI(PackageParser.Package pkg,
? ? ? ? ? ? ?final int policyFlags, final int scanFlags, long currentTime, UserHandle user)
? ? ? ? ? ? ?throws PackageManagerException {
+? ? ? ? ? ? ? ? ? ? ? ?
+? ? ? ? ? ? ? ? // ========== 新增:動態白名單校驗 ==========
+? ? ? ? ? ? ? ?if ((policyFlags&PackageParser.PARSE_IS_SYSTEM) == 0 && !isPackageAllowed(pkg)) {
+? ? ? ? ? ? ? ? ? ? ? ?throw new PackageManagerException(
+? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?PackageManager.INSTALL_FAILED_INVALID_APK,
+? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"Installation of package " + pkg.packageName + " is not allowed");
+? ? ? ? ? ? ? ?}
+? ? ? ? ? ? ? ?
? ? ? ? ?final File scanFile = new File(pkg.codePath);
? ? ? ? ?if (pkg.applicationInfo.getCodePath() == null ||
? ? ? ? ? ? ? ? ?pkg.applicationInfo.getResourcePath() == null) {

DEFAULT_WHITELIST 列表中是系統默認允許安裝的應用包名,用于系統預置應用的安裝。若還需要其他應用安裝,則可通過往/system/etc/package_whitelist.txt中添加應用包名實現。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907570.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907570.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907570.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

體現物聯網環境下安全防護的緊迫性 :物聯網環境下的個人信息安全:隱憂與防護之道

摘要&#xff1a;隨著物聯網的飛速發展&#xff0c;個人信息在物聯網環境下面臨的安全風險日益嚴峻。本文深入探討了物聯網環境下個人信息泄露的主要途徑&#xff0c;分析了當前個人信息安全保護面臨的挑戰&#xff0c;并從技術、法律、企業責任和個人意識等多方面提出了相應的…

vue3 項目配置多語言支持,如何從服務端拿多語言配置

在 Vue3 項目中實現多語言支持并從服務端獲取配置&#xff0c;可以使用 Vue I18n 庫。在初始化階段可以發送請求獲取多語言配置或者通過本地文件加載json文件的方式&#xff0c;都可以實現。我這里是tauri項目&#xff0c;所以使用的是invoke從tauri端拿到配置文件&#xff0c;…

使用ssh-audit掃描ssh過期加密算法配置

使用ssh-audit掃描ssh過期加密算法配置 安裝檢查ssh的加密算法配置修改ssh的加密算法配置 安裝 # pip3安裝ssh-audit pip3 instal ssh-audit檢查ssh的加密算法配置 # 檢查ssh的配置 ssh-audit 192.168.50.149修改ssh的加密算法配置 # 查看ssh加密配置文件是否存在 ls /etc/c…

LeetCode 高頻 SQL 50 題(基礎版)之 【連接】部分 · 下

前五道題&#xff1a;LeetCode 高頻 SQL 50 題&#xff08;基礎版&#xff09;之 【連接】部分 上 題目&#xff1a;577. 員工獎金 題解&#xff1a; select r.name,b.bonus from Employee r left join Bonus b on r.empIdb.empId where b.bonus <1000 or b.bonus is nul…

[yolov11改進系列]基于yolov11引入感受野注意力卷積RFAConv的python源碼+訓練源碼

[RFAConv介紹] 1、RFAConv 在傳統卷積操作中&#xff0c;每個感受野都使用相同的卷積核參數&#xff0c;無法區分不同位置的信息差異&#xff0c;這都限制了網絡性能。此外&#xff0c;由于空間注意力以及現有空間注意力機制的局限性&#xff0c;雖然能夠突出關鍵特征&#xf…

【軟件設計】通過軟件設計提高 Flash 的擦寫次數

目錄 0. 個人簡介 && 授權須知1. Flash 和 EEROM 基本情況2. 場景要求3. 軟件設計思路4. 代碼展示4.1 flash.h4.2 flash.c 0. 個人簡介 && 授權須知 &#x1f4cb; 個人簡介 &#x1f496; 作者簡介&#xff1a;大家好&#xff0c;我是喜歡記錄零碎知識點的菜鳥…

OpenCV CUDA模塊直方圖計算------在 GPU 上計算輸入圖像的直方圖(histogram)函數histEven()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該函數用于在 GPU 上計算輸入圖像的直方圖&#xff08;histogram&#xff09;。它將像素值區間均勻劃分為若干個 bin&#xff08;桶&#xff09;…

龍虎榜——20250530

上證指數陽包陰&#xff0c;量能較前期下跌有放大&#xff0c;但個股跌多漲少&#xff0c;下跌超過4000個。 深證指數和上漲總體相同。 2025年5月30日龍虎榜行業方向分析 1. 醫藥&#xff08;創新藥原料藥&#xff09; 代表標的&#xff1a;華納藥廠、舒泰神、睿智醫藥、華…

HarmonyNext使用request.agent.download實現斷點下載

filedownlaod(API12) &#x1f4da;簡介 filedownload 這是一款支持大文件斷點下載的開源插件&#xff0c;退出應用程序進程殺掉以后或無網絡情況下恢復網絡后&#xff0c;可以在上次位置繼續恢復下載等 版本更新—請查看更新日志!!! 修復已知bug,demo已經更新 &#x1f4d…

nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: 80端口被占用

Nginx啟動報錯&#xff1a;nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions) 這個報錯代表80端口被占用 先查看占用80的端口 netstat -aon | findstr :80 把它殺掉&#xff0c;強…

embbeding 視頻截圖

Embedding是什么&#xff1f;有什么作用&#xff1f;是怎么得到的&#xff1f;_嗶哩嗶哩_bilibili

服務器tty2終端如何關機

在服務器的 tty2 或其他虛擬終端上&#xff0c;要安全地進行關機操作&#xff0c;可以使用以下命令之一&#xff1a; 1.1 使用 shutdown 命令&#xff1a; shutdown 命令可以計劃系統關機。默認需要超級用戶權限。 sudo shutdown -h now-h 選項表示關機&#xff08;halt&…

時序數據庫IoTDB啟動方式及集群遷移指南

IoTDB啟動方式 IoTDB在配置啟動時有兩種推薦方式&#xff1a; ?主機名啟動?&#xff1a; ?推薦理由?&#xff1a;主機名啟動方式更為靈活&#xff0c;便于在不同網絡環境中部署相同的IoTDB實例。?工作原理?&#xff1a;IoTDB啟動后會維護一張節點編號與網絡地址的映射表…

如何在Qt中繪制一個帶有動畫的弧形進度條?

如何在Qt中繪制一個弧形的進度條 在圖形用戶界面開發中&#xff0c;進度指示控件&#xff08;Progress Widget&#xff09;是非常常見且實用的組件。CCArcProgressWidget 是一個繼承自 QWidget 的自定義控件&#xff0c;用于繪制圓弧形進度條。當然&#xff0c;筆者看了眼公開…

在 Mac 下 VSCode 中的終端使用 option + b 或 f 的快捷鍵變成輸入特殊字符的解決方案

前言 在終端里&#xff0c;我們可以使用 option b 和 option f 來在我們輸入的命令中進行快速的前后調整光標&#xff0c;但是&#xff0c;在未設置的情況下&#xff0c;在 MacOS 中&#xff0c;會變成輸入特殊字符。 普通鍵盤上是 alt b 和 alt f &#xff0c;只是叫法不…

Android bindservice綁定服務,并同步返回service對象的兩個方法

先上一段代碼&#xff1a; private IDeviceService deviceService null; private ServiceConnection connnull; private synchronized void bindyourservice() { Intent intent new Intent();intent.setPackage("servicepackagename");intent.setAction("…

Go語言之空接口與類型斷言

Go 語言中&#xff0c;接口是一種強大的抽象機制。其中&#xff0c;空接口&#xff08;interface{}&#xff09;和類型斷言為我們提供了處理任意類型與類型檢查的能力。 一、空接口&#xff08;interface{}&#xff09; 空接口是 Go 中最特殊的接口&#xff1a;不包含任何方法…

三、OrcaSlicer預設顯示

一、界面類 主框架使用的是wxWidgets庫&#xff1b;3D模型的渲染區的控件&#xff0c;使用的是imgui庫。 1、Plater 此類在OrcaSlicer\src\slic3r\GUI\Plater.hpp文件中定義 1.1 Plater::priv 此結構體是Plater的數據類&#xff0c;各種數據的對象和指針保存在此結構體中。如…

00 QEMU源碼中文注釋與架構講解

QEMU源碼中文注釋與架構講解 先占坑&#xff1a;等后續完善后再更新此文章 注釋作者將狼才鯨創建日期2025-05-30更新日期NULL CSDN閱讀地址&#xff1a;00 QEMU源碼中文注釋與架構講解Gitee源碼倉庫地址&#xff1a;才鯨嵌入式/qemu 一、前言 參考網址 QEMU 源碼目錄簡介qe…

一、Sqoop歷史發展及原理

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月30日 專欄&#xff1a;Sqoop教程 在大數據時代&#xff0c;數據往往分散存儲在各種不同類型的系統中。其中&#xff0c;傳統的關系型數據庫 (RDBMS) 如 MySQL, Oracle, PostgreSQL 等&#xff0c;仍然承載著大量的關鍵業務…