NDK Application.mk使用手册

Android NDK开发文档本地版 Android JNI开发指南 Android.mk Application.mk- 立即下载

本文档从NDK安装目录下的说明文档翻译而来,位置:$NDK/docs/APPLICATION-MK.html

1 概述

    Application.mk用来描述你的工程下的native模块, 一般放在$PROJECT/jni/Application.mk, 其中$PROJECT表示你的工程目录,这样就可以被ndk-build脚本文件找到.(注:在这种方式下,进入jni目录,即$PROJECT/jni/,然后执行ndk-build,就可以直接编译jni生成.so文件了).

    还有另外一种方法就是将Application.mk文件放在$NDK/app/<myapp>/Application.mk,其中$NDK为NDK的安装目录,<myapp>为你的应用程序名.在这种方式下,进入$NDK安装目录,然后输入make APP=<name>,即可编译你的JNI代码.此种方法是ndk-r4之前的方法,虽然出于兼容的原因目录还支持,但是不建议使用此种方法,因为第一种方法简单,且方便.

在Application.mk文件内定义了一些变量:

APP_PROJECT_PATH

此变量值必须是你工程根目录的绝对路径.这用于指定JNI生成的.so文件安装路径或拷贝路径.

注:此变量对于第一种方法是可选了,但对于第二种方法却是必须的.

APP_MODULES

 模块名

 此变量是可选的,如果没有在此文件中定义,则默认由Android.mk文件决定.

 如果在Application.mk文件中定义此变量,那么它必须是一串由空格相隔的模块名列表,并且与Android.mk文件中的LOCAL_MODULE变量定义保持一致.需要注意地是,NDK会自动计算模块所需要的依赖文件。

    注:此变量在NDK R4版本之前是在Application.mk中是必须的,所有模块必须显式地列出.

APP_OPTIM

优化选项

此变量是可选的,其值可以为'release'或'debug'.此变量用来修改优先等级.默认情况下为release.在release模式下,将编译生成被优化了的二进制的机器码,而debug模块用来生成便于调试的未被优化的二进制机器码。

需要注意地是,如果你的程序在manifest文件中的节点下<application>已经设置了android:debuggable属性为"true",则Apllication.mk文件此变量的默认值则为'debug'而不是'release',可以在Application.mk文件中将此变量值设置为'release'而覆盖其值.

虽然在两种模块下都可以调试,但是release模式下提供更少的调试信息,比如:一些变量被优化从而不能被检查,代码重组,及跟踪。

APP_CFLAGS

编译选项

可以在Application.mk文件中修改此编译选项参数,此参数可以覆盖Android.mk文件中的相同定义,从而不必去Android.mk文件中修改.

需要注意地是,这个选项里的路径必须是以顶层NDK目录为相对路径,如存在以下两个文件:

sources/foo/Android.mk

sources/bar/Android.mk

如果在foo/Android.mk文件中想要添加bar目录,那么得这样便用:

APP_CFLAGS += -Isources/bar
如果这样使用:
APP_CFLAGS += -I$(LOCAL_PATH)/../bar
将会变成'-I$NDK_ROOT/../bar',从而出现并不是你想要的结果.

在android-ndk-1.5_r1时,此选项中只在C代码中被支持,而C++不支持,不过现在已经被纠正了.

APP_CXXFLAGS

APP_CPPFLAGS的别名,将来此变量将会被抛弃。

APP_CPPFLAGS

C++代码的编译选项。在android-ndk-1.5_r1版本中,此变量只适用于C++,但是现在可以同时适用于C和C++。

APP_BUILD_SCRIPT

在默认情况下,NDK会在jni目录下查找Android.mk文件并使用它,如果你想修改它,那么在此变量中你可以指定一个你自己的脚本来执行,路径还是以工程顶层目录为相对路径.

APP_ABI

在默认情况下,NDK会使用'armeabi' ABI 来生成二进制机器码,这是基于ARMv5TE的浮点运算CPU,这可以通过使用此变量来选项不同的ABI(Application Binary Interface).


例如:支持基于armv7 FPU指令集的设备:
APP_ABI := armeabi-v7a
支持IA-32指令集:
APP_ABI := x86
同时支持三种:
APP_ABI := armeabi armeabi-v7a x86
从NDK-r7版本后,同时支持三种还可以这样写:
APP_ABI := all
有关ABI更详细的内容请参考文档:docs/CPU-ARCH-ABIS.html

APP_STL

C++标准库

在默认情况下,NDK通过Androoid自带的最小化的C++运行库(system/lib/libstdc++.so)来提供标准C++头文件.然而,NDK提供了可供选择的C++实现,你可以通过此变量来选择使用哪个或链接到你的程序。

APP_STL := stlport_static    --> static STLport library
APP_STL := stlport_shared    --> shared STLport library
APP_STL := system            --> default C++ runtime library
更多详细内容请参考文档docs/CPLUSPLUS-SUPPORT.html。

APP_GNUSTL_FORCE_CPP_FEATURES

在先前的NDK版本中,当使用GNU libstdc++ runtime运行库(通过设置APP_STL变量为gnustl_static或gnustl_shared)都会强制支持异常和RTTI,在有些极少情况下可能会出现问题,同时会使生成的机器码包含不必须的内容。

这种问题在NDK r7b中得到解决,但是这也意味着如果你真的需要支持异常和RTTI 的话,则必须显式声明。要么通过APP_CPPFLAGS,要么通过LOCAL_CPPFLAGS,或LOCAL_CPP_FEATURES。本变量就是为了解决此问题的.

有两个选项供选择,也可同时都选择.

exceptions    -> 强制所有模块支持异常.
rtti          -> 强制所有模块支持rtti.
例如:
APP_GNUSTL_FORCE_CPP_FEATURES := exceptions rtti
注意:此变量是过滤变量,将来有可能不支持.所以建议不使用此变量.


原文地址:http://blog.youkuaiyun.com/flydream0/article/details/7433786

三轴加速度传感器计步算法优化:动态阈值与滤波技术的实践应用 本文深入探讨了三轴加速度传感器计步算法的优化实践,重点分析了动态阈值调整与高效滤波技术如何协同提升计步精度与鲁棒性。通过对比均值滤波的局限,引入向量模长计算、多级自适应阈值以及状态机判决逻辑,并结合代码示例,为嵌入式及移动应用开发者提供了应对复杂运动场景的实用解决方案。 阅读详情

相关推荐

Multisim实现555计时器模拟简易电子琴

一. 元器件介绍 这里用到的元器件有: DIgital power(VCC)数字电源 频率计数器(XFC) 示波器(XSC) ground 数字地 Capacitan 电容器 Resistor 电阻器 555_VIRTUAL 555计时器 触发按键(DIPSW)(DPST)(SPST)

是你呀星途的博客 2万+

Application.mk 介绍

本文翻译来自于:https://developer.android.google.cn/ndk/guides/application_mk.html  用作与学习记录 Application.mk 本页内容 概览变量 本文档介绍 Application.mk 构建文件,此文件用于描述应用需要的原生模块。 模块可以是静态库、共享库或可执行文件。

zhu275114825的博客 473

ExpressLRS 915MHz vs 2.4GHz:实测对比与TX12遥控器的最佳搭配方案

本文深入对比了ExpressLRS 915MHz与2.4GHz两种频段在穿透能力、延迟、抗干扰等方面的实测表现,并结合RadioMaster TX12遥控器的硬件特性,提供了从微型花飞到极限远航等不同场景下的最佳搭配方案与EdgeTX系统配置指南,帮助FPV玩家根据核心飞行需求做出精准选择。

milk8的博客 444

Android NDK开发详解之Application.mk探秘

原生开发套件 (NDK) 是一套工具,使您能够在 Android 应用中使用 C 和 C++ 代码,并提供众多平台库,您可使用这些平台库管理原生 activity 和访问实体设备组件,例如传感器和触控输入。NDK 可能不适合大多数 Android 编程初学者,这些初学者只需使用 Java 代码和框架 API 开发应用

hnjzfwy的博客 1085

Flowable前端可视化配置动态审批人:告别硬编码,实现部门领导、项目经理自动分配

本文详细介绍了Flowable前端可视化配置动态审批人的全栈解决方案,通过表达式分配、监听器分配等动态审批人机制,实现从硬编码到智能分配的转变。文章提供了前端扩展bpmn-js设计器、后端动态解析实现方案及性能优化建议,帮助企业应对组织架构变动,提升审批流程的灵活性和效率。

weixin_30352645的博客 471

【Unity动画优化插件】BT - OptiAnimX —— AAA级动画优化框架深度剖析

BT - OptiAnimX 是一款面向 Unity 的高性能动画优化框架,核心目标是解决多角色动画场景中的性能瓶颈问题。该插件对标《战争机器5》和《巫师3》等 AAA 游戏中的动画优化技术,通过一整套自动化与智能化的优化策略,将动画性能提升与视觉质量控制结合在一起。它适用于从移动端、VR 到高端 PC 的多平台项目,尤其在“多人角色 + 高频动画”的场景中表现突出,例如 MMO、开放世界、动作游戏等。BT - OptiAnimX 本质上是一套“动画性能调度系统”,而不仅仅是优化工具。

2403_88403568的博客 433

Application.mk语法解释

Application.mk是用来描述你的应用程序需要哪些模块,以及这些模块所要具有的一些特性。而相对的Android.mk是用来描述要编译某个具体的模块,所需要的一些资源,包括要编译的源码、要链接的库等等。 Application.mk所要描述的内容主要包括: 1)你程序正常运行,所需要到模块的具体列表; 2)程序要编译成什么机器指令集的; 3)所有模块要被编译成Release版本还是D

Roland_Sun的专栏 1万+

基于STM32、HAL库的IP5356M_DBZ_CA快充协议芯片简介及驱动程序设计

IP5356M_BATTERY_LEVEL_25 = 1, /* 电池电量25% */IP5356M_CHARGE_STATE_CHARGE_DONE = 4, /* 充电完成 */IP5356M_CHARGE_STATE_FAST = 2, /* 快速充电 */IP5356M_CHARGE_STATE_NONE = 0, /* 无充电 */IP5356M_CHARGE_STATE_PRE = 1, /* 预充电 *//* 延时1秒 */

corlin6688的博客 1415

ndk-build 参数NDK_APPLICATION_MK问题

被网络传闻和文档无限坑啊,竟然都说的是错的参数名:NDK_APP_APPLICATION_MK是错误的,NDK_APPLICATION_MK才是正确的 I am trying to pass a preprocessor define into my native code using the Android NDK that is dependent on

liweigao01的专栏 1650

手把手教你学Simulink——基础储能管理场景实例:基于Simulink的压缩空气储能(CAES)系统简化模型仿真

本文介绍了基于Simulink的压缩空气储能(CAES)系统简化模型仿真方法。CAES作为大规模长时储能方案,相比锂电池具有成本低、寿命长等优势。文章详细讲解了AA-CAES系统组成、热力学建模理论,以及Simulink实现流程,包括储气室、压缩机、膨胀机等核心模块的建模方法。通过8小时充电(50MW)和6小时放电(40MW)的仿真,验证了系统可实现60%往返效率。该模型为理解CAES系统运行机制提供了实用工具,并指出热管理、储气室特性等工程实践要点,为新型电力系统储能规划提供了仿真基础。

MHD0815的博客 170

【Cmder】--- Windows11 配置CMD神器 (超详细 持续更新中)

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。

秋知叶i 1万+

深入浅出Android NDK之Application.mk以及C++支持

除了Android.mk之外,Application.mk也是一个很重要的配置文件。 ndk-build在编译时,只依赖Android.mk和Application.mk两个文件。 默认情况下,Application.mk和Android.mk一样,放在jni目录下。 也可以使用在编译时通过NDK_APPLICATION_MK参数显式指定: ndk-build NDK_APPLICATION_MK...

taohongtaohuyiwei的博客 1716

ROS机器人里程计模型

3.5 移动机器人系统模型 相信大家的机器人平台STM32端底层控制和机器人urdf建模都已经顺利完成了,在正式开始ros端编写机器人启动功能包之前,我们还不得不学习一些必要的理论知识。别担心数学不好,这里基本都是高中数学。下面我们开始,Are you ready? 没准备好也开始了。 3.5.1 常用坐标系系统模型 在移动机器人技术研究中,最为常用的坐标系统是笛卡尔坐标系统。而在SLAM算法研究中,有如下几个比较常见的笛卡尔坐标系统,它们分别为机器人坐标系XR YR OR 、传感器坐标系XS YS OS

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 1万+

android ndk 开发之Application.mk

Application.mk的作用:Application.mk描述了应用程序需要哪些动态库和静态库。 存放位置:文件通常放在项目目录的jni文件夹下。 变量定义:由于Application.mk说到底只是作为GNU makefile的一个片段,其中也需要定义一些变量。 -APP_PROJECT_PATH此变量应该被赋予项目的根目录地址,此项为可选项。-APP_MODULES此项为可选项,当没有此

移动开发 8988

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

NDK之配置文件(Android.mk和Application.mk)

Android.mk文件是Android开发中的一个重要编译脚本文件,它用于描述和管理项目的编译过程。

浩瀚之水的专栏 1431

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

关于ndk-build所使用的Android.mk和Application.mk

Android.mk文件 一个Android.mk file用来向编译系统描述你的源代码。具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。你可以在每一个Android.mk file中定义一个或多个模块,你也可以在几个模块中使用同一个源代码文件。编译系统为你处理许多细节问题。例如,你不需要在你的Android.mk中列出头文件和依赖文件。NDK编译系统将会为

乐枕的家 7977

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: Android开发-----NDK开发中的一些常见错误及解决办法
下一篇: NDK Android.mk手册
cbbbc
博客等级 码龄15年 609粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值