JACK編譯器配置

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編譯
/build/core/config.mk有發現如下設定:
431ifeq ($(ANDROID_COMPILE_WITH_JACK),true)
432DEFAULT_JACK_ENABLED:=full
433else
434DEFAULT_JACK_ENABLED:=
435endif
默認JACK編譯器模式是full模式,設定JACK編譯器是由ANDROID_COMPILE_WITH_JACK決定。
/build/core/combo/javac.mk中,有如下設定:
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章