日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Android 開機應用掃描相關總結

瀏覽:13日期:2022-09-18 16:01:44
目錄本文的內容PkMS怎么知道apk的位置系統應用和普通應用的區別應用掃描過程scanDirLI()addForInitLI()scanPackageNewLI()scanPackageOnlyLI()reconcilePackagesLocked()commitReconciledScanResultLocked()commitPackageSettings()掃描完成之后需要做的事情本文的內容 PkMS是怎么知道apk的位置 系統應用和普通應用的區別 應用掃描的過程以及應用信息的保存 PkMS怎么知道apk的位置

答案是按照路徑,對于手機用戶安裝應用都是放在/data/app,對于系統應用則是分布各個分區中,可以簡單的認為是目錄,/data就是data分區,以下的分區都會被掃描,并且只會掃描priv-app和app目錄:

system分區下的priv-app,app目錄/system/priv-app, /system/app product分區 odm分區 oem分區 vendor分區 system_ext分區 data分區,最后掃描

不過這些分區都執行不是特別嚴格,沒涉及到gms測試的基本都不怎么管,那么apk是存在什么地方呢?例如:Settings就放在/system_ext/priv-app/Settings/Settings.apk,其他分區都是類似的,下面分析應用掃描過程還會說到。這里解釋一下,為什么要分priv-app和app兩個目錄進行掃描? priv-app意思是這個目錄里面都是privileged應用,可以獲取privilege權限,權限的定義frameworks/base/core/res/AndroidManifest.xml中找到

系統應用和普通應用的區別

答案還是路徑,data分區內的應用是普通應用,其他分區安裝的應用都是系統應用,系統應用均不可卸載

應用掃描過程scanDirLI()

scanDirLI的幾個參數說明一下,

scanDir,應用目錄的集合,以上面Settings為例,目錄是/system_ext/priv-app scanFlags,掃描的標志,當為系統應用時,會加上SCAN_AS_SYSTEM標志,如果是priv-app目錄還要加上SCAN_AS_PRIVILGED packageParser,這個就是解析AndroidManifest.xml主要工具類 executorService,生產者線程

scanDirLI的邏輯比較簡單,

以上面/system_ext/priv-app為例,遍歷目錄下的每個目錄和apk 使用ExecutorService(線程池)對所有目錄和apk進行解析,詳細看PkMS解析package指南 獲取ParsedPackage并進行調用addForInitLI() addForInitLI()

邏輯相當的復雜,考慮情況也要很多,有些自己也沒搞懂,只挑能說的說一下

1.首先重命名包名的邏輯,在PkMS當中所有的package都是按照包名作為唯一的主鍵值,那么就可能出現應用需要更換包名的情況,PkMS給出解決方案是加上<original-package android:name='com.android.oldpackagename' />指明需要覆蓋安裝的包名,但是這樣就需要考慮到諸多情況了

包名修改多次怎么辦 之前有安裝過老包名的應用的處理情況 之前未安裝過老包名的應用的處理情況 之前安裝過當前包名的應用的處理情況

那么PkMS是怎么做的呢?

設計了一個originalPackages表示之前原始package,當遇到original-package時,就將包名加入到originalPackages當中,代碼如下

//ParsingPackageUtils.parseOriginalPackage()String orig = sa.getNonConfigurationString( R.styleable.AndroidManifestOriginalPackage_name, 0);if (!pkg.getPackageName().equals(orig)) { if (pkg.getOriginalPackages().isEmpty()) {pkg.setRealPackage(pkg.getPackageName()); } pkg.addOriginalPackage(orig);} 然后在addForInitLI()中根據realPkgName獲取originalPkgSetting 接下來判斷是否要覆蓋安裝應用

不過我感覺里面還是有些bug,似乎只是為了用gms應用替換AOSP里面的應用(如:PackageInstaller和PermissionController)專門設計的,并不具備普遍性,安裝的應用及時加了標簽也還是會被認為是兩個應用

2.對于覆蓋安裝系統應用的data區應用進行處理,什么是覆蓋安裝系統應用?即系統應用有更新,可以通過應用商店下載覆蓋安裝,但是并不會去卸載系統應用,而是disable系統應用,例如:Google的gms應用都是如此

如果安裝的應用出現問題了,重新enable被disabled應用 如果是系統更新的應用,則需要掃描disabled系統應用,因為可能會有OTA升級導致系統應用更新apk的情況,調用scanPackageOnlyLI(),進行掃描,后面還會分析 接下來是根據disabled系統應用和安裝應用的版本號,判斷是否需要重新使用系統應用

3.處理簽名,對于安裝的應用,必須要簽名

確認是否需要重新簽名,對于非系統應用來說,無需重新收集,這部分AOSP壓根沒寫,注釋里面的第二條還沒實現

// Verify certificates against what was last scanned. Force re-collecting certificate in two// special cases:// 1) when scanning system, force re-collect only if system is upgrading.// 2) when scannning /data, force re-collect only if the app is privileged (updated from// preinstall, or treated as privileged, e.g. due to shared user ID).final boolean forceCollect = scanSystemPartition ? mIsUpgrade : PackageManagerServiceUtils.isApkVerificationForced(pkgSetting); 是否跳過簽名驗證,這個是覆蓋安裝時候使用

// Full APK verification can be skipped during certificate collection, only if the file is// in verified partition, or can be verified on access (when apk verity is enabled). In both// cases, only data in Signing Block is verified instead of the whole file.// TODO(b/136132412): skip for Incremental installationfinal boolean skipVerify = scanSystemPartition || (forceCollect && canSkipForcedPackageVerification(parsedPackage));collectCertificatesLI(pkgSetting, parsedPackage, forceCollect, skipVerify);

4.還要處理一下第三步的反方向,即一開始有個安裝的應用(data分區),而后OTA升級有添加了該系統應用(system或其他分區),分為三種情況進行討論

簽名不相同,則卸載data分區的應用 如果系統應用的版本號更高,則移除data分區的應用,但保留應用的數據 如果系統應用的版本號更低,則將shouldHideSystemApp設置為true,也就是將在下面disable系統應用

5.調用scanPackageNewLI()繼續掃描

6.調用reconcilePackagesLocked()進行一致化處理

7.調用commitReconciledScanResultLocked()

scanPackageNewLI()

需要注意的是這個方法不僅僅是開機掃描的時候用,在安裝應用的時候也是執行的

再次處理重命名包名,這個應該和安裝有關系,我測試的時候是覆蓋安裝系統應用有效,普通應用無法生效,會被認為是兩個應用 調用adjustFlags()重新調整scanFlags,分為以下幾種情況 重命名包名應用或者覆蓋安裝的應用是系統應用,scanFlags添加上SCAN_AS_SYSTEM以及可能的其他flags如果sharedUserId是包含了privilege應用,則正在掃描的應用也要加上SCAN_AS_PRIVILEGED 獲取SharedUserSetting,這個在addForInitLI()獲取過一次,是為了掃描disabledPkgSetting獲取的 構建ScanRequest并且調用scanPackageOnlyLI()獲取ScanResult scanPackageOnlyLI()

這部分主要的邏輯是更新packageSetting和nativelibrary的解析

確定是否需要獲取abi(needToDeriveAbi),如果packageSetting,如果應用已安裝,則無需更改cpuAbi,如果未安裝,則需要解析native庫 獲取<uses-static-library>標簽,這個我不知道是干嘛的,目前還沒遇到這種標簽 更新或創建新的PackageSetting,創建的情況有兩種,首次安裝應用或者是恢復出廠開機 根據第一步獲取的needToDeriveAbi獲取abi的類型并設置到PackageSetting中,另外就是要解析apk中的native so庫,并獲取對應so庫的路徑,這里有個SCAN_NEW_INSTALLflag,這個是給安裝用的,開機scan是不會有此問題 設置安裝的時間戳,主要是第一次安裝和當前安裝,目前不知道這個屬性的用處 創建ScanResult并返回 reconcilePackagesLocked()

先說一下幾個參數:

ReconcileRequest,放置需要的參數,allPackages->mPackages, scannedPackages->scanPackageOnlyLI()返回的ScanResult,sharedLibrarySource->mSharedLibraries解析之后才會進行push KeySetManagerService簽名管理服務

reconcilePackagesLocked()也會被安裝應用的流程調用,所以ReconcileRequest的參數有些是為了給它們用的,這個方法的主要功能就是為了校驗簽名

首先檢查簽名是否需要更新ksms.shouldCheckUpgradeKeySetLocked(signatureCheckPs, scanFlags),這個不太能理解,簽名是可以更新的? 調用verifySignatures()進行校驗簽名 最后生成ReconciledPackage并返回 commitReconciledScanResultLocked()

這里面也是安裝應用和掃描應用同時都會調用的方法,先只看掃描的情況

處理PackageSetting,這部分邏輯是和安裝應用是混在一起的,主要包括 SharedUserSetting, 這個一般只有覆蓋安裝的時候如果sharedUserId變了,要重新賦值重命名包名的邏輯,安裝重命名包名的時候會更新packages.xml文件 將PackageSetting寫入package-restrictions.xml,里面主要存儲的是disabled和enabled四大組件 最后調用commitPackageSettings()進行最后一步處理 commitPackageSettings() 判斷是不是有廠商自定義的ResolveActivity(config_customResolverActivity屬性),如果有則調用setUpCustomResolverActivity()設置ResolveActivity為自定義的,ResolveActivity就是處理未指定的android.action.View的 處理ResolveActivity,如果沒有的話指定為framework的ResolveActivity 更新SharedLibraries,這部分還不太熟悉 檢查是否需要frozen應用,如果需要但沒有frozen則退出安裝,有以下幾種情況無需frozen應用 SCAN_BOOTING,開機的時候,因為這時沒有應用啟動的了SCAN_DONT_KILL_APP,安裝不殺死應用,這個一般要么在PkMS中指定,要么在adb安裝的時候指定SCAN_IGNORE_FROZEN,忽略FROZEN,這個連adb也沒有指定選項,可能是代碼遺留 調用mSettings.insertPackageSettingLPw(),這里并非是更新packages.xml的地方,只是將pkgSetting,放到Settings.mPackages中 將AndroidPackage放到mPackages中 更新KeySetManagerService的應用信息,這是一個管理簽名的服務 添加自定義的Permission和PermissionGroup到PermissionManagerService中 添加保護廣播,但這個并非給安裝應用使用,而是系統應用,例如:teleservice等 對于老的package或者Permission更新的需要對于申請了這些權限的應用更新權限,注意,這些權限也是由應用定義的 掃描完成之后需要做的事情 清除掉已刪除的系統應用和disable原本就disable的應用 調用PermissionManagerService.updateAllPermissions()更新權限,這部分是在所有應用掃描完成之后才執行 創建應用數據存儲的目錄,注意這里只是針對system core應用(如SystemUI)做的操作,data下的應用由于有多用戶的存在,每個data應用是針對單個用戶的, 最終將PackageSetting和permission以及簽名的fingerprint寫入到packages.xml當中,這里這樣設計我覺得應該是怕中途關機,這樣一次性寫入所有的信息可以盡量減少寫了一半關機的情況

以上就是Android 開機應用掃描相關總結的詳細內容,更多關于Android 開機應用掃描的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲欧美一区在线| 国产不卡人人| 激情欧美一区二区三区| 亚洲电影有码| 久久影视一区| 亚洲高清av| 9色精品在线| 91九色精品| 99国产精品视频免费观看一公开 | 亚州国产精品| 日韩福利视频一区| 国产精久久久| 日韩综合在线| 国产v综合v| 国产视频亚洲| 97久久亚洲| 国产一区福利| 亚洲午夜电影| 亚洲精品无播放器在线播放| 日本99精品| 福利欧美精品在线| 日韩理论片av| 91久久久久| 91亚洲无吗| 国产一区二区三区精品在线观看| 日韩精品永久网址| 午夜免费一区| 欧美亚洲福利| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 四虎国产精品免费久久| 日本免费在线视频不卡一不卡二| 国产欧美日韩精品一区二区免费| 精品香蕉视频| 黄色欧美日韩| 亚州精品视频| 精品一区二区三区免费看| 久久精品亚洲人成影院| 亚洲午夜免费| 日韩av有码| 三级欧美韩日大片在线看| 欧美日本三区| 色综合www| 日韩一区网站| 黄色在线观看www| 亚洲伊人精品酒店| 国产福利91精品一区二区| 亚洲一区亚洲| 精品一区二区三区的国产在线观看 | 亚洲精品中文字幕99999| 免费视频一区二区三区在线观看| 欧美福利专区| 国产精品极品在线观看| 久久网站免费观看| 91成人在线| 伊人精品一区| 国产精品一区二区99| 欧美 日韩 国产精品免费观看| 日韩av不卡一区二区| 亚洲精品国产嫩草在线观看 | 国产欧美一区二区色老头| 四虎影视精品| 日本aⅴ免费视频一区二区三区| 日韩毛片视频| 久久精品xxxxx| 午夜欧美理论片| 国产精品久av福利在线观看| 日韩一级欧洲| 日韩国产一区二区三区| 日本午夜精品一区二区三区电影| 亚洲二区视频| 成人亚洲精品| 国产三级一区| 日韩在线a电影| 久久久久久久久丰满| 麻豆国产一区| 久久国产福利| 日产精品一区二区| 日韩不卡一区二区三区| 夜久久久久久| 欧洲在线一区| 成人日韩av| 国产精品亚洲二区| 婷婷成人av| 黄页网站一区| 欧美精选视频一区二区| 国产精品国产三级在线观看| 中文字幕日韩亚洲| 夜夜嗨av一区二区三区网站四季av| www.九色在线| 欧美aaaaaa午夜精品| 午夜亚洲福利| 亚洲精品电影| 久久狠狠婷婷| 香蕉成人av| 中文在线а√天堂| 精品三级av| 国产精品久久777777毛茸茸| 日韩精品亚洲专区| 亚洲免费毛片| 国产一级久久| 日韩亚洲在线| 欧美日韩国产高清电影| www.九色在线| 国产 日韩 欧美 综合 一区| 国产精品视频一区二区三区四蜜臂 | 99久久激情| 国产aa精品| 精品国产午夜肉伦伦影院 | 成人在线超碰| 成人精品国产亚洲| 国产精品va视频| 青草久久视频| 欧美三级第一页| 97久久超碰| 国产欧美日韩| 欧美私人啪啪vps| 国产亚洲精品精品国产亚洲综合| 久久精品在线| 精品一区二区三区四区五区| 国产日产高清欧美一区二区三区| 日本h片久久| 欧美午夜三级| 久久99蜜桃| 精品一区二区三区中文字幕| 动漫av一区| 国产成人精品福利| 亚洲黄色免费看| 精品免费av在线| 一区二区三区视频免费观看| 欧美久久精品一级c片| 免费精品国产的网站免费观看| 国产综合欧美| 日韩专区在线视频| 欧美偷窥清纯综合图区| 国产精品a级| 97精品中文字幕| 久久久一二三| 国产精品丝袜xxxxxxx| 在线观看亚洲精品福利片| 日韩成人午夜精品| 国产精品igao视频网网址不卡日韩 | 理论片午夜视频在线观看| 中文字幕在线官网| 精品日韩毛片| | 日韩三级一区| 国产精品videossex| 亚洲国产成人二区| 婷婷精品视频| 爽好多水快深点欧美视频| 日韩av一二三| 国产成人免费视频网站视频社区| 欧产日产国产精品视频| 亚洲永久字幕| 国产亚洲一卡2卡3卡4卡新区| 国产在线一区不卡| 亚洲激情久久| 日韩在线麻豆| 九九久久国产| 五月婷婷六月综合| 日韩欧美中文字幕一区二区三区| 国产精品a级| 91精品一区国产高清在线gif| 国产视频一区在线观看一区免费| 亚洲日本三级| 高清久久精品| 麻豆亚洲精品| 欧美xxxx性| 伊人久久大香线蕉av超碰演员| 日韩福利在线观看| 成人日韩在线| 亚洲日本欧美| 色在线中文字幕| 日韩在线成人| 日韩免费福利视频| 无码日韩精品一区二区免费| 风间由美中文字幕在线看视频国产欧美| 欧美日韩一二| 日本色综合中文字幕| 国内精品麻豆美女在线播放视频| 午夜久久tv| 免费看一区二区三区| 午夜国产一区二区| 久久不见久久见免费视频7| 亚洲女同中文字幕| 欧美国产不卡| 老色鬼久久亚洲一区二区| 国产一区二区久久久久| 美女黄网久久| av日韩中文| 欧美中文高清| 日韩视频一区| 高清一区二区三区av| 日本伊人久久| 久久伦理在线| 麻豆精品av| 亚洲精品九九| 在线成人直播| 国产999精品在线观看 | 中文字幕av一区二区三区四区|