Android M開始,google默認使用JACK編譯器,對於JACK編譯器的編譯流程下面這篇文章寫的很詳細:
http://taobaofed.org/blog/2016/05/05/new-compiler-for-android/
這裏主要談一下JACK編譯器的配置。
1 JACK編譯器三種模式
JACK編譯器有三種模式:
LOCAL_JACK_ENABLED:=$(DEFAULT_JACK_ENABLED) # '' (ie disabled), disabled, full, incremental
即分別是disabled,full和incremental
disabled是指關閉JACK編譯,使用android old toolchain。
full是指全部編譯,即每次編譯,都會將所有的code全部編譯。
incremental是指增量編譯,即只會編譯修改的代碼。incremental模式默認是關閉的,需要設置。
在官網有如下情況不能使用incremental編譯模式:
Incremental compilation is deactivated when shrinking, obfuscation, repackaging or multi-dex legacy is enabled.
2 Android.mk如何設置JACK編譯模式
根據上面的介紹,如果是單獨的模塊,只需要在Android.mk設置LOCAL_JACK_ENABLED爲disabled, full, incremental即可。
3 如何指定Android默認不是JACK編譯
431ifeq ($(ANDROID_COMPILE_WITH_JACK),true)
432DEFAULT_JACK_ENABLED:=full
433else
434DEFAULT_JACK_ENABLED:=
435endif
默認JACK編譯器模式是full模式,設定JACK編譯器是由ANDROID_COMPILE_WITH_JACK決定。
12ifndef ANDROID_COMPILE_WITH_JACK
13# Defines if compilation with jack is enabled by default.
14ANDROID_COMPILE_WITH_JACK := true
15endif
如果需要修改Android默認不是JACK編譯,只需要修改這裏的ANDROID_COMPILE_WITH_JACK爲false即可。
4 如何依賴classes.jar
使用JACK編譯器後,一開始會發現找不到classes.jar,這樣eclipse或android studio無法依賴系統jar。
後來發現是編譯出來的classes.jar,和.jack以及dex文件在一個目錄,統一放在out common目錄,比如frameworks目錄:
out/target/obj/JAVA_LIBRARIES/frameworks_intermedias/classes.jar