Android.mk和Application.mk基本內容


ndk-build

認識Android.mk和Application.mk

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 的連接

模塊描述變量

本部分中的變量會向編譯系統描述您的模塊。每個模塊描述都應遵守以下基本流程:

  1. 使用 CLEAR_VARS 變量初始化或取消定義與模塊相關的變量。

  2. 為用於描述模塊的變量賦值

  3. 使用 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模式。
    發布模式會啟用優化,並可能生成無法與調試程序一起使用的二進制文件。

    調試模式會停用優化,以便可以使用調試程序。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM