安卓預編譯
⑴ 如何預編譯 Android 模擬器專用內核
Android源碼編譯之後生成的是ramdisk.img、system.img和userdata.img。而內核源碼編譯完成之後生成的是ZImage。在一般情況下Android源碼是不帶有內核源碼的,但是帶有一個鏡像,這樣在編譯完Android源碼之後就可以模擬器啟動了,如果要更換系統的內核,此時將高版本的內核源碼進行編譯生成ZImage然後替換Android系統的的鏡像。這樣使用模擬器啟動之後就可以查看內核是否已經被刷新。
⑵ 安卓怎樣產生 build art android
ART是一個AOT編譯器。所謂AOT (Ahead of Time)是指在運行以前就把中間代碼靜態編譯成本地代碼,而JIT (Just
inTime)則是在運行時動態編譯。
AOT和JIT比各有長處,這里不詳細展開,只簡單列舉幾個最主要的:
AOT的主要編譯過程發生於開發用機,因此編譯得慢一點沒關系,可以充分的做各種耗時的優化;JIT在運行時動態編譯,通常不能做太耗時的優化,否則影響啟動和運行速度
更具體一點,以Sun的JVM為例,JIT大體上劃分為client和server兩種模式。Client模式下VM是一邊解釋執行,一邊識別熱點
區域進行JIT編譯,以免明顯影響啟動速度;考慮到內存佔用,也不會把所有java位元組碼都編譯成本地代碼。Server模式下則會進行全面的JIT編
譯,因為server啟動慢一點沒關系,一旦跑起來就會運行很長時間,所以花一點點時間全面優化是值得的。
因為受優化程度限制,JIT編譯出來的本地代碼體積通常比較大,5到10倍於bytecode都是正常的。AOT編譯出來的本地代碼體積更小。Android的JIT
code cache也是內存佔用的重要角色。
因為是預編譯好的機器代碼,AOT產生的代碼和載入執行過程和普通的本地代碼沒有太大分別。不過仍然需要運行時的GC支持。
雖然AOT可以有更多的時間和空間做編譯優化,但並不等於性能上就一定勝過JIT。JVM有不少東西只能在運行時動態決定是否可以採用編譯優化(如
識別可以inline的虛方法),以及運行時動態反優化(例如inline了一個虛方法,後來發現遇到新的派生類的實例,就需要取消原來的
inline)。這些事情AOT就不容易做到。
AOT的編譯器一般會分兩個版本,一個在開發機上編譯整個系統和預裝應用,另一個是一個精簡版,在設備上運行,負責編譯連接新安裝的應用。
AOT編譯出來的代碼仍然需要運行時的支持,特別是GC。
如果ART確實是用AOT compiler替換JIT,性能先不談,Android的內存佔用應該會因此獲益。現在dex代碼經過 dex =>
optimized dex => JIT cache這個過程,內存中需要同時容納odex和JIT cache兩份代碼;換成ART以後,就變成dex
=> oat,內存里只放oat就可以。不過考慮到ART的解釋器代碼里有提到deoptimization,也有可能在特定情況下還需要load
dex代碼解釋執行。重要的是oat應該是可以直接mmap執行的代碼(其實就是一個真·ELF格式的文件),載入/換頁重載入的速度都會比從odex動
態編譯來得快。
簡單的說就是以更高的執行效率來運行軟體art應該利用了LLVM
性能就提升了,另一方面預載的私有軟體也可以憑此做好保密工作,留在機器上的程序本體是機器碼了,沒有deoat了。
其實Google也在Chrome做了類似的事情。
目前的Chrome支持pNACL,也是一種以(LLVM)位元組碼發布,到本地再編譯的模式。如此能獲得接近那些直接被編譯為原生代碼的軟體的性能。
Mozilla給出的替代品是asm.js,則是用javascript引擎執行C++本機代碼。
⑶ Android 中的 LLVM 主要做什麼
LLVM,全稱為Low Level Virtual Machine,其實它就是底層編譯框架,其執行效率要比Gcc等以速度快見長的編譯器要快上很多。Google將它用於Android中也是因為它超高的效率。現在Android因為開始採用ART,所以用它做預編譯(AOT),從而提高了程序的執行效率,其代價就是需要更大的空間,安裝時間的增加。因此,LLVM現在基本上參與了Android應用的的編譯工作,而在ART之前,Android3.0之後,LLVM主要用來進行3D渲染(RenderScript)
⑷ android手機怎麼會
根據第三方的調研數據顯示,有77%的Android手機用戶承認自己曾遭遇過手機變慢的影響,網路搜索「Android+卡慢」,也有超過460萬條結果。在業內,Android手機一直有著「越用越慢」的口碑,這個現象甚至超出了硬體范疇——很多中高端Android手機在硬體參數上都優於同一代iPhone,但是它們仍然會在使用半年到一年的時間後進入「欠流暢」的狀態——這無疑是一件令人困擾的事情。
Android手機,由於開源的公開條件,Google無法從代碼這一埠約束第三方的應用程序,同時,由於linux核心設定應用在調取系統功能時一定 要取得ROOT許可權,這也導致大量應用因為單一功能的實現需求而獲得整個ROOT層面的支配,可以在Android手機的任意儲存位置進行讀寫,這種高自 由度無異於開啟了潘多拉魔盒,讓Android手機無法對惡意App事先設防。這也是開源軟體備受爭議、且在商用領域遭到抵觸的原因:它只關心是否授予了 用戶自由——這個自由也包括逾越邊界的自由——而沒有從最壞的出發點去考慮如何規避被濫用的風險。盡管Google作為巨頭,一直在嘗試對產業鏈進行統一 管理,但是當這條產業鏈日益龐大、連Google也只能扮演其中之一的角色時,Android的失控也就在情理之中了。比如,Android的最新版本通 常需要花費超過一年半的時間,才能使激活它的Android手機佔比超過50%,但是iOS 7隻用了兩個月,就讓半數以上的iPhone都更新完畢。另外,一款應用程序如果被蘋果從App Store中懲罰出去,它就再也無法被安裝到任何一款合法的iPhone裡面,但是如果一款應用程序被Google驅逐出Google Play,但是它還是可以登錄各種第三方應用市場,提供正常的下載和安裝。
所以,Android的這種天生短板,又催生出了一個「手機調校」的市場,並帶動了新的產業鏈。
「手 機調校」的第一級,在於系統層。在Android 4.4以及之後的Android L的規劃中,它將應用程序的運行模式由Dalvik換成了ART,其原理簡單來說是「預編譯」效果,即當一款應用程序在第一次被安裝到Android時, 它的位元組碼就已經被編譯成為了本地的機器碼,減少後續運行應用程序時的啟動和執行時間。
根據Google自己公布的結果,在不同的性能測試App中,ART的速度對比Dalvik的平均提升幅度達到了80%,在某些項目中,ART的提升幅度甚至超過了1.5倍,這個結果可謂非常喜人。
這 是Google希望從源頭解決Android卡慢問題的努力,但是這只是對性能優化有著作用,無法解決因為應用程序違規調用資源而產生的問題。同時,由於 在安裝應用程序時進行了「預編譯」,整個安裝時間將會變長,安裝完畢後生成的文件也會變大,比如最新的Google+安裝包只有6.9M,但是它安裝後的 APK大小達到了28.3M,這對Android手機儲存空間又存在過多佔用的問題。
⑸ 安卓手機運行環境art什麼意思
Android運行環境ART
安卓之前的版本運行機制是Dalvik,這個導致安卓卡慢,安卓4.4之後推出了ART,在5.0上完全使用了ART模式。
ART 的機制與 Dalvik 不同。在Dalvik下,應用每次運行的時候,位元組碼都需要通過即時編譯器轉換為機器碼,這會拖慢應用的運行效率,而在ART 環境中,應用在第一次安裝的時候,位元組碼就會預先編譯成機器碼,使其成為真正的本地應用。這個過程叫做預編譯(AOT,Ahead-Of-Time)。這樣的話,應用的啟動(首次)和執行都會變得更加快速。
通俗一點就是,ART增加APK安裝容量,實現了流暢度。
⑹ Android 怎麼簡單實現預編譯
可以巧妙地利用常量來實現類似的功能。編譯的時候,一般會把常量進行硬編碼,並把不能抵達的代碼進行刪減。因此,我們有了下面類似的代碼:
[java]
public final static boolean IsDebug= false;
if(IsDebug){
Log.i(tag,msg);
}
可以對編譯後的文件,進行反編譯
⑺ 安卓ART模式的好處,用過的來回答下。有沒有什麼問題
ART模式英文全稱為:Android runtime,谷歌Android 4.4系統新增的一種應用運行模式,與傳統的Dalvik模式不同,ART模式可以實現更為流暢的安卓系統體驗,對於大家來說,只要明白ART模式可讓系統體驗更加流暢。
ART模式安裝應用所佔的ROM空間比Dalvik模式多了接近一倍。
ART模式通過在安裝應用程序時,自動對程序進行代碼預讀取編譯,讓程序直接編譯成機器語言,免去了Dalvik模式要時時轉換代碼,實現高效率、省電、佔用更低的系統內存、手機運行流暢。
⑻ 安卓手機怎麼設置 手機系統設置 手機性能才能提到最高
可以通過開啟發者選項,並對開發者選項相關項進行優化設置,提高手機的流暢性。
(以小米手機為例)MIUI有很多的這樣的功能,具體是菜單跳轉的漸進漸出,窗口關閉與打開時的過渡效果等,雖然過渡的不是很慢,這個功能是在開發者選項裡面設置,默認MIUI是隱藏了開發者選項的,如何開啟開發者選項以及如何設置過渡動畫可以按以下教程:
1、在手機主屏找到設置->關於手機。
5、如果將上面的效果設置為2,再返回去操作就會發現,比如打開設置,再點開其它菜單就會顯得慢,會有漸入的感覺,讓人覺得不能忍受,改到0.5或者關閉就快多了,直接彈出下一級菜單。
⑼ anzhuo應用程序怎麼反編譯
讓我們先來認識下APK文件. Android的應用程序包為擴展名為.apk文件, 無論你是從手機市場里下載, 還是電腦中下載. 都是這類APK文件. APK是AndroidPackage的縮寫,即Android安裝包(apk)。APK是類似Symbian Sis或Sisx的文件格式。通過將APK文件直接傳到Android模擬器或Android手機中執行即可安裝。apk文件和sis一樣,把android sdk編譯的工程打包成一個安裝程序文件,格式為apk。 APK文件其實是zip格式,但後綴名被修改為apk,通過UnZip解壓後,可以看到Dex文件,Dex是Dalvik VM executes的全稱,即Android Dalvik執行程序,並非Java ME的位元組碼而是Dalvik位元組碼。Android在運行一個程序時首先需要UnZip,然後類似Symbian那樣直接,和Windows Mobile中的PE文件有區別.
android
一個APK文件解壓開通常有這樣的文件夾:
META-INF 目錄:
MANIFEST.MF: manifest文件
CERT.RSA: 應用程序證書
CERT.SF: SHA-1資源簽名列表. 例如:
Signature-Version: 1.0
Created-By: 1.0 (Android)
SHA1-Digest-Manifest: wxqnEAI0UA5nO5QJ8CGMwjkGGWE=
...
Name: res/layout/exchange_component_back_bottom.xml
SHA1-Digest: eACjMjESj7Zkf0cBFTZ0nqWrt7w=
...
Name: res/drawable-hdpi/icon.png
SHA1-Digest: DGEqylP8W0n0iV/ZzBx3MW0WGCA=
lib: 這個目錄包含某些特定編譯代碼, 這個文件夾分成下面這些
armeabi: 只基於所有ARM處理器的編譯代碼.
armeabi-v7a: 所有ARMv7處理器的編譯代碼
x86: 僅針對x86處理器的編譯代碼
mips: 為MIPS處理器的編譯代碼
res: 包含資源的目錄不編譯到資源文件,看下面:
assets: 包含應用程序的資產,可以通過AssetManager進行檢索.
AndroidManifest.xml: 包含應用程序的元數據文件,描述名稱、版本、訪問許可權、引用應用程序的庫文件。此文件在Android二進制格式, 可被工具轉化為可讀的純文本XML工具,如 AXMLPrinter2,apktool,或Androguard。設置,可以通過AssetManager進行檢索
classes.dex: Dalvik位元組碼
resources.arsc : 一個包含預編譯資源文件,如二進制的XML.
有兩種方法反編譯APK, 如果是為了漢化程序, 可以使用apktool:
安裝過程
1.下載apktool1.5.2.tar.bz2和apktool-install-windows-r05-brut1.tar.bz2
2.把兩個文件都解壓放在同一個目錄,共三個文件
aapt.exe
apktool.bat
apktool.jar用於解包,apktool.jar和aapt.exe聯合用於打包。
在命令行執行:
apktool d d:xxx.apk d:xxx
xxx 為你的輸出目錄, 然後你就可以看一些xml的資源文件, 以及Smali文件. 如下圖某APK文件反編譯輸出目錄:
由此可見,Android應用程序反編譯並不難, 加密與解密的斗爭一直會持續.
⑽ android 怎麼編譯so文件
android NDK編譯多個so文件
android編譯系統的makefile文件Android.mk寫法如下
(1)Android.mk文件首先需要指定LOCAL_PATH變數,用於查找源文件。由於一般情況下
Android.mk和需要編譯的源文件在同一目錄下,所以定義成如下形式:
LOCAL_PATH:=$(call my-dir)
上面的語句的意思是將LOCAL_PATH變數定義成本文件所在目錄路徑。
(2)Android.mk中可以定義多個編譯模塊,每個編譯模塊都是以include $(CLEAR_VARS)開始
以include $(BUILD_XXX)結束。
include $(CLEAR_VARS)
CLEAR_VARS由編譯系統提供,指定讓GNU MAKEFILE為你清除除LOCAL_PATH以外的所有LOCAL_XXX變數,
如LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES等。
include $(BUILD_STATIC_LIBRARY)表示編譯成靜態庫
include $(BUILD_SHARED_LIBRARY)表示編譯成動態庫。
include $(BUILD_EXECUTABLE)表示編譯成可執行程序
(3)舉例如下(frameworks/base/libs/audioflinger/Android.mk):
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS) 模塊一
ifeq ($(AUDIO_POLICY_TEST),true)
ENABLE_AUDIO_DUMP := true
endif
LOCAL_SRC_FILES:= \
AudioHardwareGeneric.cpp \
AudioHardwareStub.cpp \
AudioHardwareInterface.cpp
ifeq ($(ENABLE_AUDIO_DUMP),true)
LOCAL_SRC_FILES += AudioDumpInterface.cpp
LOCAL_CFLAGS += -DENABLE_AUDIO_DUMP
endif
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libbinder \
libmedia \
libhardware_legacy
ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)
LOCAL_CFLAGS += -DGENERIC_AUDIO
endif
LOCAL_MODULE:= libaudiointerface
ifeq ($(BOARD_HAVE_BLUETOOTH),true)
LOCAL_SRC_FILES += A2dpAudioInterface.cpp
LOCAL_SHARED_LIBRARIES += liba2dp
LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP
LOCAL_C_INCLUDES += $(call include-path-for, bluez)
endif
include $(BUILD_STATIC_LIBRARY) 模塊一編譯成靜態庫
include $(CLEAR_VARS) 模塊二
LOCAL_SRC_FILES:= \
AudioPolicyManagerBase.cpp
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libmedia
ifeq ($(TARGET_SIMULATOR),true)
LOCAL_LDLIBS += -ldl
else
LOCAL_SHARED_LIBRARIES += libdl
endif
LOCAL_MODULE:= libaudiopolicybase
ifeq ($(BOARD_HAVE_BLUETOOTH),true)
LOCAL_CFLAGS += -DWITH_A2DP
endif
ifeq ($(AUDIO_POLICY_TEST),true)
LOCAL_CFLAGS += -DAUDIO_POLICY_TEST
endif
include $(BUILD_STATIC_LIBRARY) 模塊二編譯成靜態庫
include $(CLEAR_VARS) 模塊三
LOCAL_SRC_FILES:= \
AudioFlinger.cpp \
AudioMixer.cpp.arm \
AudioResampler.cpp.arm \
AudioResamplerSinc.cpp.arm \
AudioResamplerCubic.cpp.arm \
AudioPolicyService.cpp
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libbinder \
libmedia \
libhardware_legacy
ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)
LOCAL_STATIC_LIBRARIES += libaudiointerface libaudiopolicybase
LOCAL_CFLAGS += -DGENERIC_AUDIO
else
LOCAL_SHARED_LIBRARIES += libaudio libaudiopolicy
endif
ifeq ($(TARGET_SIMULATOR),true)
LOCAL_LDLIBS += -ldl
else
LOCAL_SHARED_LIBRARIES += libdl
endif
LOCAL_MODULE:= libaudioflinger
ifeq ($(BOARD_HAVE_BLUETOOTH),true)
LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP
LOCAL_SHARED_LIBRARIES += liba2dp
endif
ifeq ($(AUDIO_POLICY_TEST),true)
LOCAL_CFLAGS += -DAUDIO_POLICY_TEST
endif
ifeq ($(TARGET_SIMULATOR),true)
ifeq ($(HOST_OS),linux)
LOCAL_LDLIBS += -lrt -lpthread
endif
endif
ifeq ($(BOARD_USE_LVMX),true)
LOCAL_CFLAGS += -DLVMX
LOCAL_C_INCLUDES += vendor/nxp
LOCAL_STATIC_LIBRARIES += liblifevibes
LOCAL_SHARED_LIBRARIES += liblvmxservice
# LOCAL_SHARED_LIBRARIES += liblvmxipc
endif
include $(BUILD_SHARED_LIBRARY) 模塊三編譯成動態庫
(4)編譯一個應用程序(APK)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory-->直譯(建立在java子目錄中的所有Java文件)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build-->直譯(創建APK的名稱)
LOCAL_PACKAGE_NAME := LocalPackage
# Tell it to build an APK-->直譯(告訴它來建立一個APK)
include $(BUILD_PACKAGE)
(5)編譯一個依賴於靜態Java庫(static.jar)的應用程序
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# List of static libraries to include in the package
LOCAL_STATIC_JAVA_LIBRARIES := static-library
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
# Tell it to build an APK
include $(BUILD_PACKAGE)
(6)編譯一個需要用平台的key簽名的應用程序
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
LOCAL_CERTIFICATE := platform
# Tell it to build an APK
include $(BUILD_PACKAGE)
(7)編譯一個需要用特定key前面的應用程序
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
LOCAL_CERTIFICATE := vendor/example/certs/app
# Tell it to build an APK
include $(BUILD_PACKAGE)
(8)添加一個預編譯應用程序
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Mole name should match apk name to be installed.
LOCAL_MODULE := LocalMoleName
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)
(9)添加一個靜態JAVA庫
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Any libraries that this library depends on
LOCAL_JAVA_LIBRARIES := android.test.runner
# The name of the jar file to create
LOCAL_MODULE := sample
# Build a static jar file.
include $(BUILD_STATIC_JAVA_LIBRARY)
(10)Android.mk的編譯模塊中間可以定義相關的編譯內容,也就是指定相關的變數如下:
LOCAL_AAPT_FLAGS
LOCAL_ACP_UNAVAILABLE
LOCAL_ADDITIONAL_JAVA_DIR
LOCAL_AIDL_INCLUDES
LOCAL_ALLOW_UNDEFINED_SYMBOLS
LOCAL_ARM_MODE
LOCAL_ASFLAGS
LOCAL_ASSET_DIR
LOCAL_ASSET_FILES 在Android.mk文件中編譯應用程序(BUILD_PACKAGE)時設置此變數,表示資源文件,
通常會定義成LOCAL_ASSET_FILES += $(call find-subdir-assets)
LOCAL_BUILT_MODULE_STEM
LOCAL_C_INCLUDES 額外的C/C++編譯頭文件路徑,用LOCAL_PATH表示本文件所在目錄
舉例如下:
LOCAL_C_INCLUDES += extlibs/zlib-1.2.3
LOCAL_C_INCLUDES += $(LOCAL_PATH)/src
LOCAL_CC 指定C編譯器
LOCAL_CERTIFICATE 簽名認證
LOCAL_CFLAGS 為C/C++編譯器定義額外的標志(如宏定義),舉例:LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1
LOCAL_CLASSPATH
LOCAL_COMPRESS_MODULE_SYMBOLS
LOCAL_COPY_HEADERS install應用程序時需要復制的頭文件,必須同時定義LOCAL_COPY_HEADERS_TO
LOCAL_COPY_HEADERS_TO install應用程序時復制頭文件的目的路徑
LOCAL_CPP_EXTENSION 如果你的C++文件不是以cpp為文件後綴,你可以通過LOCAL_CPP_EXTENSION指定C++文件後綴名
如:LOCAL_CPP_EXTENSION := .cc
注意統一模塊中C++文件後綴必須保持一致。
LOCAL_CPPFLAGS 傳遞額外的標志給C++編譯器,如:LOCAL_CPPFLAGS += -ffriend-injection
LOCAL_CXX 指定C++編譯器
LOCAL_DX_FLAGS
LOCAL_EXPORT_PACKAGE_RESOURCES
LOCAL_FORCE_STATIC_EXECUTABLE 如果編譯的可執行程序要進行靜態鏈接(執行時不依賴於任何動態庫),則設置LOCAL_FORCE_STATIC_EXECUTABLE:=true
目前只有libc有靜態庫形式,這個只有文件系統中/sbin目錄下的應用程序會用到,這個目錄下的應用程序在運行時通常
文件系統的其它部分還沒有載入,所以必須進行靜態鏈接。
LOCAL_GENERATED_SOURCES
LOCAL_INSTRUMENTATION_FOR
LOCAL_INSTRUMENTATION_FOR_PACKAGE_NAME
LOCAL_INTERMEDIATE_SOURCES
LOCAL_INTERMEDIATE_TARGETS
LOCAL_IS_HOST_MODULE
LOCAL_JAR_MANIFEST
LOCAL_JARJAR_RULES
LOCAL_JAVA_LIBRARIES 編譯java應用程序和庫的時候指定包含的java類庫,目前有core和framework兩種
多數情況下定義成:LOCAL_JAVA_LIBRARIES := core framework
注意LOCAL_JAVA_LIBRARIES不是必須的,而且編譯APK時不允許定義(系統會自動添加)
LOCAL_JAVA_RESOURCE_DIRS
LOCAL_JAVA_RESOURCE_FILES
LOCAL_JNI_SHARED_LIBRARIES
LOCAL_LDFLAGS 傳遞額外的參數給連接器(務必注意參數的順序)
LOCAL_LDLIBS 為可執行程序或者庫的編譯指定額外的庫,指定庫以"-lxxx"格式,舉例:
LOCAL_LDLIBS += -lcurses -lpthread
LOCAL_LDLIBS += -Wl,-z,origin
LOCAL_MODULE 生成的模塊的名稱(注意應用程序名稱用LOCAL_PACKAGE_NAME而不是LOCAL_MODULE)
LOCAL_MODULE_PATH 生成模塊的路徑
LOCAL_MODULE_STEM
LOCAL_MODULE_TAGS 生成模塊的標記
LOCAL_NO_DEFAULT_COMPILER_FLAGS
LOCAL_NO_EMMA_COMPILE
LOCAL_NO_EMMA_INSTRUMENT
LOCAL_NO_STANDARD_LIBRARIES
LOCAL_OVERRIDES_PACKAGES
LOCAL_PACKAGE_NAME APK應用程序的名稱
LOCAL_POST_PROCESS_COMMAND
LOCAL_PREBUILT_EXECUTABLES 預編譯including $(BUILD_PREBUILT)或者$(BUILD_HOST_PREBUILT)時所用,指定需要復制的可執行文件
LOCAL_PREBUILT_JAVA_LIBRARIES
LOCAL_PREBUILT_LIBS 預編譯including $(BUILD_PREBUILT)或者$(BUILD_HOST_PREBUILT)時所用, 指定需要復制的庫.
LOCAL_PREBUILT_OBJ_FILES
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES
LOCAL_PRELINK_MODULE 是否需要預連接處理(默認需要,用來做動態庫優化)
LOCAL_REQUIRED_MODULES 指定模塊運行所依賴的模塊(模塊安裝時將會同步安裝它所依賴的模塊)
LOCAL_RESOURCE_DIR
LOCAL_SDK_VERSION
LOCAL_SHARED_LIBRARIES 可鏈接動態庫
LOCAL_SRC_FILES 編譯源文件
LOCAL_STATIC_JAVA_LIBRARIES
LOCAL_STATIC_LIBRARIES 可鏈接靜態庫
LOCAL_UNINSTALLABLE_MODULE
LOCAL_UNSTRIPPED_PATH
LOCAL_WHOLE_STATIC_LIBRARIES 指定模塊所需要載入的完整靜態庫(這些精通庫在鏈接是不允許鏈接器刪除其中無用的代碼)
LOCAL_YACCFLAGS
OVERRIDE_BUILT_MODULE_PATH