android - 为什么我们已经有了/data/dalvik-cache,还要把*.odex文件放在/system/app下?

标签 android optimization virtual-machine loader dalvik

例如,我们在/system/app下有phone.apkphone.odex。根据一些非官方文档,phone.odex 用于加快加载应用程序的过程。但是,为什么我们不直接将 phone.odex 放在 /data/dalvik 下呢?

更奇怪的是:在/data/dalvik下存在一个名为system@app@phone@classes.dex的文件,当应用加载时,是哪个优先加载,/system/app/phone.odex or /data/dalvik/system@app@phone@classes.dex?

phone.odex放在/system/app下是不是完全多余了?

最佳答案

/system/app 目录在普通(非开发人员)设备上是只读的,并且仅在系统收到更新时更新。 /system/app/*.odex 的要点是 .odex 文件可以作为系统更新的一部分提供,因此不必在第一次更新后启动时生成,并且不会占用/data 分区上的空间。

如果 .apk 和 .odex 文件不同步,系统无法覆盖 /system/app 中的 .odex,并会尝试在 中生成正确的版本>/数据/达尔维克缓存。通常这会失败,因为当 .apk 和 .odex 成对交付时,.apk 不包含 .dex 文件(这样做是多余的)。

首先扫描 /system/app 中的 .odex,因此它本质上具有优先权。

发现多余的 .odex 不是预期的,这表明设备在某个时候有一个 phone.apk,其中包含一个 .dex 并且与 .odex 不匹配。

关于android - 为什么我们已经有了/data/dalvik-cache,还要把*.odex文件放在/system/app下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30452182/

相关文章:

java - 计算直线与 x 轴之间的角度

iphone - iPhone 上两个数组之间按位与的最快方法?

python - 如何优化编辑距离代码?

powershell - Powershell 上的 Azure 虚拟机大小信息

azure - 更改 Azure 存储帐户中的磁盘类型

android - ExpandableListView的ScrollView和RelativeLayout滚动问题

android - 基于图像的亮/暗状态栏

optimization - 有条件地添加到 HashMap 的最佳方法,查找次数越少越好?

azure - 将azure虚拟机操作系统从windows更改为ubuntu。我如何更改操作系统?

android - 在 react-native 中取消获取请求