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 下