android.mk
Android.mk 文件所含內容的基本信息
LOCAL_PATH :=$(call my-dir)
//此變量表示源文件在開發樹中的位置
include $(CLEAR_VARS)
//CLEAR_VARS 變量指向一個特殊的 GNU Makefile,后者會清除許多 LOCAL_XXX 變量
LOCAL_MODLE := CKAppSecret
//LOCAL_MODULE 變量存儲您要編譯的模塊的名稱
LOCAL_SRC_FILES := main.cpp
//LOCAL_SRC_FILES 變量必須包含要編譯到模塊中的 C 和/或 C++ 源文件列表
include $(BUILD_SHARED_LIBRARY)
/*
此變量指向的編譯腳本用於收集您在 LOCAL_XXX 變量中提供的模塊的所有相關信息,以及確定如何根據您列出的源文件編譯目標共享庫。
請注意,使用此腳本要求您至少已經為 LOCAL_MODULE 和 LOCAL_SRC_FILES 賦值。
共享庫變量會導致編譯系統生成擴展名為 .so 的庫文件。
*/
變量和宏
NDK 定義的 include 變量
-
CLEAR_VARS
此變量指向的編譯腳本用於取消定義下文“開發者定義的變量”部分中列出的幾乎所有 LOCAL_XXX 變量。在描述新模塊之前,請使用此變量來包含此腳本 -
BUILD_SHARED_LIBRARY
此變量指向的編譯腳本用於收集您在 LOCAL_XXX 變量中提供的模塊的所有相關信息,以及確定如何根據您列出的源文件編譯目標共享庫。 -
BUILD_STATIC_LIBRARY....
-
PREBUILT_SHARED_LIBRARY
這里的 LOCAL_SRC_FILES 值不能是源文件,而必須是指向預編譯共享庫的一個路徑,例如 foo/libfoo.so
目標信息變量(沒用到)
編譯系統會根據 APP_ABI 變量所指定的每個 ABI 解析 Android.mk 一次
-
TARGET_ARCH
編譯系統解析此 Android.mk 文件時面向的 CPU 系列。此變量是 arm、arm64、x86 或 x86_64 之一。 -
TARGET_PLATFORM
編譯系統解析此 Android.mk 文件時面向的 Android API 級別編號。例如,Android 5.1 系統映像對應於 Android API 級別 22:android-22。 -
TARGET_ARCH_ABI
編譯系統解析此 Android.mk 文件時面向的 ABI。 -
TARGET_ABI
目標 AndroidAPI 級別與 ABI 的連接。
模塊描述變量
本部分中的變量會向編譯系統描述您的模塊。每個模塊描述都應遵守以下基本流程:
使用 CLEAR_VARS 變量初始化或取消定義與模塊相關的變量。
為用於描述模塊的變量賦值。
使用 BUILD_XXX 變量設置 NDK 編譯系統,使其將適當的編譯腳本用於該模塊。
-
LOCAL_PATH
此變量用於指定當前文件的路徑。必須在 Android.mk 文件開頭定義此變量。 -
LOCAL_MODULE
此變量用於存儲模塊名稱。必須在包含任何腳本(CLEAR_VARS 的腳本除外)之前定義此變量。 -
LOCAL_MODULE_FILENAME
為生成的模塊指定自己選擇的名稱。 -
LOCAL_SRC_FILES
此變量包含編譯系統生成模塊時所用的源文件列表。
建議避免使用絕對文件路徑;相對路徑可以提高 Android.mk 文件的移植性。 -
LOCAL_CFLAGS
此可選變量用於設置在編譯 C 和 C++ 源文件時編譯系統要傳遞的編譯器標記。這樣,您就可以指定額外的宏定義或編譯選項。
可以使用 LOCAL_CPPFLAGS 僅為 C++ 指定標記。 -
LOCAL_LDLIBS
此變量列出了在編譯共享庫或可執行文件時使用的額外鏈接器標記。
利用此變量,您可使用 -l 前綴傳遞特定系統庫的名稱
application.mk
創建一個配置目標 ABI、工具鏈、發布/調試模式和 STL 的 Application.mk 文件。
對於其中任何您未指明的項,將分別使用以下默認值:
ABI:所有非棄用的 ABI
工具鏈:Clang
模式:發布
STL:系統
- APP_ABI
指令集 | 值 |
---|---|
32 位 ARMv7 | APP_ABI := armeabi-v7a |
64 位 ARMv8 (AArch64) | APP_ABI := arm64-v8a |
x86 | APP_ABI := x86 |
x86-64 | APP_ABI := x86_64 |
所有支持的 ABI(默認) | APP_ABI := all |
-
APP_PLATFORMAPP_PLATFORM
會聲明編譯此應用所面向的Android API 級別,並對應於應用的 minSdkVersion。
如果未指定,ndk-build 將以 NDK 支持的最低 API 級別為目標。最新 NDK 支持的最低 API 級別總是足夠低,可以支持幾乎所有使用中的設備。 -
APP_OPTIM
該變量可以設置為release和debug來改變生成的二進制文件的優化級別,默認為release模式。
發布模式會啟用優化,並可能生成無法與調試程序一起使用的二進制文件。調試模式會停用優化,以便可以使用調試程序。