说明:基于JACK编译器配置,有部分改动
Android M开始,Google默认使用JACK编译器,对于JACK编译器的编译流程下面这篇文章写的很详细:
http://taobaofed.org/blog/2016/05/05/new-compiler-for-android/
这里主要谈一下JACK编译器的配置。
1. JACK编译器三种模式
JACK编译器有三种模式,即分别是disabled,full和incremental。
- disabled是指关闭JACK编译,使用android old toolchain(即javac+dx);
- full是指全部编译,即每次编译,都会将所有的code全部编译;
- incremental是指增量编译,即只会编译修改的代码;
现在Android系统默认使用full模式。
Incremental模式默认是关闭的,在Google官网有如下说明:
Incremental compilation is deactivated when shrinking, obfuscation, repackaging or multi-dex legacy is enabled.
2. 如何关闭JACK编译模式
根据上面的介绍,如果是编译单独的模块,只需要在其Android.mk
设置LOCAL_JACK_ENABLED := disabled
即可。
3. 如何指定Android不使用JACK编译
在build/core/config.mk
有发现如下设定:
ifeq ($(ANDROID_COMPILE_WITH_JACK),true)
DEFAULT_JACK_ENABLED:=full
else
DEFAULT_JACK_ENABLED:=
endif
即默认JACK编译器模式是full模式,是否使能JACK编译器是由ANDROID_COMPILE_WITH_JACK
决定。
在build/core/combo/javac.mk
中,有如下设定:
ifndef ANDROID_COMPILE_WITH_JACK
# Defines if compilation with jack is enabled by default.
ANDROID_COMPILE_WITH_JACK := true
endif
如果需要Android不使用JACK编译,只需要将这里的ANDROID_COMPILE_WITH_JACK
为false即可。
4. 如何生成classes.jar
使用JACK编译器后,会编译生成classes.jack和classes.dex,而不再生成classes.jar,这样Android Studio无法依赖此jar开发APP。
此时需要关闭JACK编译器,才能生成AS可用的纯XX.class
形式的jar文件。