Android.mk 詳解
https://blog.csdn.net/dearsq/article/details/50585537
Android.mk中的主要配置參數:
1.LOCAL_JACK_ENABLED
這個變量可以禁止使用Jack編譯工具鏈編譯該模塊。在工作中,個人感覺目前jack工具鏈不是很穩定,經常會出現一些錯誤,比如:
ERROR: Security problem, see Jack server log (/tmp/jack-liujinwei/jack-8072.log)
這個時候,我就會在Android.mk中禁止該工具鏈。
禁止方法如下:
LOCAL_JACK_ENABLED := disabled
2.LOCAL_DEX_PREOPT
這個變量設置為false可以使整個系統使用提前優化的時候,某個app不使用提前優化。在Android.mk中給該變量賦值為false,則編譯生成的文件沒有oat文件,也就意味着沒有被提前優化。
LOCAL_DEX_PREOPT := false
3.WITH_DEXPREOPT
這個變量的使能導致system image中的所有東西都被提前優化(pre-optimized)。這可能導致system image非常大。
WITH_DEXPREOPT := true
4.DONT_DEXPREOPT_PREBUILTS
WITH_DEXPREOPT := true
DONT_DEXPREOPT_PREBUILTS := true
這兩個組合使用,可以使那些 prebuild的app不會被提前優化(pre-optimized),即就是那些在Android.mk中包含intclude $(BUILD_PREBUILT)的app都不會被提前優化
5.WITH_DEXPREOPT_BOOT_IMG_ONLY
WITH_DEXPREOPT := true
WITH_DEXPREOPT_BOOT_IMG_ONLY := true
這兩個組合使用只會優化boot image。
6.LOCAL_MODULE_TAGS
LOCAL_MODULE_TAGS :=user eng tests optional
user: 指該模塊只在user版本下才編譯
eng: 指該模塊只在eng版本下才編譯
tests: 指該模塊只在tests版本下才編譯
optional:指該模塊在所有版本下都編譯
7.LOCAL_PATH
當前目錄,使用LOCAL_PATH := $(call my-dir)獲取當前目錄,
LOCAL_PATH不會被include $(CLEAR_VARS) 清理。
8.LOCAL_MODULE
模塊名,在模塊編譯的時候,LOCAL_MODULE的值會被賦予ALL_MODULE,ALL_MODULE包含了系統所有模塊,這些模塊會更具系統的其他配置進一步篩選,最終篩選出來的模塊會被編譯。
9.LOCAL_SHARED_LIBRARIES
要連接到本模塊的共享庫。
10.LOCAL_CERTIFICATE := platform
使用平台簽名文件簽名。
11.include $(BUILD_STATIC_JAVA_LIBRARY)
構建一個靜態的jar包
12.include $(BUILD_PACKAGE)
編譯生成apk
13.include $(BUILD_EXECUTABLE)
編譯生成可執行文件
14.include $(BUILD_SHARED_LIBRARY)
編譯生成動態共享庫
15.include $(BUILD_STATIC_LIBRARY)
編譯生成靜態庫
16.LOCAL_JAVA_LIBRARIES
例如:LOCAL_JAVA_LIBRARIES := hello.jar,用於指明依賴的共享Jar包
17.LOCAL_STATIC_JAVA_LIBRARIES
用於指明依賴的靜態jar包
18.LOCAL_LDLIBS
鏈接選項,指明鏈接的參數,LOCAL_SHARED_LIBRARIES 會生成依賴關系,當庫不存在時會去編譯這個庫,LOCAL_LDLIBS則不會,它只是指明鏈接需要的參數。
如:LOCAL_LDLIBS += -lm –lz –lc -lcutils –lutils –llog …
---------------------
作者:陽光玻璃杯
來源:CSDN
原文:https://blog.csdn.net/u011913612/article/details/51853502
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
Android 新一代編譯 toolchain Jack & Jill 簡介
https://www.jianshu.com/p/1d7775bed2e2
在依賴了 Sun/Oracle 的 Java 編譯器十年之后,Android 終於有了自己的 Java 編譯器。
Jack 是 Java Android Compiler Kit 的縮寫,它可以將 Java 代碼直接編譯為 Dalvik 字節碼,並負責 Minification, Obfuscation, Repackaging, Multidexing, Incremental compilation。它試圖取代 javac/dx/proguard/jarjar/multidex 庫等工具。
git 源代碼地址是 https://android.googlesource.com/toolchain/jack。
Jill 是 Jack Intermediate Library Linker 的縮寫,它負責 “Shielding JACK from Java byte code”;實際上輔助 Jack 對.class 做預處理,生成 .jack 文件
git 源代碼地址是 https://android.googlesource.com/toolchain/jill。
自 Android build-tools 21.1 開始,里面已經內置 jack.jar 和 jill.jarAndroid Gradle plugin 自 0.14 開始支持 Jack & Jill initial commit自 Android 6.0 開始,Jack & Jill 成為 AOSP 的官方編譯器, 也就是說所有的 Android 6.0 ROM 都是 Jack 編譯出來的 link,也代表 Google 認為 Jack 達到了一定的成熟度預計等 Android 7.0 正式發布時,Jack 可能會成為官方推薦的編譯器