`

Android NDK开发指南---Application.mk文件

 
阅读更多

Application.mk文件

简介:
-----------------------------
要将C\C++代码编译为SO文件,光有Android.mk文件还不行,还需要一个Application.mk文件。
本文档是描述你的Android应用程序中需要的本地模块的Application.mk的语法使用,要明白如下。

Application.mk目的是描述在你的应用程序中所需要的模块(即静态库或动态库)。

Application.mk文件通常被放置在$PROJECT/jni/Application.mk下,$PROJECT指的是您的项目。

另一种方法是将其放在顶层的子目录下:
$NDK/apps目录下,例如:
$NDK/apps/<myapp>/Application.mk

<myapp>是一个简称,用于描述你的NDK编译系统的应用程序(这个名字不会生成共享库或者最终的包)

下面是Application.mk中定义的几个变量。

APP_PROJECT_PATH
这个变量是强制性的,并且会给出应用程序工程的根目录的一个绝对路径。这是用来复制或者安装一个没有任何版本限制的JNI库,从而给APK生成工具一个详细的路径。

APP_MODULES
这个变量是可选的,如果没有定义,NDK将由在Android.mk中声明的默认的模块编译,并且包含所有的子文件(makefile文件)
如果APP_MODULES定义了,它不许是一个空格分隔的模块列表,这个模块名字被定义在Android.mk文件中的LOCAL_MODULE中。注意NDK会自动计算模块的依赖

注意:NDK在R4开始改变了这个变量的行为,再次之前:
 - 在您的Application.mk中,该变量是强制的
 - 必须明确列出所有需要的模块

APP_OPTIM
这个变量是可选的,用来定义“release”或"debug"。在编译您的应用程序模块的时候,可以用来改变优先级。

“release”模式是默认的,并且会生成高度优化的二进制代码。"debug"模式生成的是未优化的二进制代码,但可以检测出很多的BUG,可以用于调试。

注意:如果你的应用程序是可调试的(即,如果你的清单文件中设置了android:debuggable的属性是"true")。默认的是"debug"而不是"release"。这可以通过设置APP_OPTIM为"release"来将其覆盖。

注意:可以在"release"和"debug"模式下一起调试,但是"release"模式编译后将会提供更少的BUG信息。在我们清楚BUG的过程中,有一些变量被优化了,或者根本就无法被检测出来,代码的重新排序会让这些带阿弥变得更加难以阅读,并且让这些轨迹更加不可靠。

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_CFLAGS += -I $(LOCAL_PATH )/../bar
+
+ 使用'-l../bar/'将不会工作,以为它将等同于"-l$NDK_ROOT/../bar"
++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++
注意:在Android的NDK 1.5_r1,只适用于C源文件,而不适合C++。
这已得到纠正,以建立完整相匹配的Andr​​oid系统。

APP_CXXFLAGS
APP_CPPFLAGS的别名,已经考虑在将在未来的版本中废除了

APP_CPPFLAGS
当编译的只有C++源文件的时候,可以通过这个C++编译器来设置

注意:在Android NDK-1.5_r1中,这个标志可以应用于C和C++源文件中。并且得到了纠正,以建立完整的与系统相匹配的Android编译系统。你先可也可以使用APP_CFLAGS来应用于C或者C++源文件中。
建议使用APP_CFLAGS

APP_BUILD_SCRIPT
默认情况下,NDK编译系统会在$(APP_PROJECT_PATH)/jni目录下寻找名为Android.mk文件:
$(APP_PROJECT_PATH)/jni/Android.mk

如果你想覆盖此行为,你可以定义APP_BUILD_SCRIPT来指定一个备用的编译脚本。一个非绝对路径总是被解释为相对于NDK的顶层的目录。

APP_ABI
默认情况下,NDK的编译系统回味"armeabi"ABI生成机器代码。喜爱哪个相当于一个基于CPU可以进行浮点运算的ARMv5TE。你可以使用APP_ABI来选择一个不同的ABI。

比如:为了在ARMv7的设备上支持硬件FPU指令。可以使用
APP_ABI := armeabi-v7a

或者为了支持IA-32指令集,可以使用
APP_ABI := x86

或者为了同时支持这三种,可以使用
APP_ABI := armeabi armeabi-v7a x86

APP_STL
默认情况下,NDK的编译系统为最小的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

下面是一个Application.mk文件的示例:
APP_PROJECT_PATH := <path to project>

分享到:
评论
2 楼 sampras87 2013-05-04  
korntang 写道
NDK sample hello-jni里面就没有Application.mk啊

这个文件时可选的嘛!
1 楼 korntang 2011-10-27  
NDK sample hello-jni里面就没有Application.mk啊

相关推荐

    android ndk-stack使用说明。

    在项目目录中,需要确保已经正确配置了`jni`目录下的`Application.mk`文件。具体来说,应当将以下行添加到该文件中: ```makefile APP_OPTIM := debug ``` 这样做的目的是确保编译器在编译时采用调试模式,以便于...

    android-ndk-r6-crystax-2(2/2)

    4. **构建系统**:NDK通常使用mk文件(Android.mk和Application.mk)来管理构建过程。CrystaX NDK r6可能提供了更加灵活或强大的构建配置选项。 5. **文档和示例**:压缩包可能包含了使用CrystaX NDK的指南、API...

    Android NDK开发文档本地版

    Android JNI开发指南 Android.mk Application.mk-

    Jnidemo-master.3.17.final.ok(20200812.final.ok).zip

    3. Android.mk和Application.mk:这是Android NDK构建系统中的两个关键文件,用于配置编译环境,指定编译目标,以及设置编译选项等。 4. 示例应用:JNIDemo通常会包含一个简单的Android应用,演示了JNI的使用,比如...

    Eclipse Android NDK JNI 详细开发流程

    ### Eclipse Android NDK JNI 详细开发流程 #### 一、前言 在进行Android应用开发时,有时我们需要利用原生代码(通常是C/C++)来提高应用性能或访问某些特定硬件资源,这时就需要用到NDK(Native Development Kit...

    Android NDK开发示例

    这篇教程将深入探讨Android NDK开发,为初学者提供一个全面的入门指南。 NDK的核心功能是允许开发者在Android应用中集成高性能的本地代码,这对于处理计算密集型任务、游戏引擎、音视频处理和加密算法等场景尤其...

    Android NDK R9环境配置 开发教程 NDKhi工程源码)

    Android NDK R9环境配置与开发教程是针对Android平台原生代码开发的重要指南。NDK(Native Development Kit)是Google提供的一款工具集,允许开发者在Android应用中使用C和C++编写部分或全部代码,以实现性能优化...

    com.android.ide.eclipse.ndk_23

    1. **项目配置**:添加、编辑和删除Android.mk和Application.mk文件,这是构建原生代码的关键配置文件。 2. **编译和构建**:通过NDK插件可以执行ndk-build命令,编译C/C++源码,生成.so库文件。 3. **调试支持**:...

    Android NDK Demo

    《Android NDK实战指南——基于Android NDK Demo的探索》 Android NDK(Native Development Kit)是Android系统中用于开发原生代码的工具集,它允许开发者使用C、C++等语言编写性能高效的代码,尤其适合处理计算...

    android ffmpeg-android-java-2a627f6ecd

    1. **Android.mk 和 Application.mk**:FFmpeg的Android编译通常涉及编写这两个Makefile文件,它们定义了编译选项、目标平台、编译器设置等,以生成适用于Android的.so库文件。 2. **JNI(Java Native Interface)*...

    Packt.Android.NDK.Beginner's.Guide.2012

    3. **本地项目结构**:理解Android原生模块的项目结构,包括Android.mk和Application.mk文件的使用,用于构建和配置原生库。 4. **C/C++编程**:复习C/C++基础知识,如数据类型、控制流程、函数、指针等,并介绍...

    eclipse android ndk环境配置及项目编译超详细攻略

    5. **编写编译脚本**:编写`Android.mk`和`Application.mk`文件来控制编译过程。 6. **生成动态链接库**:通过`make APP=&lt;项目名&gt;`命令生成动态链接库文件,存放在项目的`libs`目录下。 通过以上步骤,您可以成功地...

    android NDK开发

    3. **构建系统**:NDK 包含了一个简化编译过程的系统,开发者可以通过创建 `Android.mk` 和 `Application.mk` 文件来指定要编译的源代码和目标应用,工具会自动处理编译和库集成的细节。 4. **兼容性**:NDK 适用于...

    Packt.Android.NDK.Beginners.Guide.2nd.Edition.1783989645

    4. **Android.mk与Application.mk**:这两个关键的构建文件用于定义项目编译规则,如何设置库依赖、编译目标和优化选项。 5. **预编译库和第三方库集成**:如何导入和使用预编译库,如OpenSSL、FFmpeg等,以及如何...

    Android NDK Beginner’s Guide第二章源码

    《Android NDK Beginner’s Guide》是一本面向初学者的指南,旨在帮助读者了解并掌握Android Native Development Kit(NDK)的使用。NDK是Google提供的一套工具集,允许开发者在Android平台上使用C和C++编写原生代码...

    Android NDK Beginner’s Guide第三章源码

    《Android NDK Beginner’s Guide》是一本面向初学者的指南,深入浅出地介绍了如何在Android平台上使用NDK进行原生代码开发。本章节主要关注的是第三章的源码,这部分内容通常会涵盖以下几个关键知识点: 1. **NDK...

    Android NDK Beginner's Guide 代码

    《Android NDK初学者指南》是一本专为开发者设计的指南,主要讲解如何在Android平台上使用NDK进行原生代码开发。NDK是Android Native Development Kit的缩写,它允许开发者使用C++和其他本地语言编写应用程序,从而...

    Android NDK Beginner’s Guide第六章源码

    《Android NDK Beginner’s Guide》是一本面向初学者的指南,深入浅出地介绍了如何使用Android Native Development Kit(NDK)进行开发。NDK是Android平台提供的一套工具,允许开发者使用C、C++等原生代码编写部分...

Global site tag (gtag.js) - Google Analytics