| <html><body><pre>'ndk-build' Overview |
| |
| I. Usage: |
| --------- |
| |
| The Android NDK r4 introduced a new tiny shell script, named 'ndk-build', |
| to simplify building machine code. |
| |
| The script is located at the top-level directory of the NDK, and shall |
| be invoked from the command-line when in your application project |
| directory, or any of its sub-directories. For example: |
| |
| cd $PROJECT |
| $NDK/ndk-build |
| |
| Where $NDK points to your NDK installation path. You can also create an |
| alias or add $NDK to your PATH to avoid typing it every time. |
| |
| |
| II. Options: |
| ------------ |
| |
| All parameters to 'ndk-build' are passed directly to the underlying GNU Make |
| command that runs the NDK build scripts. Notable uses include: |
| |
| ndk-build --> rebuild required machine code. |
| ndk-build clean --> clean all generated binaries. |
| |
| ndk-build NDK_DEBUG=1 --> generate debuggable native code. |
| |
| ndk-build V=1 --> launch build, displaying build commands. |
| |
| ndk-build -B --> force a complete rebuild. |
| |
| ndk-build -B V=1 --> force a complete rebuild and display build |
| commands. |
| |
| ndk-build NDK_LOG=1 --> display internal NDK log messages |
| (used for debugging the NDK itself). |
| |
| ndk-build NDK_DEBUG=1 --> force a debuggable build (see below) |
| ndk-build NDK_DEBUG=0 --> force a release build (see below) |
| |
| ndk-build NDK_APP_APPLICATION_MK=<file> |
| --> rebuild, using a specific Application.mk pointed to by |
| the NDK_APP_APPLICATION_MK command-line variable. |
| |
| ndk-build -C <project> --> build the native code for the project |
| path located at <project>. Useful if you |
| don't want to 'cd' to it in your terminal. |
| |
| |
| III. Debuggable versus Release builds: |
| -------------------------------------- |
| |
| In NDK r5, ndk-build has been modified to make it easier to switch between |
| release and debug builds. This is done by using the NDK_DEBUG variable. |
| For example: |
| |
| $NDK/ndk-build NDK_DEBUG=1 => forces the generation of debug binaries |
| $NDK/ndk-build NDK_DEBUG=0 => forces the generation of release binaries |
| |
| If you don't specify NDK_DEBUG, ndk-build will keep its default behaviour, |
| which is to inspect the AndroidManifest.xml, if any, and see if its |
| <application> element has android:debuggable="true". |
| |
| IMPORTANT: If you use the build tools of SDK r8 (or higher), you |
| won't need to touch your AndroidManifest.xml file at all! |
| |
| That's because if you build a debug package (e.g. with |
| "ant debug" or the corresponding option of the ADT plugin), |
| the tool will automatically pick the native debug files |
| generated with NDK_DEBUG=1. |
| |
| Also, as a convenience, the release and debug object files generated by the |
| NDK are now stored in different directories (e.g. obj/local/<abi>/objs and |
| obj/local/<abi>/objs-debug). This avoids having to recompile all your sources |
| when you switch between these two modes (even when you only modified one or |
| two source files). |
| |
| |
| IV. Requirements: |
| ----------------- |
| |
| You need GNU Make 3.81 or later to use 'ndk-build' or the NDK in general. |
| The build scripts will detect that you're using a non-compliant Make tool |
| and will complain with an error message. |
| |
| If you have GNU Make 3.81 installed, but that it is not launched by the |
| default 'make' command, define GNUMAKE in your environment to point to it |
| before launching 'ndk-build'. For example: |
| |
| GNUMAKE=/usr/local/bin/gmake ndk-build |
| |
| Or to make the change more permanent: |
| |
| export GNUMAKE=/usr/local/bin/gmake |
| ndk-build |
| |
| Adapt to your shell and GNU Make 3.81 installation location. |
| |
| |
| V. Internals: |
| ------------- |
| |
| 'ndk-build' itself is a tiny wrapper around GNU Make, its purpose is simply |
| to invoke the right NDK build script, it is equivalent to; |
| |
| $GNUMAKE -f $NDK/build/core/build-local.mk [parameters] |
| |
| Where '$GNUMAKE' points to GNU Make 3.81 or later, and $NDK points to your |
| NDK installation directory. |
| |
| Use this knowledge if you want to invoke the NDK build script from other |
| shell scripts (or even your own Makefiles). |
| </pre></body></html> |