为什么我们需要将* .odex文件放在/ system / app下,即使我们已经有/ data / dalvik-cache了?

时间:2015-05-26 07:28:23

标签: android optimization virtual-machine loader dalvik

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

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

phone.odex放在/system/app

是完全多余的吗?

1 个答案:

答案 0 :(得分:5)

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

如果.apk和.odex文件不同步,系统将无法覆盖/system/app中的.odex,并会尝试在/data/dalvik-cache中生成正确的版本。通常这会失败,因为当.apk和.odex成对传递时,.apk不包含.dex文件(这样做会多余)。

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

预计不会找到冗余的.odex,并建议在某些时候设备的phone.apk包含.dex且与.odex不匹配。