NDK<第七篇>:Application.mk

Application.mk中定义一些全局(整个项目)的配置,配置相对较少,比较简单。

下面是基本配置:

# 确定CPU架构
APP_ABI := armeabi-v7a

# 支持所有CPU架构:armeabi-v7a arm64-v8a x86_64 等等
# APP_ABI := all

# 一般对应Android SDK的最低版本
APP_PLATFORM := android-21

# c++_static 静态链接
# c++_shared 动态链接
# system 系统默认
# 如果生成的so库包含静态.a文件,这个属性要写成c++_static,否则可以不用写
APP_STL := c++_shared

# 用来指定C++功能
APP_CPP_FEATURES += exceptions rtti

ifdef APP_DEBUG
   ifeq ($(APP_DEBUG),true)
      CFLAGS+=  -O0 -g
      LOCAL_CFLAGS+=    -D_DEBUG
      APP_OPTIM := debug
   else
      CFLAGS+=  -O2 -g
      LOCAL_CFLAGS+=    -DNDEBUG
      APP_OPTIM := release
  endif
endif

【1】APP_OPTIM

将此可选变量定义为 `release` 或 `debug`。
在构建应用的模块时可使用它来更改优化级别。
发行模式是默认模式,可生成高度优化的二进制文件。调试模式会生成未优化的二进制文件,更容易调试。

【2】APP_DEBUG

可以在AS中手动设置 Build Variants 改变的值。

image.png
如果选择 debug,APP_DEBUG等于true;
如果选择 release,APP_DEBUG等于false;

【2】APP_CFLAGS

为任何模块编译任何 C 或 C++ 源代码时传递到编译器的一组 C 编译器标志

【3】APP_CPPFLAGS

构建 C++ 源文件时传递到编译器的一组 C++ 编译器标志。

【4】APP_ABI

需要生成的cpu架构。

现在手机主要是armeabi-v7a。查看手机cpu架构的方法是:

adb shell cat /proc/cpuinfo
adb shell getprop ro.product.cpu.abi

apk在安装的时候,如果手机是armeabi-v7a的,则会首先查看apk中是否存在armeabi-v7a目录,
如果没有就会查找armeabi。

如果目标是armeabi-v7a,但是拥有一个armeabi的,也可以把它放到armeabi-v7a目录下。
但是反过来不行。
ABI(横 so)/CPU(竖 手机) armeabi armeabi-v7a arm64-v8a x86 x86_64
ARMV5 支持
ARMV7 支持 支持
ARMV8 支持 支持 支持
X86 支持
X86_64 支持 支持

【5】APP_PLATFORM

与app最小SDK版本对应即可。
image.png

【6】APP_STL

默认情况下,NDK 构建系统为 Android 系统提供的最小 C++ 运行时库 (`system/lib/libstdc++.so`) 
提供 C++ 功能。 
名称 说明> 功能
libstdc++(默认) 默认最小系统 C++ 运行时库。 不适用
gabi++_static GAbi++ 运行时(静态)。 C++ 异常和 RTTI
gabi++_shared GAbi++ 运行时(共享)。 C++ 异常和 RTTI
stlport_static STLport 运行时(静态)。 C++ 异常和 RTTI;标准库
stlport_shared STLport 运行时(共享)。 C++ 异常和 RTTI;标准库
gnustl_static GNU STL(静态)。 C++ 异常和 RTTI;标准库
gnustl_shared GNU STL(共享)。 C++ 异常和 RTTI;标准库
c++_static LLVM libc++ 运行时(静态)。 C++ 异常和 RTTI;标准库
c++_shared LLVM libc++ 运行时(共享)。 C++ 异常和 RTTI;标准库

一般情况下,如果设置的配置不符合当前版本,会有明显的错误提示:

image.png

【7】在 build.gradle 中配置全局参数

全局参数不仅可以在Application.mk中配置,还可以在 build.gradle 中配置。

        externalNativeBuild {
            ndkBuild {
                arguments "APP_STL=c++_static", "APP_PLATFORM := android-21"
                abiFilters 'armeabi-v7a'
            }
        }

多个配置以逗号隔开。

[本章完...]

你可能感兴趣的:(NDK<第七篇>:Application.mk)