感谢原文作者的总结,地址如下:
http://blog.csdn.net/nodeathphoenix/article/details/7684230
Android build/core下的编译脚本里会用到变量NDK_ROOT和NDK_PROJECT_PATH。但是这两个变量你都不是必须显式地设置对应环境变量。因为如果没有定义NDK_ROOT,脚本里拿字符串"build/core"去匹配当前脚本的全路径,截取该字符串前面的部分即是NDK_ROOT了。如果定义了NDK_PROJECT_PATH,则脚本会在该路径下去找jni目录下的 application.mk 和 android.mk;如果没有定义NDK_PROJECT_PATH,则脚本会查找"jni/Android.mk"来匹配得到NDK_PROJECT_PATH,然后在NDK_PROJECT_PATH目录下找到application.mk 和 android.mk。如果application.mk中的APP_BUILD_SCRIPT没有指定Android.mk的路径,则在application.mk当前所在的目录下找Android.mk;否则的话,就直接根据APP_BUILD_SCRIPT来找Android.mk。
Android下面编译程序,除了Android.mk之外, Application.mk也是必须要的。 通过查看buid/core/build-local.mk可知道,如果你没有写Application.mk,它会默认地使用build/core/default-application.mk,然后根据其中的APP_BUILD_SCRIPT调用Android.mk去编译.所以,如果刚好你不需要在Application.mk中去指定cpu的架构等信息,没有写Application.mk你也能正确编译。
Application.mk 中的APP_BUILD_SCRIPT是个可选的变量,可以根据需要来决定是否设置具体的值。正因为这个特性,我们可以根据Application.mk的位置分为$Project/jni/ 和 $NDK_ROOT/jni/中两种情况。
如果没有指定环境变量NDK_PROJECT_PATH,编译器会在当前执行编译命令的目录下通过匹配jni/Android.mk的方式来得到NDK_PROJECT_PATH。所以执行的时候只能在$Project当前应用程序的目录下执行$NDK_ROOT/ndk-build来编译。
Application.mk可以和Android.mk一起放在你的$Project/jni/目录下,如果Application.mk中没有指定APP_BUILD_SCRIPT变量的值,编译器会自动在make的当前目录下的jni目录下去找Android.mk. 如果Application.mk中指定了APP_BUILD_SCRIPT变量的值,则编译器会按照此变量的值去读Android.mk.所以。一般对于Application.mk和Android.mk都在$Project/jni/目录下的情况,我们没有必要在Application.mk中指定APP_BUILD_SCRIPT,直接让编译器读取$Project/jni/目录下的Android.mk就可以了。
对于Application.mk在$NDK_ROOT/jni/下的情况,则必须要指定APP_BUILD_SCRIPT,APP_PROJECT_PATH也是可选的,同时必须要指定环境变量NDK_PROJECT_PATH---编译器根据此环境变量找到$NDK_ROOT/jni/Application.mk。
注意APP_PROJECT_PATH对于"$PROJECT/jni/Application.mk"文件是可选的,但对于"$NDK/apps/<myapp>/Application.mk"是强制需要的。
相关推荐
在Ubuntu系统上搭建Android NDK编译环境是Android原生代码开发的重要步骤,适用于那些需要进行C/C++底层开发或优化的应用程序。Android NDK(Native Development Kit)是一套工具,允许开发者使用C/C++编写部分应用...
本文将深入探讨如何使用Android NDK(Native Development Kit)来编译适用于Android平台的eXosip库,包括静态库和动态库的构建过程。 首先,eXosip是基于OSI(Open Systems Interconnection)模型的SIP协议栈,它是...
总的来说,将Live555移植到Android平台是一个复杂的过程,需要深入理解Android NDK的工作原理,熟悉C/C++编程,以及具备一定的Android开发经验。完成移植后,你可以利用Live555的强大功能,开发出高效、稳定、功能...
这时,我们就需要用到Android NDK(Native Development Kit)进行交叉编译,将Python编译为适用于Android ARM架构的二进制代码。本文将详细讲解如何在Android ARM平台上使用NDK工具进行Python的交叉编译。 首先,...
熟练掌握NDK及其交叉编译工具链的安装和使用,对于从事Android底层开发和性能优化的工程师来说,是必备的技能之一。 文章最后提到了作者Wu Zhangjin,他是一位对Linux系统有着深厚兴趣的开发者和贡献者,自2004年起...
在这个场景中,我们将探讨如何在Android环境下使用NDK(Native Development Kit)编译Curl库源码。 首先,NDK是Google提供的一个工具集,允许开发者在Android应用中集成原生代码。通过NDK,我们可以编写C和C++代码...
1、支持arm 2、支持aarch64
NDK是Android应用开发中的一个重要组成部分,它允许开发者使用原生代码(如C、C++)来编写部分应用程序,从而利用底层的硬件性能,提高程序运行效率,尤其是在处理图形计算、物理模拟和游戏引擎等高性能需求的场景下...
NDK(Native Development Kit)是Google提供的一个用于Android应用开发的工具集,允许开发者使用C和C++编写部分或全部应用程序,从而利用硬件的性能并提高程序的运行效率。 在Android NDK环境下移植`libiconv`,...
live555 库 和 testRtspClient.cpp 编译生成静态库 和 可执行文件 testRtspClient 编译方法: 首先进入各个模块执行 Makefile,将静态库拷贝至上层目录 执行 ndk-build
在实际开发中,Android NDK通常与Java代码配合使用,Java负责应用程序的界面和逻辑,而NDK负责高性能的部分。结合使用Gradle插件,如CMake或ndk-build,可以方便地集成原生代码到Android Studio项目中。总的来说,...
在Android中,JNI是Android应用与NDK之间的重要桥梁,使得Java应用程序可以调用C/C++编写的本地库,同时C/C++代码也能调用Java的方法。 2. **NDK的优势**: - **性能优化**:对于计算密集型任务,例如图形处理、...
**正文** 在移动开发领域,Android NDK是一个重要的工具,它允许开发者在...在实际开发中,根据项目的具体需求,可能还需要考虑优化、多线程支持、错误处理等更复杂的问题,但这已经足够开启你的Android NDK之旅了。
这个虽然只是个简单的jnidemo、但是涵盖了Android.mk 和Application.mk 的原理 重点是Android NDK编译的理解 mac 系统下 切换到jni目录,然后呢个 ndk-build
### 使用Android NDK编译FFmpeg与实现RTSP手机视频功能 #### 一、前言 随着移动设备处理能力的不断增强,越来越多的应用程序开始利用原生的C/C++代码来提高性能,尤其是在多媒体处理领域。FFmpeg是一款强大的跨平台...
Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的C和C++库开发工具集。这个“android-ndk-r23b-linux.zip”文件是NDK的一个特定版本,即r23b,专为Linux操作系统设计。在Android...
iperf 2 ,3 的android 平台移植笔记,ndk 选择,交叉编译工具链的编译和配置,编译结果的验证,常见错误的处理方法。工作实践中的总结。
### PCL for Android 编译过程遇到的问题及解决办法 #### 环境配置与工具安装 在开始PCL(Point Cloud Library)for Android的编译之前,首先需要准备一些必要的开发环境和工具: 1. **CMake安装**:CMake是一种...
Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的C和C++开发工具集。...通过“android-ndk-r26b-windows.zip”,Windows用户可以方便地获取并开始他们的原生代码开发之旅。