中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

電子政務(wù)網(wǎng)站代碼如何讓產(chǎn)品吸引顧客

電子政務(wù)網(wǎng)站代碼,如何讓產(chǎn)品吸引顧客,佛山微網(wǎng)站建設(shè)哪家專業(yè),ckplayer 視頻網(wǎng)站文章目錄 前言一、PMS 啟動流程二、APK 安裝流程三、APK 卸載流程四、權(quán)限管理靜態(tài)權(quán)限動態(tài)權(quán)限 五、 數(shù)據(jù)存儲與一致性六、 PMS 的安全性策略1、權(quán)限檢查2、簽名認(rèn)證3、動態(tài)權(quán)限管理4、應(yīng)用安裝驗證5、保護系統(tǒng)目錄 七、PMS 調(diào)試方法總結(jié) 前言 PackageManagerService&#xf…

文章目錄

  • 前言
  • 一、PMS 啟動流程
  • 二、APK 安裝流程
  • 三、APK 卸載流程
  • 四、權(quán)限管理
    • 靜態(tài)權(quán)限
    • 動態(tài)權(quán)限
  • 五、 數(shù)據(jù)存儲與一致性
  • 六、 PMS 的安全性策略
    • 1、權(quán)限檢查
    • 2、簽名認(rèn)證
    • 3、動態(tài)權(quán)限管理
    • 4、應(yīng)用安裝驗證
    • 5、保護系統(tǒng)目錄
  • 七、PMS 調(diào)試方法
  • 總結(jié)


前言

PackageManagerService(簡稱 PMS)是 Android 系統(tǒng)中的核心服務(wù)之一,負(fù)責(zé)應(yīng)用的安裝、卸載、查詢和權(quán)限管理等。它是 Android 應(yīng)用生命周期管理和安全機制的基石。

主要職責(zé):
1、應(yīng)用安裝與卸載
2、靜態(tài)權(quán)限解析與動態(tài)權(quán)限授予
3、應(yīng)用信息查詢
4、系統(tǒng)應(yīng)用的預(yù)加載
5、數(shù)據(jù)存儲與一致性管理


提示:以下是本篇文章正文內(nèi)容,下面案例可供參考

一、PMS 啟動流程

在這里插入圖片描述

PMS 在系統(tǒng)啟動時由 SystemServer 啟動。其核心流程如下:

1、SystemServer 初始化
在 SystemServer 的 startBootstrapServices 方法中,調(diào)用 PackageManagerService.main(),完成 PMS 的創(chuàng)建和初始化。

2、關(guān)鍵方法解析
PackageManagerService.main()

public static PackageManagerService main(Context context, Installer installer, boolean factoryTest) {PackageManagerService pms = new PackageManagerService(context, installer, factoryTest);ServiceManager.addService("package", pms);return pms;
}

這里完成了:
1、PMS 對象的實例化。
2、將 PMS 注冊到 ServiceManager,供其他服務(wù)訪問。

3、掃描已安裝應(yīng)用
調(diào)用 scanDirLI 方法掃描 /system/app/data/app 等目錄,加載所有已安裝的應(yīng)用包信息,并存儲到內(nèi)存和文件中(如 packages.xml)。

二、APK 安裝流程

APK 的安裝是 PMS 最重要的功能之一。從用戶觸發(fā)安裝到系統(tǒng)完成更新的完整流程如下:

1、入口方法 應(yīng)用安裝請求通過 PackageInstaller 模塊發(fā)起,最終調(diào)用 installPackageAsUser 方法。

public void installPackageAsUser(String originPath, InstallParams params, int userId) {mHandler.post(new InstallParams(originPath, params, userId));
}

此處將安裝請求交給 InstallParams 處理。

2、核心處理邏輯在 InstallParams 的 handleStartCopy 方法中,執(zhí)行以下步驟:

  • 解析 APK 文件:通過 PackageParser 提取包名、版本等信息。
  • 簽名校驗:調(diào)用 verifySignatures 確保 APK 簽名合法。
  • 寫入系統(tǒng)記錄:調(diào)用 mSettings.addPackage() 更新系統(tǒng)數(shù)據(jù)。
  • 通知系統(tǒng)服務(wù):更新系統(tǒng)組件(如 AMS)和廣播安裝完成事件

3、安裝完成廣播 APK 安裝完成后,PMS 會通過 Intent.ACTION_PACKAGE_ADDED 廣播通知其他組件。

三、APK 卸載流程

APK 卸載的主要流程類似于安裝,但涉及的數(shù)據(jù)清理步驟更多:

1、卸載入口 卸載請求通過 deletePackageAsUser 方法發(fā)起,最終調(diào)用 deletePackageLI 方法。

2、核心處理邏輯
清理應(yīng)用數(shù)據(jù):刪除 /data/app/ 目錄中的文件。
移除系統(tǒng)記錄:從 packages.xml 中刪除相關(guān)記錄。
廣播通知:通過 Intent.ACTION_PACKAGE_REMOVED 通知系統(tǒng)組件和應(yīng)用。

3、特殊情況 如果應(yīng)用包含共享庫或依賴的資源,PMS 會延遲清理,確保不會影響其他應(yīng)用。

四、權(quán)限管理

權(quán)限分為靜態(tài)權(quán)限和動態(tài)權(quán)限,PMS 通過解析 AndroidManifest.xml 和系統(tǒng)調(diào)用提供管理功能。

靜態(tài)權(quán)限

解析過程
在應(yīng)用安裝時,PMS 調(diào)用 PackageParser 的 parsePackage 方法,解析應(yīng)用的 AndroidManifest.xml 文件,提取 標(biāo)簽內(nèi)容。

PermissionInfo permission = new PermissionInfo();
permission.name = parser.getName();
mPermissions.add(permission);

動態(tài)權(quán)限

授予與撤銷
動態(tài)權(quán)限的管理主要通過 grantRuntimePermission 和 revokeRuntimePermission 方法實現(xiàn)。

public void grantRuntimePermission(String packageName, String permissionName, int userId) {enforcePermissionChecks(permissionName);mSettings.grantRuntimePermission(packageName, permissionName, userId);
}

實際場景
例如,在某些即時通訊應(yīng)用中,用戶拒絕麥克風(fēng)權(quán)限會導(dǎo)致無法發(fā)送語音消息。

五、 數(shù)據(jù)存儲與一致性

PMS 的數(shù)據(jù)存儲主要通過以下文件完成:

1、packages.xml 存儲應(yīng)用的基本信息,如包名、路徑、版本等。

<package name="com.example.app" codePath="/data/app/com.example.app-1/base.apk" />

2、runtime-permissions.xml 存儲動態(tài)權(quán)限授予記錄。

<permissions><permission name="android.permission.CAMERA" granted="true" />
</permissions>

3、一致性保障
鎖機制:PMS 使用鎖機制保護并發(fā)讀寫,確保數(shù)據(jù)一致性。
文件備份:在文件更新前,系統(tǒng)會先保存?zhèn)浞莞北?#xff0c;確保異常恢復(fù)能力。

六、 PMS 的安全性策略

PMS 是 Android 安全機制的核心,以下幾點尤為重要:
簽名校驗:通過驗證應(yīng)用簽名確保來源可信。
SELinux 策略:限制 PMS 的文件訪問權(quán)限,增強系統(tǒng)安全性。
權(quán)限隔離:動態(tài)權(quán)限機制確保用戶對敏感操作的控制權(quán)。

源碼介紹

1、權(quán)限檢查

PMS 負(fù)責(zé)管理應(yīng)用的權(quán)限,包括動態(tài)權(quán)限和安裝時權(quán)限。
權(quán)限檢查主要在 checkPermission() 和 checkUidPermission() 方法中完成。
源碼位置:
frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java

@Override
public int checkPermission(String permName, int uid) {final int permission = mSettings.getPermissionLocked(permName, uid);return (permission == PERMISSION_GRANTED) ? PERMISSION_GRANTED : PERMISSION_DENIED;
}

2、簽名認(rèn)證

在應(yīng)用安裝或更新時,PMS 會通過 verifySignatures() 方法驗證簽名是否一致。
防止未授權(quán)的 APK 替換已安裝的 APK。
源碼位置:
frameworks/base/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java

private void verifySignatures(PackageParser.Package pkg, PackageSetting ps)throws PackageManagerException {if (!compareSignatures(pkg.mSigningDetails.signatures, ps.signatures.mSignatures)) {throw new PackageManagerException(INSTALL_FAILED_UPDATE_INCOMPATIBLE,"Signature mismatch for " + pkg.packageName);}
}

3、動態(tài)權(quán)限管理

動態(tài)權(quán)限是通過運行時授予或拒絕的,主要涉及以下文件:
runtime-permissions.xml 用于存儲動態(tài)權(quán)限的狀態(tài)。
相關(guān)代碼示例:
源碼位置:
frameworks/base/services/core/java/com/android/server/pm/permission/PermissionManagerService.java

public void grantRuntimePermission(String packageName, String permissionName, int userId) {// 檢查權(quán)限是否屬于動態(tài)權(quán)限enforceGrantRuntimePermission(packageName, permissionName, userId);// 更新權(quán)限的狀態(tài)mPermissionManager.grantRuntimePermission(packageName, permissionName, userId);
}

4、應(yīng)用安裝驗證

PMS 在應(yīng)用安裝時會調(diào)用 PackageInstaller 驗證 APK 文件的完整性。

相關(guān)代碼包括:
安裝路徑檢查
簽名校驗
安全區(qū)域限制

源碼位置:
frameworks/base/services/core/java/com/android/server/pm/PackageInstallerService.java

private void enforceSystemOrRoot(String message) {if (Binder.getCallingUid() != Process.SYSTEM_UID &&Binder.getCallingUid() != Process.ROOT_UID) {throw new SecurityException(message);}
}

5、保護系統(tǒng)目錄

只有系統(tǒng)權(quán)限的應(yīng)用才可以訪問 /system/app、/system/priv-app 等系統(tǒng)目錄。
安全性檢查代碼:
源碼位置:
frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java

private boolean isPrivilegedApp(String packageName) {PackageSetting ps = mSettings.mPackages.get(packageName);return ps != null && ps.isPrivileged();
}

七、PMS 調(diào)試方法

開發(fā)或調(diào)試 PMS 時,可以使用以下方法:

1、日志調(diào)試
通過 adb logcat | grep PackageManager 查看安裝、卸載日志。

2、源碼定位
關(guān)注 PackageManagerService.java 文件,定位核心方法,如 installPackageAsUser 和 deletePackageLI。

3、文件檢查
檢查 /data/system/packages.xml 和 runtime-permissions.xml 文件內(nèi)容,排查問題。

總結(jié)

PMS 是 Android 系統(tǒng)中連接應(yīng)用、用戶和系統(tǒng)的橋梁,其源碼體現(xiàn)了安裝、卸載、權(quán)限管理的高效性和安全性。通過深挖源碼,理解其核心流程,可以幫助開發(fā)者更好地優(yōu)化和調(diào)試應(yīng)用。

http://www.risenshineclean.com/news/33200.html

相關(guān)文章:

  • 新聞網(wǎng)站怎樣做seo優(yōu)化淘寶運營培訓(xùn)班去哪里學(xué)
  • 汅app下載大全2022昭通網(wǎng)站seo
  • 梧州網(wǎng)站建設(shè)服務(wù)商抖音關(guān)鍵詞推廣怎么做
  • 贛icp南昌網(wǎng)站建設(shè)產(chǎn)品推廣軟文
  • 個體營業(yè)執(zhí)照可以做網(wǎng)站嘛微商軟文
  • 房地產(chǎn)怎么做網(wǎng)站推廣子域名網(wǎng)址查詢
  • 網(wǎng)站建設(shè)品牌公司一鍵優(yōu)化免費下載
  • 搭建一個微信小程序要多少錢快速整站優(yōu)化
  • 響水網(wǎng)站建設(shè)公司外貿(mào)網(wǎng)站推廣服務(wù)
  • 中文網(wǎng)站做google廣告怎么樣北京企業(yè)網(wǎng)站推廣哪家公司好
  • 江都網(wǎng)站建設(shè)外鏈平臺
  • windows系統(tǒng)做ppt下載網(wǎng)站搜索引擎營銷的主要模式
  • 網(wǎng)頁設(shè)計教程孟憲寧課后題答案seo實戰(zhàn)培訓(xùn)王乃用
  • 像芥末堆做內(nèi)容的網(wǎng)站百度上怎么發(fā)布作品
  • 用服務(wù)器ip怎么做網(wǎng)站百度官方推廣
  • php網(wǎng)站開發(fā)最新需求商家聯(lián)盟營銷方案
  • 網(wǎng)站建設(shè)公司價seo營銷軟件
  • 做網(wǎng)站的成本有多少網(wǎng)絡(luò)媒體軟文案例
  • 幫人做網(wǎng)站賺錢小程序開發(fā)制作
  • 南寧建站軟件小廣告公司如何起步
  • 網(wǎng)站備案信息查詢百度小說排行榜2020前十名
  • 怎么做用戶調(diào)研網(wǎng)站軟文
  • 大理網(wǎng)站設(shè)計如何讓百度收錄網(wǎng)址
  • 河南推廣網(wǎng)站的公司怎樣在網(wǎng)上推廣自己的產(chǎn)品
  • 打開汽車之家網(wǎng)頁版網(wǎng)絡(luò)seo外包
  • 怎么做素材網(wǎng)站上海最新政策
  • 2016年做網(wǎng)站好不好qq推廣鏈接生成
  • 網(wǎng)站舉報平臺12315怎樣制作網(wǎng)頁設(shè)計
  • 男人和女人晚上做污污的視頻大網(wǎng)站ip子域名大全
  • 企業(yè)查詢平臺免費廣州網(wǎng)站優(yōu)化頁面