博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android——NDK基础概念——Application.mk文件介绍
阅读量:6150 次
发布时间:2019-06-21

本文共 2493 字,大约阅读时间需要 8 分钟。

hot3.png

Application.mk:

本文介绍Application.mk构建文件,此文件用于描述应用需要的原生模块。 模块可以是静态库、共享库或可执行文件。

建议在阅读本页之前先阅读概念和Android.mk页面。这样有助于您最深入地了解本页的内容。

概览:

Application.mk文件实际上是定义要编译的多个变量的微小GNU Makefile片段。它通常位于$PROJECT/jni/下,其中$PROJECT指向应用的项目目录。另一种方式是将其放在顶级$NDK/apps/目录的子目录下。例如:

$NDK/apps/<myapp>/Application.mk

这里的<myapp>是用于向NDK构建系统描述应用的短名称。它不会实际进入生成的共享库或最终软件包。

变量:

APP_PROJECT_PATH:此变量用于存储应用项目根目录的绝对路径。构建系统使用此信息将生成的JNI共享库的简缩版放入APK生成工具已知的特定位置。

如果将Application.mk文件放在$NDK/apps/<myapp>/下,则必须定义此变量。如果将其放在$PROJECT/jni/下,则此变量可选。

APP_OPTIM:将此可选变量定义为release或debug。在构建应用的模块时可使用它来更改优化级别。

发行模式是默认模式,可生成高度优化的二进制文件。调试模式会生成未优化的二进制文件,更容易调试。

请注意,您可以调试发行或调试二进制文件。但发行二进制文件在调试时提供的信息较少。例如,构建系统会选择某些合适的变量,您无需检查它们。此外,代码重新排序可能增大单步调试代码的难度;堆叠追踪可能不可靠。

在应用清单的<application>标记中声明android:debuggable将导致此变量默认使用debug而非release。将APP_OPTIM设置为release可替换此默认值。

APP_CFLAGS:此变量用于存储构建系统在为任何模块编译任何C或C++源代码时传递到编译器的一组C编译器标志。您可使用此变量根据需要它的应用更改指定模块的版本,而无需修改Android.mk文件本身。

这些标志中的所有路径应为顶级NDK目录的相对路径。例如,如果您有以下设置:

sources/foo/Android.mk

sources/bar/Android.mk

要在foo/Android.mk中指定您在编译时要添加指向bar源文件的路径,应使用:

APP_CFLAGS += -Isources/bar

APP_CPPFLAGS:此变量包含构建系统在仅构建C++源文件时传递到编译器的一组C++编译器标志。

APP_LDFLAGS:构建系统在链接应用时传递的一组链接器标志。此变量仅在构建系统构建共享库和可执行文件时才相关。当构建系统构建静态库时,会忽略这些标志。

APP_BUILD_SCRIPT:默认情况下,NDK构建系统在jni/下查找名称为Android.mk的文件。

如果要改写此行为,可以定义APP_BUILD_SCRIPT指向替代构建脚本。构建系统始终将非绝对路径解释为NDK顶级目录的相对路径。

APP_ABI:默认情况下,NDK构建系统为armeabi ABI生成机器代码。此机器代码对应于基于ARMv5TE、采用软件浮点运算的CPU。您可以使用APP_ABI 选择不同的ABI。表1所示为不同指令集的APP_ABI设置。

表1. APP_ABI不同指令集的设置:

 

注:all从NDKr7开始可用。

您也可以指定多个值,将它们放在同一行上,中间用空格分隔。例如:

APP_ABI := armeabi armeabi-v7a x86 mips

APP_PLATFORM:此变量包含目标Android平台的名称。例如,android-3指定Android 1.5系统映像。如需平台名称和对应Android系统映像的完整列表,请参阅Android NDK原生API:

APP_STL:默认情况下,NDK构建系统为Android系统提供的最小C++运行时库(system/lib/libstdc++.so)提供C++标头。此外,它随附您可以在自己的应用中使用或链接的替代C++实现。请使用APP_STL选择其中一个。如需了解有关支持的运行时及其功能的信息,请参阅NDK运行时和功能。

APP_SHORT_COMMANDS:相当于Android.mk中的 LOCAL_SHORT_COMMANDS,适用于整个项目。如需了解详细信息,请参阅Android.mk上此变量的相关文档。

NDK_TOOLCHAIN_VERSION:将此变量定义为4.9或4.8以选择GCC编译器的版本。64位ABI默认使用版本4.9 ,32位ABI默认使用版本4.8。要选择Clang的版本,请将此变量定义为clang3.4、clang3.5或clang。指定clang会选择Clang的最新版本。

APP_PIE:从Android 4.1(API级别16)开始,Android的动态链接器支持位置独立的可执行文件(PIE)。从Android 5.0(API级别21)开始,可执行文件需要 PIE。要使用PIE构建可执行文件,请设置-fPIE标志。此标志增大了通过随机化代码位置来利用内存损坏缺陷的难度。默认情况下,如果项目针对android-16或更高版本,ndk-build会自动将此值设置为true。您可以手动将其设置为true或false。

此标志仅适用于可执行文件。它在构建共享或静态库时没有影响。

注:PIE可执行文件无法在4.1版之前的Android上运行。

APP_THIN_ARCHIVE:在Android.mk文件中为此项目中的所有静态库模块设置LOCAL_THIN_ARCHIVE 的默认值。如需了解详细信息,请参阅Android.mk文档中的LOCAL_THIN_ARCHIVE。

转载于:https://my.oschina.net/cht2000/blog/899237

你可能感兴趣的文章
整理看到的好的文档
查看>>
Linux磁盘管理和文件系统管理
查看>>
linux运维人员的成功面试总结案例分享
查看>>
Windows DHCP Server基于MAC地址过滤客户端请求实现IP地址的分配
查看>>
命令查询每个文件文件数
查看>>
《跟阿铭学Linux》第8章 文档的压缩与打包:课后习题与答案
查看>>
RAC表决磁盘管理和维护
查看>>
Apache通过mod_php5支持PHP
查看>>
发布一个TCP 吞吐性能测试小工具
查看>>
java学习:jdbc连接示例
查看>>
PHP执行批量mysql语句
查看>>
Extjs4.1.x 框架搭建 采用Application动态按需加载MVC各模块
查看>>
Silverlight 如何手动打包xap
查看>>
建筑电气暖通给排水协作流程
查看>>
JavaScript面向对象编程深入分析(2)
查看>>
linux 编码转换
查看>>
POJ-2287 Tian Ji -- The Horse Racing 贪心规则在动态规划中的应用 Or 纯贪心
查看>>
Windows8/Silverlight/WPF/WP7/HTML5周学习导读(1月7日-1月14日)
查看>>
关于C#导出 文本文件
查看>>
使用native 查询时,对特殊字符的处理。
查看>>