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
改变的值。
如果选择 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'
}
}
多个配置以逗号隔开。
[本章完...]
网友评论