国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

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

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

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

文章目錄

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


前言

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

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


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

一、PMS 啟動(dòng)流程

在這里插入圖片描述

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

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 對(duì)象的實(shí)例化。
2、將 PMS 注冊(cè)到 ServiceManager,供其他服務(wù)訪問(wèn)。

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

二、APK 安裝流程

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

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

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

此處將安裝請(qǐng)求交給 InstallParams 處理。

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

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

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

三、APK 卸載流程

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

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

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

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

四、權(quán)限管理

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

六、 PMS 的安全性策略

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

源碼介紹

1、權(quán)限檢查

PMS 負(fù)責(zé)管理應(yīng)用的權(quán)限,包括動(dòng)態(tài)權(quán)限和安裝時(shí)權(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)用安裝或更新時(shí),PMS 會(huì)通過(guò) verifySignatures() 方法驗(yàn)證簽名是否一致。
防止未授權(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、動(dòng)態(tài)權(quán)限管理

動(dòng)態(tài)權(quán)限是通過(guò)運(yùn)行時(shí)授予或拒絕的,主要涉及以下文件:
runtime-permissions.xml 用于存儲(chǔ)動(dòng)態(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)限是否屬于動(dòng)態(tài)權(quán)限enforceGrantRuntimePermission(packageName, permissionName, userId);// 更新權(quán)限的狀態(tài)mPermissionManager.grantRuntimePermission(packageName, permissionName, userId);
}

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

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

相關(guān)代碼包括:
安裝路徑檢查
簽名校驗(yà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、保護(hù)系統(tǒng)目錄

只有系統(tǒng)權(quán)限的應(yīng)用才可以訪問(wèn) /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)試方法

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

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

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

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

總結(jié)

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

http://aloenet.com.cn/news/33200.html

相關(guān)文章:

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