dex、vdex、.odex与.oat

源代码 2024-9-17 01:39:44 101 0 来自 中国
转自:https://blog.csdn.net/linxinfa/article/details/107669242
dex、vdex、.odex与.oat文件先容
1、dex文件
在我们写Java代码的时间,天生的文件是.java文件。
对于PC上的java捏造机(JVM)运行的是.class。
.java文件转成.class文件,需要jdk工具,转换下令:
javac xxxx.java
关于JVM捏造机
为了使代码宁静台无关,JAVA开辟了 JVM,即 Java 捏造机。它为每一个平台开辟一个 JVM,也就意味着 JVM 是宁静台干系的。Java 编译器将 .java 文件转换成 .class文件,也就是字节码。终极将字节码提供给 JVM,由 JVM 将它转换成呆板码。
在Android端,Android上的Davlik捏造机是运行.dex。以是还得将.class转成dex文件,即dex文件就是Android Dalvik捏造机运行的步伐。
.class转成dex文件 需要使用dx.bat工具,dx.bat工具在Android SDK中build-tools目次中可以找到,转换下令:
dx --dex --output = C:\output.dex C:\test
1
此中C:\output.dex表示输出文件,C:\test表示原文件的路径名。
关于Dalvik捏造机
Dalvik是Google公司自己计划用于Android平台的捏造机,.dex格式是专为Dalvik计划的一种压缩格式,恰当内存和处理惩罚器速率有限的体系。Dalvik 颠末优化,允许在有限的内存中同时运行多个捏造机的实例,而且每一个Dalvik 应用作为一个独立的Linux 历程实行。独立的历程可以防止在捏造机瓦解的时间全部步伐都被关闭。
很长时间以来,Dalvik捏造机不绝被用户求全谴责为拖慢安卓体系运行速率不如IOS的根源。
2014年6月25日,Android L 正式亮相于召开的谷歌I/O大会,Android L 改动幅度较大,谷歌将直接删除Dalvik,取代它的是传闻已久的ART。
关于ART
Dalvik 使用 JIT(Just in time)编译,而 ART 使用 AOT(Ahead of time)编译。Android 7.0 向 ART 中添加了一个 just-in-time(JIT)编译器,如许就可以在应用运行时连续的进步其性能。
ART 和 Dalvik 一样使用的是雷同的 DEX 字节码。编译好的应用如果使用 ART 在安装时需要额外的时间用于编译,同时还需要更多的空间用于存储编译后的代码。
由于 ART 直接运行的是应用的呆板码(native execution),它所占用的 CPU 资源要少于 使用 JIT 编译的 Dalvik。由于占用较少的 CPU 资源也就斲丧更少的电池资源。
关于JIT (Just In Time )
使用 Dalvik JIT 编译器,每次应用在运行时,它及时的将一部分 Dalvik 字节码翻译成呆板码。在步伐的实行过程中,更多的代码被被编译并缓存。由于 JIT 只翻译一部分代码,它斲丧的更少的内存,占用的更少的物理存储空间。
关于AOT(Ahead Of Time)
ART 内置了一个 Ahead-of-Time 编译器。在应用的安装期间,他就将 DEX 字节码翻译成呆板码并存储在装备的存储器上。这个过程只在将应用安装到装备上时发生。由于不再需要 JIT 编译,代码的实行速率要快得多。
通例的反编译dex流程:
1、拿到apk文件,然后解压 ,得到 class.dex 文件
2、用dex2jar 把 class.dex 还原成 classes-dex2jar.jar 文件
3、用 jd-gui.exe 把 classes-dex2jar.jar 文件打开,就可以看到源码了。
2、vdex文件
在讲odex之前,需要先讲vdex(Android O开始参加的)
package直接转化的 可实行二进制码 文件:
1.第一次开机就会天生在/system/app/<packagename>/oat/下;
2.在体系运行过程中,捏造机将其 从“/system/app”下 copy到“/data/davilk-cache/”下
为何要搞出个vdex文件
目的不是为了提拔性能,而是为了克制不须要的验证Dex 文件正当性的过程,比方初次安装时举行dex2oat时会校验Dex 文件各个section的正当性,这时间使用的compiler filter 为了照顾安装速率等方面,并没有接纳全量编译,当app盘启动后,运行一段时间后,网络了充足多的jit 热门方法信息,Android会在配景重新举行dex2oat, 将热门方法编译成呆板代码,这时间就不消再重复做验证Dex文件的过程了,
3、odex文件
odex是优化版的dex。
在Android N之前,Dalvik捏造机实行步伐dex文件前,体系会对dex文件做优化,天生可实行文件odex,保存到data/dalvik-cache目次,末了把apk文件中的dex文件删除。
在Android O之后,odex是从vdex这个文件中 提取了部分模块天生的一个新的 可实行二进制码 文件 , odex从vdex中提取后,vdex的巨细就镌汰了。具体过程:
1.第一次开机就会天生在/system/app/<packagename>/oat/下
2.在体系运行过程中,捏造机将其 从“/system/app”下 copy到 “/data/davilk-cache/”下
3.odex + vdex = apk的全部源码 (vdex并不是独立于odex的文件,odex + vdex才代表一个apk)
4、oat文件
ART捏造机使用的是oat文件,oat文件是一种Android私有ELF文件格式,它不但包罗有从DEX文件翻译而来的当地呆板指令,还包罗有原来的DEX文件内容。APK在安装的过程中,会通过dex2oat工具天生一个OAT文件。对于APK来说,oat文件现实上就是对odex文件的包装,即oat=odex,而对于一些framework中的一些jar包,会天生相应的oat尾缀的文件,如system@framework@boot-telephony-common.oat。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-22 17:15, Processed in 0.193608 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表