DEX编译是什么?Android Studio新手求问DEX与DX编译的区别
嘿,作为Android Studio新手,刚接触这些编译术语确实容易懵,我来给你讲明白DEX编译和DX编译的区别~
什么是DEX编译?
首先,DEX是Dalvik Executable的缩写,它是Android系统专属的可执行文件格式。我们写的Java/Kotlin代码,首先会被编译成普通的.class文件(和Java SE程序一样),但Android的Dalvik或者ART虚拟机没法直接运行.class文件,这时候就需要通过DEX编译,把一堆.class文件(或者Jar、AAR包)转换成单个或多个.dex文件,这样Android设备才能执行你的App代码。
DEX编译与DX编译的区别
其实你提到的“DX编译”,指的是用DX工具来完成DEX转换的过程,而现在我们说的“DEX编译”更多是指Google后来推出的新一代工具(比如D8、R8)。二者的核心差异主要有这些:
- 编译效率:DX是个老工具了,处理大项目时编译速度特别慢,尤其是代码量多的时候,得等好久。而新一代的DEX编译器(比如D8)用了更高效的字节码转换算法,编译速度能提升不少,日常开发能省不少时间。
- DEX文件体积:DX生成的
.dex文件没什么优化,体积偏大。新的DEX编译器会对字节码做精简优化,生成的文件更小,能直接降低APK的大小,对用户下载和安装都更友好。 - Java新特性支持:DX对Java 8及以上的特性(比如Lambda表达式、接口默认方法)支持很差,以前得装Retrolambda这类插件才能兼容。而新的DEX编译器原生支持Java 8+的所有特性,不用额外折腾配置。
- 维护状态:DX已经被Google官方废弃了,不再更新维护,也不会适配新的Android系统或Java版本。而D8/R8是现在官方主推的工具,一直在迭代优化,支持最新的Android特性和语言版本。
- 使用方式:在Android Studio 3.1里,DX还是默认的工具,你得手动在gradle配置里加
android.enableD8=true才能开启新的DEX编译;而现在的Android Studio版本已经默认启用D8/R8了,基本没人再用DX了。
给你个小建议:作为新手,不用花太多精力在DX上,直接用现在默认的DEX编译工具就行,效率更高,也能少踩很多坑~
内容的提问来源于stack exchange,提问作者Ravi Patil




