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.DebuggableRelease编译:

--------------------------------------------------


NDK r5中,ndk-build已经修改使得在debugrelease切换变得简单。这个可以使用NDK_DEBUG变量来完成。例如:


 $NDK/ndk-buildNDK_DEBUG=1    => 生成debug的二进制文件

 $NDK/ndk-buildNDK_DEBUG=0    => 生成release的二进制文件


如果你不指定NDK_DEBUGndk-build将会保持默认行为,即检查AndroidManifest.xml<application>是否有‘android:debuggable=true’。


重要:

如果你使用NDK r8(或更高的版本),你根本不需要修改你的AndroidManifest.xml文件!


这是因为如果你编译一个debugpackage(如用“ant debug”或者ADT插件相应的选项),工具将自动设置NDK_DEBUG1,生成本地debug文件。



为了方便,NDK生成的releasedebug对象文件放在不同的目录下(如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


来适配你的shellGNU 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,你可以参考一下上面提到的这些知识。