`

Application.mk

 
阅读更多

配合android.mk 使用的make 文件还有一个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>

 

转载自:http://www.imobilebbs.com/wordpress/?p=2934

 

另外如果使用LOCAL_LDLIBS := -ljnigraphics

要指定android版本。APP_PLATFORM := android-8

否则会出现ndk-build产生错误error: android/bitmap.h找不到

分享到:
评论

相关推荐

    Application.mk 参数选项说明

    从google开发者官网转载,避免每次都要fan墙才能查阅的麻烦。

    android ndk application.mk

    android ndk+jni开发,两种方式cmake编译,和用application.mk使用ndk-build编译

    ndk编译JRTPLIB源文件(包括相应的Android.mk和Application.mk文件)

    ndk编译JRTPLIB源文件(包括相应的Android.mk和Application.mk文件) 使用cygwin+NDK可直接编译通过 相关cygwin命令,文件夹放在c盘上 cd /cygdrive/c/jrtp export NDK_MODULE_PATH=/cygdrive/c/jrtp /cygdrive/c...

    CUDA.Application.Design.and.Development,.Farber,.MK,.2011

    CUDA.Application.Design.and.Development,.Farber,.MK,.2011

    Android ndk Android.mk

    这个虽然只是个简单的jnidemo、但是涵盖了Android.mk 和Application.mk 的原理 重点是Android NDK编译的理解 mac 系统下 切换到jni目录,然后呢个 ndk-build

    Android编译JRTPLIB源文件(包括相应的.mk)

    ndk编译JRTPLIB源文件(包括相应的Android.mk和Application.mk文件) 使用cygwin+NDK可直接编译通过 相关cygwin命令,文件夹放在c盘上 cd /cygdrive/c/jrtp export NDK_MODULE_PATH=/cygdrive/c/jrtp /cygdrive...

    Android FaceDetection Demo

    ├─main │ │ │ AndroidManifest.xml │ │ │ │ │ ├─java ...│ │ │ Application.mk │ │ │ face_detection_jni.cpp │ │ │ face_recognize_jni.cpp │ │ │ jkit.cpp │ │ │ jkit.h

    已经编译过的sipdroid

    修改jni目录下的Application.mk文件中:APP_PROJECT_PATH := $(call my-dir)这一行,将其修改为:APP_PROJECT_PATH := $(call my-dir)/.. 3.打开jni目录下的Android.mk文件,在 SILK := silk LOCAL_MODULE := ...

    高焕堂<应用框架原理与程序设计>源代码(Eclipse)

    (关于MK文件的语法请看NDK安装目录docs下的ANDROID-MK.TXT,或者网上查找相关资料) Ex36CModel  ├ Application.mk  ├ jni ├ Android.mk ├ HalfAdder.c ├ HalfAdder.h ├ lw_oopc.h ...

    NDK编译clapack, clapack.7z

    原生lapack是用fortran语言写... 5、如果编译出现(87)错误,则分别在jni目录下的android.mk和application.mk文件中分别加上 LOCAL_SHORT_COMMANDS := true 和 APP_SHORT_COMMANDS := true即可。 最后,本人亲测可行。

    ndk build mk文件

    ndk直接编译cpp code需要的mk文件,包括Android.mk和Application.mk两个文 件,看里面备注来决定编译bin还是so

    ndk命令行编译so库

    最近怀旧了一下经典,记录一下用NDK命令行编译so库的...ndk-build NDK_PROJECT_PATH=项目根目录 APP_BUILD_SCRIPT=项目根目录/Android.mk NDK_APPLICATION_MK=项目根目录/Application.mk 4.源文件和Android.mk和Applic

    Android NDK开发文档本地版

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

    serialPort_demo.rar

    使用NDK生成SerialPort.so的相关文件、配置:Android.mk、Application.mk、SerialPort.c、SerialPort.h、termios.h

    Zbar_NDK工程(修改可编译)

    修改了Android.mk文件和Application.mk,支持编译成64位so库

    Android之JNI环境配置以及调用

    android 环境下搭建JNI开发环境,以及Android.mk以及Application.mk相关配置文件,以及方法说明。

    Android调用JNI接口使用C++动态库进行AES256位加密

    具有实现AES256位加密的C++代码,Application.mk Android.mk文件,JNI头文件和cpp文件。以及使用示例

    libwebp源码及编译.zip

    【Android 安装包优化】WebP 应用 ( libwebp 源码下载 | Android.mk 和 Application.mk 构建脚本修改 | libwebp 函数库编译 ) https://hanshuliang.blog.csdn.net/article/details/116104445 博客资源

    cocos2d-1.0.1-x-0.13.0-beta--android-ndk-windows构建批处理.zip

    3. jni/Application.mk 文件中加入 APP_MODULE : = android-4 4. 在jni目录中添加双击此批处理即可编译库文件 注1:0.13版本的cocosw2d-x 搭配 Eclipse 也可以使用这个批处理,不要使用NDK自带的ndk-build.cmd ...

Global site tag (gtag.js) - Google Analytics