1.原始方案:
1.創建 “/system/third_app”文件夾
2. 預置第三方APP的Android.mk 中 LOCAL_MODULE_PATH = “/system/third_app”
3. PKMS 源碼中添加 copy 代碼:
(1): isFirstBoot() 判斷第一次開機之後;
(2):scanDirLI() 掃描app之前
(3): copy 的路徑是 “/system/third_app” ---> "/data/app"
----:question : PKMS 掃描/system/app 和 /data/app 下的應用的區別在於調用scaDirLI()時,/system/app 會傳下去“PackageParser.PARSE_IS_SYSTEM” 的parseFlag 而/data/app 傳下去的parseFlag 是null
-----: 直接調用FileUtils.copyFile 進行copy
缺點:
1.copy到data/app下會有兩份apk,佔空間;
*****
應用放在/system/third_app/<PackageName>/XXXX.apk
則掃描時 生成的lib庫文件 和 dex 文件的路徑就在/system/third_app/<PackageName>/lib/**** 和 /system/third_app/<PackageName>/oat/**** 都是在/system 下面,但是scanDirLI時 沒有傳SYSTEM_APP 的 parser_flag,所以系統不認爲其爲system_app ,這個app 的進程就無法訪問/system 下的文件。
所以處理方法爲,創建lib 和 dex 文件時,掃描的是直接爲XXXX.apk 文件 ,而不是system/third_app/<PackageName>/ 這個目錄,這樣生成的lib 庫 和 dex 文件 就不在/system 下 ,而是在/data 下