Android Gradle DexOptions

最近在Gradle的dexOptions这部分踩了很多坑,浪费了很多时间。这部分的东西其实官方文档和StackOverFlow上基本都讲清楚了,所以以翻译和记录为主。

Java和Android在编译过程中的区别

当编译一段典型的Java代码时,会产生*.class文件,一个class文件包含标准Java字节码,被我们常见的JVM执行。

Android的编译过程则有所不同,编译器不会产生class文件,而会产生.dex文件(这个大家应该都不陌生了),.dex文件会被Android Virtual Machine (也就是我们常说的dalvik虚拟机)执行,而不是被JVM执行。
所以dexOptions是一个确定java代码转换为Android代码的gradle配置,配置项大概包括以下几个:

1
2
3
4
5
6
7
8
android {
dexOptions {
jumboMode true
incremental true
javaMaxHeapSize "4g"
preDexLibraries true
}
}

然后对这几个配置项大概做一个解释:

boolean incremental

是否对dex开启增量模式配置,这个选项有许多限制和问题,而且有可能不起作用,谨慎使用。

boolean jumboModeal

是否对dex开启特大模式(直接翻译的···)

String javaMaxHeapSize

设置java最大堆内存的值,必须是1024M的倍数

boolean preDexLibraries

是否将引用的库提前转换为dex,开启这个选项可以加速增量模式,但是在clean项目的时候会变慢。

在一般情况下(注意是一般情况),将这几个配置设为true并且增大javaMaxHeapSize的值(在电脑配置允许的情况下),可以显著加快项目build的速度,当然偶尔也会遇到一些奇怪的BUILD FAILED的问题,这个就只能看具体情况了。