Android NDK How-To:
===================

A collection of tips and tricks for NDK users


How to force the display of build commands:
-------------------------------------------

Do "ndk-build V=1" and actual build commands will be
displayed. This can be used to verify that things are compiled
as you expect them to, and check for bugs in the NDK build system.

(The V=1 trick comes from the Linux kernel build system)


How to force a rebuild of all your sources:
-------------------------------------------

Use GNU Make's "-B" option, as in:

      ndk-build -B


How to store your native sources in a location other than $PROJECT/jni:
-----------------------------------------------------------------------

First, you can simply tell your $PROJECT/jni/Android.mk to include
another Android.mk that are located in different places.

Alternatively, you can define APP_BUILD_SCRIPT in your Application.mk
to point to an alternative Android.mk file.


How to build a project's native files without cd-ing to it:
-----------------------------------------------------------

Sometimes, you may need to rebuild a project's native file without
being able to cd to its top-level path from the command-line. This
is do-able by using the GNU-Make '-C &lt;path&gt;' option, as in:

        ndk-build -C &lt;project-path&gt;


How to store your Application.mk in a location other than $PROJECT/jni:
-----------------------------------------------------------------------

Starting with NDK r4, you can simply place the file under $PROJECT/jni/
and launch the 'ndk-build' script from your project tree.

If you want to use 'ndk-build' but place the file to a different location,
use a GNU Make variable override as:

        ndk-build NDK_APPLICATION_MK=/path/to/your/Application.mk

If you're using the legacy $NDK/apps/&lt;name&gt; build method, you can create
a symbolic link to your final Application.mk there. For example, imagine
that you wrote:

        $PROJECT/foo/Application.mk

You can create a symlink like with a command like:

        ln -s $PROJECT/foo  $NDK/apps/&lt;name&gt;

This will make $NDK/apps/&lt;name&gt;/Application.mk point directly to
$PROJECT/jni/Application.mk

Note that generated files will still go under $NDK/out/apps/&lt;name&gt; though.

Windows users: The NDK is only supported on Cygwin, which implements
symbolic links through the "ln -s" command, as in:

        ln -s  &lt;target&gt;  &lt;link&gt;


How to properly add include directories to your module declaration:
-------------------------------------------------------------------

If you define several modules, it is common to need to include one
module's header while compiling another one. For example, consider
the following example:

        $PROJECT/jni/foo/
          Android.mk
          foo.h
          foo.c

        $PROJECT/jni/bar/
          Android.mk
          bar.c

Where the 'bar.c' uses '#include &lt;foo.h&gt;'. You will need to add the
path to the 'foo' module in jni/bar/Android.mk to build it properly.

One is tempted to use the following:

        LOCAL_C_INCLUDES := ../foo

However this will not work because all compilation happens from the
directory where 'ndk-build' is invoked, and include files must be
relative to it.

The correct line is instead:

        LOCAL_C_INCLUDES := $(LOCAL_PATH)/../foo

Which uses a path relative to $(LOCAL_PATH), in the case where you would
need to move 'foo' and 'bar' to a deeper level in the 'sources' hierarchy.

In case you absolutely need it, you can also use NDK_APP_PROJECT_PATH to
point to your project directory:

        LOCAL_C_INCLUDES := $(NDK_APP_PROJECT_PATH)/jni/foo

However, we don't recommend using this, paths relative to $(LOCAL_PATH)
being better.
