在Android手机产品化的过程中,常常遇到集成第三方APK的问题,而需要集成的APK又分为可卸载/不可卸载两类,对于不可卸载的APK,比较简单,只需要将其编译到system.img即可,对于可卸载的APK则稍显复杂。
方法1:集成到userdata.img
该方法十分简单,集成到userdata.img /data/app目录下得apk自然是可以卸载的。但有以下两个问题:
1、版本发布时,userdata.img 一般不参与烧录(在有些型号机是这样的),这样集成到userdata中的apk不会被发布。
2、用户恢复出厂设置后,data分区会被擦除,这些APK消失的无影无踪,不符合出厂预置的要求。
方法2:集成到system.img
在system里面新建一个/system/pre-install目录,将这些APK都放置到该目录下。在系统第一次启动时,将这些APK拷贝到/data/app目录下。
这样用户恢复出厂设置后,系统会认为是第一次启动,会再次拷贝,这些APK不会消失。
而且只有第一次启动才拷贝,卸载的应用会从/data/app中删除,不会凭空出现。
问题1、如何判断是否是第一次启动
PackageManagerService.java中提供了函数isFirstBoot()。
问题2:在何处实现拷贝
该功能跟包管理密切相关,就在PackageManagerService.java开机扫描安装包时,判断isFirstBoot是否为True,如果为True则执行拷贝。