ndk-build’ Overview
1.使用:
---------------
Android NDK r4引入一个新的shell脚本,叫‘ndk-build’,用来简化编译机器代码。
这个脚本放在NDK的顶级目录下,你必须在你应用程序的目录或者子目录下,用命令行来调用。例如:
这个脚本位于NDK的根目录下,它要从你应用程序的目录或者子目录下,用命令行的方式来调用。例如:
cd $PROJECT
$NDK/ndk-build
$NDK指向你NDK的安装路径。你可以创建一个别名或者把$NDK加入到你的环境变量PATH中,避免每次都要输入完整的路径名。
2.选项:
-----------------
‘ndk-build’的所有参数直接传递给用来运行NDK编译脚本的GNU Make。主要的使用有:
ndk-build --> 重新编译所需的机器代码
ndk-buildclead --> 清除所有生成的二进制文件
ndk-buildNDK_DEBUG=1 --> 生成可调试的本地代码
ndk-buildV=1 --> 启动编译,显示编译命令
ndk-build–B --> 强制进行完整的重新编译
ndk-build –BV=1 --> 强制进行完整的重新编译,显示编译命令
ndk-buildNDK_LOG=1 --> 显示NDK内部日志信息
(用于调试NDK本身)
ndk-buildNDK_DEBUG=1 --> 进行debuggable编译(看下面)
ndk-buildNDK_DEBUG=0 --> 进行release编译(看下面)
ndk-buildNDK_APPLICATION_MK=<file>
--> 用NDK_APPLICATION_MK指向的Application.mk文件进行重新编译。
ndk-build –C<project>
--> 编译<project>指向的的本地代码,如果过你不想‘cd’进去的话。
3.Debuggable和Release编译:
--------------------------------------------------
在NDK r5中,ndk-build已经修改使得在debug和release切换变得简单。这个可以使用NDK_DEBUG变量来完成。例如:
$NDK/ndk-buildNDK_DEBUG=1 => 生成debug的二进制文件
$NDK/ndk-buildNDK_DEBUG=0 => 生成release的二进制文件
如果你不指定NDK_DEBUG,ndk-build将会保持默认行为,即检查AndroidManifest.xml中<application>是否有‘android:debuggable=true’。
重要:
如果你使用NDK r8(或更高的版本),你根本不需要修改你的AndroidManifest.xml文件!
这是因为如果你编译一个debugpackage(如用“ant debug”或者ADT插件相应的选项),工具将自动设置NDK_DEBUG为1,生成本地debug文件。
为了方便,NDK生成的release和debug对象文件放在不同的目录下(如obj/local<abi>/objs 和obj/local/<abi>/objs-debug)。当你在两种模式之间切换的时候,这样可以避免重新所有的源代码(即使你只修改了一两个源文件)。
4.必要条件:
--------------------
在使用‘ndk-build’或者NDK其他命令的时候,需要GNU Make 3.81或者更高的版本。否则,编译脚本会检测到你使用不兼容的Make工具,然后会报错退出。
如果你已经安装了GNU Make 3.81,但是并不是用默认的‘make’命令来启动的,你必须在启动‘ndk-build’之前,在环境变量中定义GNUMAKE指向它。例如:
GNUMAKE=/usr/local/bin/gmake ndk-build
或者让设置永久生效:
export GNUMAKE=/usr/local/bin/gmake
ndk-build
来适配你的shell和GNU Make 3.81安装的位置。
5.内部结构:
----------------------
‘ndk-build’本身是GNU Make的轻量级的包装,它的目的就是用来简化NDK编译脚本的调用,它等价于:
$GNUMAKE –f $NDK/build/core/build-local.mk [parameters]
‘$GNUMAKE’指向了GNU Make 3.81或者更高版本,$NDK指向了你NDK的安装目录。
如果你想从其他shell脚本(或者甚至是你自己的Makefiles)调用NDK,你可以参考一下上面提到的这些知识。
转载于:https://blog.51cto.com/ikinglai/1213586