在android Build Tools 21.1.1之后,增加了新的编译工具Jack 和Jill。要使用Jack还需要android studio 2.1版本以上。
Jack工作原理
Legacy javac toolchain:
javac (.java → .class) → dx (.class → .dex)New Jack toolchain:
Jack (.java → .jack → .dex)
编译产生的中间文件为jack,不过从java到dex的编译工程通过jack一个工具就完成了,jar和aar会经过Jill工具生成jack文件,同java文件生成的jack文件一起被编译为dex,在从jack到dex的过程中,会进行混淆操作
Jack的好处
1.可以支持部分Java 8的语法:
Lambda expressions (also available on API level 23 and lower)
Method References (also available on API level 23 and lower)
2.可以加快编译速度
配置使用Jack
android {
...
defaultConfig {
...
jackOptions {
enabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
向jack传入参数
android {
...
defaultConfig {
...
jackOptions {
enabled true
additionalParameters("jack.incremental" : "true")
}
}
...
}
jack的参数列表可以通过下面的命令获得
java -jar <SDK>/build-tools/<build-tools-version>/jack.jar --help-properties
已知的问题
1.instant run不能使用
2.需要使用class才能工作的工具不能使用了
- 比如Jacoco,AOP工具