开启AB升级方案的项目,因为很多需要升级的镜像都有两份,所以存储空间比较浪费。为缓解此问题,有个针对odex的优化方案。
编译版本会生成两个system镜像:system.img和system_other.img,其中,system_other.img中存储的就是odex文件,这样system.img就能小很多,意味着可以为system分区划分较小的空间。
在首次开机时,假设system.img镜像存储在A slot,那么此时的B slot是闲置的。所以可以把system.img刷入A slot的system分区,把system_other.img刷入B slot的system分区。在首次开机时,再把system_other.img中的odex文件拷贝到data分区。
https://source.android.com/devices/tech/dalvik/configure.html#other_odex
开机后copy odex文件的相关代码
/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
public PackageManagerService(Context context, Installer installer,
boolean factoryTest, boolean onlyCore) {
...
// 首次开机时才执行
if (!mOnlyCore && mFirstBoot) {
requestCopyPreoptedFiles();
}
...
}
/**
* Requests that files preopted on a secondary s

本文介绍了一种针对AB升级方案的odex优化方法,通过将odex文件存储在system_other.img,减小system.img大小,节省存储空间。首次开机时,odex文件会被复制到data分区,由init进程执行,通过sys.cppreopt属性与PackageManagerService交互。
最低0.47元/天 解锁文章
887

被折叠的 条评论
为什么被折叠?



