Android.mk和Application.mk基本内容

目录

  • android.mk
    • 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 位 ARMv7APP_ABI := armeabi-v7a
64 位 ARMv8 (AArch64)APP_ABI := arm64-v8a
x86APP_ABI := x86
x86-64APP_ABI := x86_64
所有支持的 ABI(默认)APP_ABI := all
  • APP_PLATFORMAPP_PLATFORM
    会声明编译此应用所面向的Android API 级别,并对应于应用的 minSdkVersion
    如果未指定,ndk-build 将以 NDK 支持的最低 API 级别为目标。最新 NDK 支持的最低 API 级别总是足够低,可以支持几乎所有使用中的设备。

  • APP_OPTIM
    该变量可以设置为release和debug来改变生成的二进制文件的优化级别,默认为release模式。
    发布模式会启用优化,并可能生成无法与调试程序一起使用的二进制文件。

    调试模式会停用优化,以便可以使用调试程序。

相关文章