android
安装一些应用程序后,我发现它将在智能手机中更改为odex
文件(不是apk
)。它是如何发生的?谁能教我,我对此很感兴趣。
Answers:
该博客文章大部分是正确的,但并不完整。要全面了解odex文件的功能,您必须对应用程序文件(APK)的工作方式有所了解。
应用程序基本上是美化的ZIP存档。Java代码存储在名为classes.dex的文件中,该文件由Dalvik JVM解析,并且已处理的classes.dex文件的缓存存储在电话的Dalvik缓存中。
odex基本上是应用程序的classes.dex的预处理版本,可为Dalvik准备执行。对应用程序进行odex处理后,将从APK存档中删除classes.dex,并且不会将任何内容写入Dalvik缓存。一个未进行odex处理的应用程序最终获得了classes.dex文件的2个副本-打包在APK中,一个打包在Dalvik缓存中。由于Dalvik必须提取并处理classes.dex文件,因此首次启动也需要花费一些时间。
如果您要构建自定义ROM,则最好同时对框架JAR文件和常规应用程序进行odex处理,以最大程度地增加用户安装的应用程序的内部存储空间。如果要主题化,则只需deodex->应用主题-> reodex->发布。
要实际排毒,请使用small和baksmali:
此博客文章介绍了ODEX文件的内部结构:
什么是ODEX文件?
在Android文件系统中,应用程序以扩展名.apk打包。这些应用程序包或APK包含某些.odex文件,其假定的功能是节省空间。这些“ odex”文件实际上是在启动之前已优化的应用程序部分的集合。这样做可以加快启动过程,因为它会预加载应用程序的一部分。另一方面,这也使破解这些应用程序变得困难,因为一部分代码已在执行之前被提取到另一个位置。
APKs contain certain .odex files
吗?
艺术
在ART中,.odex
文件包含:
包含APK中方法的AOT编译代码。
根据文档:http ://web.archive.org/web/20170909233829/https: //source.android.com/devices/tech/dalvik/configure
此外,它们似乎是常规的共享库,因为如果您有任何应用程序,请检查:
file /data/app/com.android.appname-*/oat/arm64/base.odex
它说:
base.odex: ELF shared object, 64-bit LSB arm64, stripped
并且aarch64-linux-gnu-objdump -d base.odex
似乎可以正常工作,并提供了一些有意义的分解(还包括一些垃圾处理部分)。