ndk=true

ndk.win_download=android-ndk-r8c-windows.zip
ndk.win_bytes=233787657
ndk.win_checksum=3ff1570fa4ea865b7702507ea43dbae4

ndk.mac_download=android-ndk-r8c-darwin-x86.tar.bz2
ndk.mac_bytes=214270840
ndk.mac_checksum=74a23e9e058512121835e0d6932e72d5

ndk.linux_download=android-ndk-r8c-linux-x86.tar.bz2
ndk.linux_bytes=179945337
ndk.linux_checksum=b0851346ff90c9266bc050016a228319

page.title=Android NDK

@jd:body


 <div id="qv-wrapper">
    <div id="qv">
      <h2>In this document</h2>

      <ol>
        <li><a href="#Downloads">Downloads</a></li>
        <li><a href="#Revisions">Revisions</a></li>
        <li><a href="#Reqs">System and Software Requirements</a></li>
        <li><a href="#Installing">Installing the NDK</a></li>
        <li><a href="#GetStarted">Getting Started with the NDK</a>
          <ol>
            <li><a href="#Using">Using the NDK</a></li>
          </ol>
        </li>
        <li><a href="#Contents">Contents of the NDK</a>
          <ol>
            <li><a href="#Tools">Development tools</a></li>
            <li><a href="#Docs">Documentation</a></li>
            <li><a href="#Samples">Sample apps</a></li>
          </ol>
        </li>
      </ol>
    </div>
  </div>

  <p>The NDK is a toolset that allows you to implement parts
  of your app using native-code languages such as C and C++. For certain types of apps,
  this can be helpful so you can reuse existing code libraries written in these
  languages, but most apps do not need the Android NDK.</p>

  <p>Before downloading the NDK, you should understand that <strong>the NDK
   will not benefit most apps</strong>. As a developer, you need to balance its benefits
  against its drawbacks. Notably, using native code on Android
  generally does not result in a noticable performance improvement,
  but it always increases your app complexity. In general, you should only use the NDK
  if it is essential to your app&mdash;never because you simply prefer to program in C/C++.</p>

  <p>Typical good candidates for the NDK are self-contained, CPU-intensive operations that don't
  allocate much memory, such as signal processing, physics simulation, and so on. When examining
  whether or not you should develop in native code, think about your requirements and see if the
  Android framework APIs provide the functionality that you need.</p>


<h2 id="Downloads">Downloads</h2>


<script>
$('#Downloads').after($('#download-table'));
</script>


<h2 id="Revisions">Revisions</h2>

<p>The sections below provide information and notes about successive releases of
the NDK, as denoted by revision number. </p>


<div class="toggle-content opened">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img"
      alt="">Android NDK, Revision 8c</a> <em>(November 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
    <dl>
      <dt>Important changes:</dt>

      <dd>
        <ul>
          <li>Added the Clang 3.1 compiler to the NDK. The GNU Compiler Collection (GCC) 4.6 is
          still the default, so you must explicitly enable the Clang compiler option as follows:
            <ul>
              <li>For {@code ndk-build}, export {@code NDK_TOOLCHAIN_VERSION=clang3.1} <em>or</em>
                add this environment variable setting to {@code Application.mk}.</li>
              <li>For standalone builds, add {@code --llvm-version=3.1} to
                {@code make-standalone-toolchain.sh} and replace {@code CC} and {@code CXX} in your
                makefile with {@code &lt;tool-path&gt;/bin/clang} and
                {@code &lt;tool-path&gt;/bin/clang++}. See {@code STANDALONE-TOOLCHAIN.html} for
                details.</li>
            </ul>
            <p class="note"><strong>Note:</strong> This feature is experimental. Please try it and
            <a href="http://code.google.com/p/android/issues/list">report any issues</a>.</p></li>
          <li>Added Gold linker {@code ld.gold} for the Windows toolchain. Gold linker is also the
            default for ARM and X86 on all hosts. You may override it to use the {@code ld.bfd}
            linker by adding {@code LOCAL_LDFLAGS += -fuse-ld=bfd} to {@code Android.mk}, or by passing
            {@code -fuse-ld=bfd} to the g++/clang++ command line that does the linking.</li>
          <li>Added checks for spaces in the NDK path to the {@code ndk-build[.cmd]} and
            {@code ndk-gdb} scripts, to prevent build errors that are difficult to diagnose.</li>
          <li>Made the following changes to API level handling:
            <ul>
              <li>Modified build logic so that projects that specify {@code android-10} through
                {@code android-13} in {@code APP_PLATFORM}, {@code project.properties} or
                {@code default.properties} link against {@code android-9} instead of
                {@code android-14}.
              <li>Updated build so that executables using android-16 (Jelly Bean) or higher are
                compiled with the {@code -fPIE} option for position-independent executables (PIE).
                A new {@code APP_PIE} option allows you to control this behavior. See {@code
                APPLICATION-MK.html} for details.
                <p class="note">
                  <strong>Note:</strong> All API levels above 14 still link against {@code
                  platforms/android-14} and no new {@code platforms/android-N} have been added.
                </p></li>
              <li>Modified {@code ndk-build} to provide warnings if the adjusted API level is larger
              than {@code android:minSdkVersion} in the project's {@code AndroidManifest.xml}.</li>
            </ul>
          </li>
          <li>Updated the {@code cpu-features} helper library to include more ARM-specific features.
          See {@code sources/android/cpufeatures/cpu-features.h} for details.</li>
          <li>Modified the long double on the X86 platform to be 8 bytes. This data type is now the
          same size as a double, but is still treated as a distinct type.</li>
          <li>Updated build for {@code APP_ABI=armeabi-v7a}:
            <ul>
              <li>Modified this build type to pass the {@code -march=armv7-a} parameter
              to the linker. This change ensures that v7-specific libraries and {@code crt*.o} are
              linked correctly.</li>
              <li>Added {@code -mfpu=vfpv3-d16} to {@code ndk-build} instead of the
              {@code -mfpu=vfp} option used in previous releases.</li>
            </ul>
          </li>
        </ul>
      </dd>
    </dl>

    <dl>
      <dt>Important bug fixes:</dt>

      <dd>
        <ul>
          <li>Fixed an issue where running {@code make-standalone-toolchain.sh} with root privileges
            resulted in the stand alone tool chain being inaccessible to some users.
            (<a href="http://code.google.com/p/android/issues/detail?id=35279">Issue 35279</a>)
            <ul>
              <li>All files and executables in the NDK release package are set to have read and
                execute permissions for all.</li>
              <li>The ownership/group of {@code libstdc++.a} is now preserved when copied.</li>
            </ul>
          </li>
          <li>Removed redundant {@code \r} from Windows prebuilt {@code echo.exe}. The redundant
          {@code \r} caused {@code gdb.setup} to fail in the GNU Debugger (GDB) because it
          incorrectly became part of the path.
          (<a href="http://code.google.com/p/android/issues/detail?id=36054">Issue 36054</a>)</li>
          <li>Fixed Windows parallel builds that sometimes failed due to timing issues in the
          {@code host-mkdir} implementation.
          (<a href="http://code.google.com/p/android/issues/detail?id=25875">Issue 25875</a>)</li>
          <li>Fixed GCC 4.4.3 GNU {@code libstdc++} to <em>not</em> merge {@code typeinfo} names by
          default. For more details, see
          {@code toolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo}.
          (<a href="http://code.google.com/p/android/issues/detail?id=22165">Issue 22165</a>)</li>
          <li>Fixed problem on {@code null} context in GCC 4.6
          {@code cp/mangle.c::write_unscoped_name}, where GCC may crash when the context is
          {@code null} and dereferenced in {@code TREE_CODE}.</li>
          <li>Fixed GCC 4.4.3 crashes on ARM NEON-specific type definitions for floats.
          (<a href="http://code.google.com/p/android/issues/detail?id=34613">Issue 34613</a>)</li>
          <li>Fixed the {@code STLport} internal {@code _IteWrapper::operator*()} implementation
          where a stale stack location holding the dereferenced value was returned and caused
          runtime crashes.
          (<a href="http://code.google.com/p/android/issues/detail?id=38630">Issue 38630</a>)</li>

          <li>ARM-specific fixes:
            <ul>
              <li>Fixed ARM GCC 4.4.3/4.6 {@code g++} to not warn that the <em>mangling of
              &lt;va_list&gt; was changed in GCC 4.4</em>. The workaround using the
              {@code -Wno-psabi} switch to avoid this warning is no longer required.</li>
              <li>Fixed an issue when a project with {@code .arm} or {@code .neon} suffixes in
              {@code LOCAL_SRC_FILES} also used {@code APP_STL}. With {@code APP_STL}, the
              {@code ndk-build} script searches for C++ files in {@code LOCAL_SRC_FILES} before
              adding STL {@code header/lib} paths to compilation. Modified {@code ndk-build} to
              filter out {@code .arm} and {@code .neon} suffixes before the search, otherwise items
              in {@code LOCAL_SRC_FILES} like {@code myfile.cpp.arm.neon} won't be compiled as C++
              code.</li>
              <li>Fixed {@code binutils-2.21/ld.bfd} to be capable of linking object from older
              binutils without {@code tag_FP_arch}, which was producing <em>assertion fail</em>
              error messages in GNU Binutils.
              (<a href="http://code.google.com/p/android/issues/detail?id=35209">Issue 35209</a>)
              </li>
              <li>Removed <em>Unknown EABI object attribute 44</em> warning when
              {@code binutils-2.19/ld} links prebuilt object by newer {@code binutils-2.21}</li>
              <li>Fixed an issue in GNU {@code stdc++} compilation with both {@code -mthumb} and
              {@code -march=armv7-a}, by modifying {@code make-standalone-toolchain.sh} to populate
              {@code headers/libs} in sub-directory {@code armv7-a/thumb}.
              (<a href="http://code.google.com/p/android/issues/detail?id=35616">Issue 35616</a>)
              </li>
              <li>Fixed <em>unresolvable R_ARM_THM_CALL relocation</em> error.
              (<a href="http://code.google.com/p/android/issues/detail?id=35342">Issue 35342</a>)
              </li>
              <li>Fixed internal compiler error at {@code reload1.c:3633}, caused by the ARM
              back-end expecting the wrong operand type when sign-extend from {@code char}.
              (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50099">GCC Issue 50099</a>)</li>
              <li>Fixed internal compiler error with negative shift amount.
              (<a href="http://gcc.gnu.org/ml/gcc-patches/2011-10/msg00594.html">GCC Issue</a>)</li>
            </ul>
          </li>

          <li>Fixed {@code -fstack-protector} for X86, which is also the default for the
          {@code ndk-build} x86 ABI target.</li>

          <li>MIPS-specific fixes:
            <ul>
              <li>Fixed {@code STLport} endian-ness by setting {@code _STLP_LITTLE_ENDIAN} to 1 when
              compiling MIPS {@code libstlport_*}.</li>
              <li>Fixed GCC {@code __builtin_unreachable} issue when compiling LLVM.
              (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54369">GCC Issue 54369</a>)</li>
              <li>Backported fix for {@code cc1} compile process consuming 100% CPU.
              (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50380">GCC Issue 50380</a>)</li>
            </ul>
          </li>

          <li>GNU Debugger-specific fixes:
            <ul>
              <li>Disabled Python support in gdb-7.x at build, otherwise the gdb-7.x configure
              function may pick up whatever Python version is available on the host and build
              {@code gdb} with a hard-wired dependency on a specific version of Python.
              (<a href="http://code.google.com/p/android/issues/detail?id=36120">Issue 36120</a>)
              </li>
              <li>Fixed {@code ndk-gdb} when {@code APP_ABI} contains {@code all} and matchs none
              of the known architectures.
              (<a href="http://code.google.com/p/android/issues/detail?id=35392">Issue 35392</a>)
              </li>
              <li>Fixed Windows pathname support, by keeping the {@code :} character if it looks
              like it could be part of a Windows path starting with a drive letter.
              (<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=12843">GDB Issue 12843</a>)
              </li>
              <li>Fixed adding of hardware breakpoint support for ARM in {@code gdbserver}.
              (<a href="http://sourceware.org/ml/gdb-patches/2011-09/msg00200.html">GDB Issue</a>)
              </li>
              <li>Added fix to only read the current {@code solibs} when the linker is consistent.
              This change speeds up {@code solib} event handling.
              (<a href="http://code.google.com/p/android/issues/detail?id=37677">Issue 37677</a>)
              </li>
              <li>Added fix to make repeated attempts to find {@code solib} breakpoints. GDB now
              retries {@code enable_break()} during every call to {@code svr4_current_sos()} until
              it succeeds.
              (<a href="https://android-review.googlesource.com/#/c/43563">Change 43563</a>)</li>
              <li>Fixed an issue where {@code gdb} would not stop on breakpoints placed in
              {@code dlopen-ed} libraries.
              (<a href="http://code.google.com/p/android/issues/detail?id=34856">Issue 34856</a>)
              </li>
              <li>Fixed {@code SIGILL} in dynamic linker when calling {@code dlopen()}, on system
              where {@code /system/bin/linker} is stripped of symbols and
              {@code rtld_db_dlactivity()} is implemented as {@code Thumb}, due to not preserving
              {@code LSB} of {@code sym_addr}.
              (<a href="http://code.google.com/p/android/issues/detail?id=37147">Issue 37147</a>)
              </li>
            </ul>
          </li>
        </ul>
      </dd>
    </dl>

    <dl>
      <dt>Other bug fixes:</dt>

      <dd>
        <ul>
          <li>Fixed NDK headers:
            <ul>
              <li>Fixed {@code arch-mips/include/asm/*} code that was incorrectly removed from
              original kernel. (<a href="https://android-review.googlesource.com/#/c/43335">Change
              43335</a>)</li>
              <li>Replaced struct member data {@code __unused} with {@code __linux_unused} in
              {@code linux/sysctl.h} and {@code linux/icmp.h} to avoid conflict with
              {@code #define __unused} in {@code sys/cdefs.h}.</li>
              <li>Fixed {@code fenv.h} for enclosed C functions with {@code __BEGIN_DECLS} and
              {@code __END_DECLS}.</li>
              <li>Removed unimplemented functions in {@code malloc.h}.</li>
              <li>Fixed {@code stdint.h} defintion of {@code uint64_t} for ANSI compilers.
              (<a href="http://code.google.com/p/android/issues/detail?id=1952">Issue 1952</a>)</li>
              <li>Fixed preprocessor macros in {@code &lt;arch&gt;/include/machine/*}.</li>
              <li>Replaced {@code link.h} for MIPS with new version supporting all platforms.</li>
              <li>Removed {@code linux-unistd.h}</li>
              <li>Move GLibc-specific macros {@code LONG_LONG_MIN}, {@code LONG_LONG_MAX} and
              {@code ULONG_LONG_MAX} from {@code &lt;pthread.h&gt;} to {@code &lt;limits.h&gt;}.</li>
            </ul>
          </li>
          <li>Fixed a buffer overflow in {@code ndk-stack-parser}.</li>
          <li>Fixed {@code _STLP_USE_EXCEPTIONS}, when not defined, to omit all declarations
          and uses of {@code __Named_exception}. Compiling and use of {@code __Named_exception}
          settings only occurs when {@code STLport} is allowed to use exceptions.</li>
          <li>Fixed building of Linux-only NDK packages without also building Windows code. Use the
          following settings to perform this type of build:
          <pre>./build/tools/make-release.sh --force --systems=linux-x86</pre></li>
          <li>Fixed {@code libc.so} so it does not export {@code atexit()} and {@code __do_handler}.
          These symbols are exported for ARM builds by the system version of the C library to
          support legacy native libraries. NDK-generated should never reference them directly.
          Instead, each shared library or executable should embed its own version of these symbols,
          provided by {@code crtbegin_*.o}.
          <p>If your project is linked with the {@code -nostdlib -Wl,--no-undefined} options, you
          must provide your own {@code __dso_handle} because {@code crtbegin_so.o} is not linked in
          this case. The content of {@code __dso_handle} does not matter, as shown in the following
          example code:</p>
<pre>
extern "C" {
  extern void *__dso_handle __attribute__((__visibility__ ("hidden")));
  void *__dso_handle;
}
</pre>
          </li>
          <li>Fixed symbol decoder for ARM used in {@code objdump} for {@code plt} entries to
          generate a more readable form {@code function@plt}.</li>
          <li>Removed the following symbols, introduced in GCC 4.6 {@code libgcc.a}, from
          the X86 platform {@code libc.so} library: {@code __aeabi_idiv0}, {@code __aeabi_ldiv0},
          {@code __aeabi_unwind_cpp_pr1}, and {@code __aeabi_unwind_cpp_pr2}.</li>
          <li>Removed unused {@code .ctors}, {@code .dtors}, and {@code .eh_frame} in MIPS
          {@code crt*_so.S}.</li>
          <li>Updated {@code ndk-gdb} so that it only takes the last line of output for
          {@code ndk-build} {@code DUMP_XXXX}. This change ensures that if {@code Application.mk} or
          {@code Android.mk} print something with {@code $(info ...)} syntax, it does not get
          injected into the result of {@code DUMP_XXXX}.
          (<a href="https://groups.google.com/d/msg/android-ndk/-/ew0lTWGr1UEJ">More info</a>)</li>
        </ul>
      </dd>
    </dl>

    <dl>
      <dt>Other changes:</dt>

      <dd>
        <ul>
          <li>Removed {@code arch-x86} and {@code arch-mips} headers from
          {@code platforms/android-[3,4,5,8]}. Those headers were incomplete, since both X86 and
          MIPS ABIs are only supported at API 9 or higher.</li>
          <li>Simplified c++ include path in standalone packages, as shown below.
          (<a href="http://code.google.com/p/android/issues/detail?id=35279">Issue 35279</a>)
<pre>
&lt;path&gt;/arm-linux-androideabi/include/c++/4.6.x-google
  to:
&lt;path&gt;/include/c++/4.6/
</pre></li>
          <li>Fixed {@code ndk-build} to recognize more C++ file extensions by default:
          {@code .cc .cp .cxx .cpp .CPP .c++ .C}. You may still use {@code LOCAL_CPP_EXTENSION} to
          overwrite these extension settings.</li>
          <li>Fixed an issue in {@code samples/san-angeles} that caused a black screen or freeze
          frame on re-launch.</li>
          <li>Replaced deprecated APIs in NDK samples.
          (<a href="http://code.google.com/p/android/issues/detail?id=20017">Issue 20017</a>)
            <ul>
              <li>{@code hello-gl2} from android-5 to android-7</li>
              <li>{@code native-activity} from android-9 to android-10</li>
              <li>{@code native-audio} from android-9 to android-10</li>
              <li>{@code native-plasma} from android-9 to android-10</li>
            </ul>
          </li>
          <li>Added new branding for Android executables with a simpler scheme in section
          {@code .note.android.ident} (defined in {@code crtbegin_static/dynamic.o}) so that
          debugging tools can act accordingly. The structure member and values are defined as
          follows:
<pre>
static const struct {
  int32_t namesz;  /* = 8,  sizeof ("Android") */
  int32_t descsz;  /* = 1 * sizeof(int32_t) */
  int32_t type;    /* = 1, ABI_NOTETYPE */
  char name[sizeof "Android"];  /* = "Android" */
  int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */
}
</pre>
            <p>The previous branding options in section {@code .note.ABI-tag} are deprecated.</p>
          </li>
          <li>Added a new script {@code run-tests-all.sh} which calls {@code run-tests.sh} and
          {@code standalone/run.sh} with various conditions. The script {@code run-tests.sh} runs
          without the {@code --abi} option, and is enhanced to compile most of the tests for all
          supported ABIs and run on all attached devices</li>
        </ul>
      </dd>
    </dl>

  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 8b</a> <em>(July 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p>The main features of this release are a new GNU Compiler Collection (GCC) 4.6 toolchain and
GNU Debugger (GDB) 7.3.x which adds debugging support for the Android 4.1 (API Level 16) system
image.</p>

    <dl>
      <dt>Important bug fixes:</dt>

      <dd>
        <ul>
          <li>Fixed {@code LOCAL_SHORT_COMMANDS} issues on Mac OS, Windows Cygwin environments for
static libraries. List file generation is faster, and it is not regenerated to avoid repeated
project rebuilds.</li>
          <li>Fixed several issues in {@code ndk-gdb}:
            <ul>
              <li>Updated tool to pass flags {@code -e}, {@code -d} and {@code -s} to adb more
consistently.</li>
              <li>Updated tool to accept device serial names containing spaces.</li>
              <li>Updated tool to retrieve {@code /system/bin/link} information, so {@code gdb} on
the host can set a breakpoint in {@code __dl_rtld_db_dlactivity} and be aware of linker activity
(e.g., rescan {@code solib} symbols when {@code dlopen()} is called).</li>
            </ul>
          </li>
          <li>Fixed {@code ndk-build clean} on Windows, which was failing to remove
{@code ./libs/*/lib*.so}.</li>
          <li>Fixed {@code ndk-build.cmd} to return a non-zero {@code ERRORLEVEL} when {@code make}
fails.</li>
          <li>Fixed {@code libc.so} to stop incorrectly exporting the {@code __exidx_start} and
{@code __exidx_end} symbols.</li>
          <li>Fixed {@code SEGV} when unwinding the stack past {@code __libc_init} for ARM and
MIPS.</li>
        </ul>
      </dd>
    </dl>

    <dl>
      <dt>Important changes:</dt>

      <dd>
        <ul>
          <li>Added GCC 4.6 toolchain ({@code binutils} 2.21 with {@code gold} and GDB 7.3.x) to
co-exist with the original GCC 4.4.3 toolchain ({@code binutils} 2.19 and GDB 6.6).</p>
            <ul>
              <li>GCC 4.6 is now the default toolchain. You may set {@code
NDK_TOOLCHAIN_VERSION=4.4.3} in {@code Application.mk} to select the original one.</li>
              <li>Support for the {@code gold} linker is only available for ARM and x86
architectures on Linux and Mac OS hosts. This support is disabled by default. Add {@code
LOCAL_LDLIBS += -fuse-ld=gold} in {@code Android.mk} to enable it.</li>
              <li>Programs compiled with {@code -fPIE} require the new {@code GDB} for debugging,
including binaries in Android 4.1 (API Level 16) system images.</li>
              <li>The {@code binutils} 2.21 {@code ld} tool contains back-ported fixes from
version 2.22:
                <ul>
                  <li>Fixed {@code ld --gc-sections}, which incorrectly retains zombie references to
external libraries. (<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=13177">more
info</a>).</li>
                  <li>Fixed ARM {@code strip} command to preserve the original {@code p_align} and
{@code p_flags} in {@code GNU_RELRO} section if they are valid. Without this fix, programs
built with {@code -fPIE} could not be debugged. (<a
href="http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/elf.c.diff?cvsroot=src&r1=1.552&r2=1.553">more info</a>)</li>
                </ul>
              </li>
              <li>Disabled {@code sincos()} optimization for compatibility with older
                platforms.</li>
            </ul>
          </li>

          <li>Updated build options to enable the Never eXecute (NX) bit and {@code relro}/{@code
bind_now} protections by default:
            <ul>
              <li>Added {@code --noexecstack} to assembler and {@code -z noexecstack} to linker
that provides NX protection against buffer overflow attacks by enabling NX bit on stack and
heap.</li>
              <li>Added {@code -z relro} and  {@code -z now} to linker for hardening of internal
data sections after linking to guard against security vulnerabilities caused by memory corruption.
(more info: <a href="http://www.akkadia.org/drepper/nonselsec.pdf">1</a>,
<a href="http://tk-blog.blogspot.com/2009/02/relro-not-so-well-known-memory.html">2</a>)</li>

              <li>These features can be disabled using the following options:
                <ol>
                  <li>Disable NX protection by setting the {@code --execstack} option for the
assembler and {@code -z execstack} for the linker.</li>
                  <li>Disable hardening of internal data by setting the {@code -z norelro} and
{@code -z lazy} options for the linker.</li>
                  <li>Disable these protections in the NDK {@code jni/Android.mk} by setting the
following options:
<pre>
LOCAL_DISABLE_NO_EXECUTE=true  # disable "--noexecstack" and "-z noexecstack"
DISABLE_RELRO=true             # disable "-z relro" and "-z now"</li>
</pre>
                </ol>
                <p>See {@code docs/ANDROID-MK.html} for more details.</p>
              </li>
            </ul>
          </li>

          <li>Added branding for Android executables with the {@code .note.ABI-tag} section (in
{@code crtbegin_static/dynamic.o}) so that debugging tools can act accordingly. The structure
member and values are defined as follows:</p>
<pre>
static const struct {
  int32_t namesz;  /* = 4,  sizeof ("GNU") */
  int32_t descsz;  /* = 6 * sizeof(int32_t) */
  int32_t type;    /* = 1 */
  char  name[sizeof "GNU"];  /* = "GNU" */
  int32_t os;      /* = 0 */
  int32_t major;   /* = 2 */
  int32_t minor;   /* = 6 */
  int32_t teeny;   /* = 15 */
  int32_t os_variant;  /* = 1 */
  int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */
}</pre>
          </li>
        </ul>
      </dd>
    </dl>

    <dl>
      <dt>Other bug fixes:</dt>

      <dd>
        <ul>
          <li>Fixed {@code mips-linux-gnu} relocation truncated to fit {@code R_MIPS_TLS_LDM} issue.
            (<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=12637">more info</a>)</li>
          <li>Fixed {@code ld} tool segfaults when using {@code --gc-sections}.
            (<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=12845">more info</a>)
          </li>
          <li>Fixed MIPS {@code GOT_PAGE} counting issue.
            (<a href="http://sourceware.org/ml/binutils/2011-05/msg00198.html">more info</a>)</li>
          <li>Fixed follow warning symbol link for {@code mips_elf_count_got_symbols}.</li>
          <li>Fixed follow warning symbol link for {@code mips_elf_allocate_lazy_stub}.</li>
          <li>Moved MIPS {@code .dynamic} to the data segment, so that it is writable.</li>
          <li>Replaced hard-coded values for symbols with correct segment sizes for MIPS.</li>
          <li>Removed the {@code -mno-shared} option from the defaults in the MIPS toolchain.
The default for Android toolchain is {@code -fPIC} (or {@code -fpic} if supported). If you do not
explicitly specify {@code -mshared}, {@code -fpic}, {@code -fPIC}, {@code -fpie}, or {@code -fPIE},
the MIPS compiler adds {@code -mno-shared} that turns off PIC. Fixed compiler not to add
{@code -mno-shared} in this case.</li>
          <li>Fixed wrong package names in samples {@code hello-jni} and {@code two-libs} so that
the {@code tests} project underneath it can compile.</li>
        </ul>
      </dd>
    </dl>

    <dl>
      <dt>Other Changes:</dt>

      <dd>
        <ul>
          <li>Changed locations of binaries:
            <ul>
              <li>Moved {@code gdbserver} from
{@code toolchain/&lt;arch-os-ver&gt;/prebuilt/gdbserver} to
{@code prebuilt/android-&lt;arch&gt;/gdbserver/gdbserver}.</li>
              <li>Renamed x86 toolchain prefix from {@code i686-android-linux-} to
{@code i686-linux-android-}.</li>
              <li>Moved {@code sources/cxx-stl/gnu-libstdc++/include} and {@code lib} to
{@code sources/cxx-stl/gnu-libstdc++/4.6} when compiled with GCC 4.6, or
{@code sources/cxx-stl/gnu-libstdc++/4.4.3} when compiled with GCC 4.4.3.</li>
              <li>Moved {@code libbfd.a} and {@code libintl.a} from {@code lib/} to {@code
lib32/}.</li>
            </ul>
          </li>

          <li>Added and improved various scripts in the rebuild and test NDK toolchain:
            <ul>
              <li>Added {@code build-mingw64-toolchain.sh} to generate a new Linux-hosted toolchain
that generates Win32 and Win64 executables.</li>
              <li>Improved speed of {@code download-toolchain-sources.sh} by using the {@code
clone} command and only using {@code checkout} for the directories that are needed to build the NDK
toolchain binaries.</li>
              <li>Added {@code build-host-gcc.sh} and {@code build-host-gdb.sh} scripts.</li>
              <li>Added {@code tests/check-release.sh} to check the content of a given NDK
installation directory, or an existing NDK package.</li>
              <li>Rewrote the {@code tests/standalone/run.sh} standalone tests .</li>
            </ul>
          </li>
          <li>Removed {@code if_dl.h} header from all platforms and architectures. The {@code
AF_LINK} and {@code sockaddr_dl} elements it describes are specific to BSD (i.e., they don't exist
in Linux).</li>
        </ul>
      </dd>
    </dl>

  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 8</a> <em>(May 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p>This release of the NDK includes support for MIPS ABI and a few additional fixes.</p>

    <dl>
      <dt>New features:</dt>

      <dd>
        <ul>
          <li>Added support for the MIPS ABI, which allows you to generate machine code that runs on
            compatible MIPS-based Android devices. Major features for MIPS include MIPS-specific
            toolchains, system headers, libraries and debugging support. For more details regarding
            MIPS support, see {@code docs/CPU-MIPS.html} in the NDK package.

              <p>By default, code is generated for ARM-based devices. You can add {@code mips} to
              your {@code APP_ABI} definition in your {@code Application.mk} file to build
              for MIPS platforms. For example, the following line instructs {@code ndk-build}
              to build your code for three distinct ABIs:</p>

              <pre>APP_ABI := armeabi armeabi-v7a <strong>mips</strong></pre>

              <p>Unless you rely on architecture-specific assembly sources, such as ARM assembly
              code, you should not need to touch your {@code Android.mk} files to build MIPS
              machine code.</p>
          </li>

          <li>You can build a standalone MIPS toolchain using the {@code --arch=mips}
          option when calling <code>make-standalone-toolchain.sh</code>. See
          {@code docs/STANDALONE-TOOLCHAIN.html} for more details.
          </li>
        </ul>

        <p class="note"><strong>Note:</strong> To ensure that your applications are available
to users only if their devices are capable of running them, Google Play filters applications based
on the instruction set information included in your application ? no action is needed on your part
to enable the filtering. Additionally, the Android system itself also checks your application at
install time and allows the installation to continue only if the application provides a library that
is compiled for the device's CPU architecture.</p>
      </dd>

      <dt>Important bug fixes:</dt>

      <dd>
        <ul>
          <li>Fixed a typo in GAbi++ implementation where the result of {@code
          dynamic_cast&lt;D&gt;(b)} of base class object {@code b} to derived class {@code D} is
          incorrectly adjusted in the opposite direction from the base class.
          (<a href="http://code.google.com/p/android/issues/detail?id=28721">Issue 28721</a>)
          </li>
          <li>Fixed an issue in which {@code make-standalone-toolchain.sh} fails to copy
          {@code libsupc++.*}.</li>
        </ul>
      </dd>

      <dt>Other bug fixes:</dt>

      <dd>
        <ul>
          <li>Fixed {@code ndk-build.cmd} to ensure that {@code ndk-build.cmd} works correctly even
          if the user has redefined the {@code SHELL} environment variable, which may be changed
          when installing a variety of development tools in Windows environments.
          </li>
        </ul>
      </dd>
    </dl>
  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 7c</a> <em>(April 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p>This release of the NDK includes an important fix for Tegra2-based devices, and a few
additional fixes and improvements:</p>

    <dl>
      <dt>Important bug fixes:</dt>

      <dd>
        <ul>
          <li>Fixed GNU STL armeabi-v7a binaries to not crash on non-NEON
  devices. The files provided with NDK r7b were not configured properly,
  resulting in crashes on Tegra2-based devices and others when trying to use
  certain floating-point functions (e.g., {@code cosf}, {@code sinf}, {@code expf}).</li>
        </ul>
      </dd>

      <dt>Important changes:</dt>

      <dd>
        <ul>
          <li>Added support for custom output directories through the {@code NDK_OUT}
  environment variable. When defined, this variable is used to store all
  intermediate generated files, instead of {@code $PROJECT_PATH/obj}. The variable is
  also recognized by {@code ndk-gdb}. </li>
          <li>Added support for building modules with hundreds or even thousands of source
  files by defining {@code LOCAL_SHORT_COMMANDS} to {@code true} in your {@code Android.mk}.
            <p>This change forces the NDK build system to put most linker or archiver options
  into list files, as a work-around for command-line length limitations.
  See {@code docs/ANDROID-MK.html} for details.</p>
          </li>
        </ul>
      </dd>

      <dt>Other bug fixes:</dt>

      <dd>
        <ul>
          <li>Fixed {@code android_getCpuCount()} implementation in the {@code cpufeatures}
helper library. On certain devices, where cores are enabled dynamically by the system, the previous
implementation would report the total number of <em>active</em> cores the first time the function
was called, rather than the total number of <em>physically available</em> cores.</li>
        </ul>
      </dd>
    </dl>
  </div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 7b</a> <em>(February 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p>This release of the NDK includes fixes for native Windows builds, Cygwin and many other
      improvements:</p>

    <dl>
      <dt>Important bug fixes:</dt>

      <dd>
        <ul>
          <li>Updated {@code sys/atomics.h} to avoid correctness issues
            on some multi-core ARM-based devices. Rebuild your unmodified sources with this
            version of the NDK and this problem should be completely eliminated.
            For more details, read {@code docs/ANDROID-ATOMICS.html}.</li>
          <li>Reverted to {@code binutils} 2.19 to fix debugging issues that
            appeared in NDK r7 (which switched to {@code binutils} 2.20.1).</li>
          <li>Fixed {@code ndk-build} on 32-bit Linux. A packaging error put a 64-bit version
            of the {@code awk} executable under {@code prebuilt/linux-x86/bin} in NDK r7.</li>
          <li>Fixed native Windows build ({@code ndk-build.cmd}). Other build modes were not
            affected. The fixes include:
            <ul>
              <li>Removed an infinite loop / stack overflow bug that happened when trying
                to call {@code ndk-build.cmd} from a directory that was <em>not</em> the top of
                your project path (e.g., in any sub-directory of it).</li>
              <li>Fixed a problem where the auto-generated dependency files were ignored. This
                meant that updating a header didn't trigger recompilation of sources that included
                it.</li>
              <li>Fixed a problem where special characters in files or paths, other than spaces and
                quotes, were not correctly handled.</li>
            </ul>
          </li>
          <li>Fixed the standalone toolchain to generate proper binaries when using
            {@code -lstdc++} (i.e., linking against the GNU {@code libstdc++} C++ runtime). You
            should use {@code -lgnustl_shared} if you want to link against the shared library
            version or {@code -lstdc++} for the static version.

            <p>See {@code docs/STANDALONE-TOOLCHAIN.html} for more details about this fix.</p>
          </li>
          <li>Fixed {@code gnustl_shared} on Cygwin. The linker complained that it couldn't find
            {@code libsupc++.a} even though the file was at the right location.</li>
          <li>Fixed Cygwin C++ link when not using any specific C++ runtime through
            {@code APP_STL}.</li>
        </ul>
      </dd>
    </dl>

    <dl>
      <dt>Other changes:</dt>

      <dd>
        <ul>
          <li>When your application uses the GNU {@code libstdc++} runtime, the compiler will
            no longer forcibly enable exceptions and RTTI. This change results in smaller code.
            <p>If you need these features, you must do one of the following:</p>
            <ul>
              <li>Enable exceptions and/or RTTI explicitly in your modules or
                {@code Application.mk}. (recommended)</li>
              <li>Define {@code APP_GNUSTL_FORCE_CPP_FEATURES} to {@code 'exceptions'},
                {@code 'rtti'} or both in your {@code Application.mk}. See
                {@code docs/APPLICATION-MK.html} for more details.</li>
            </ul>
          </li>
          <li>{@code ndk-gdb} now works properly when your application has private services
            running in independent processes. It debugs the main application process, instead of the
            first process listed by {@code ps}, which is usually a service process.</li>
          <li>Fixed a rare bug where NDK r7 would fail to honor the {@code LOCAL_ARM_MODE} value
            and always compile certain source files (but not all) to 32-bit instructions.</li>
          <li>{@code STLport}: Refresh the sources to match the Android platform version. This
            update fixes a few minor bugs:
            <ul>
               <li>Fixed instantiation of an incomplete type</li>
               <li>Fixed minor "==" versus "=" typo</li>
               <li>Used {@code memmove} instead of {@code memcpy} in {@code string::assign}</li>
               <li>Added better handling of {@code IsNANorINF}, {@code IsINF}, {@code IsNegNAN},
                 etc.</li>
             </ul>
             <p>For complete details, see the commit log.</p>
          </li>
          <li>{@code STLport}: Removed 5 unnecessary static initializers from the library.</li>
          <li>The GNU libstdc++ libraries for armeabi-v7a were mistakenly compiled for
            armeabi instead. This change had no impact on correctness, but using the right
            ABI should provide slightly better performance.</li>
          <li>The {@code cpu-features} helper library was updated to report three optional
            x86 CPU features ({@code SSSE3}, {@code MOVBE} and {@code POPCNT}). See
            {@code docs/CPU-FEATURES.html} for more details.</li>
          <li>{@code docs/NDK-BUILD.html} was updated to mention {@code NDK_APPLICATION_MK} instead
            of {@code NDK_APP_APPLICATION_MK} to select a custom {@code Application.mk} file.</li>
          <li>Cygwin: {@code ndk-build} no longer creates an empty "NUL" file in the current
            directory when invoked.</li>
          <li>Cygwin: Added better automatic dependency detection. In the previous version, it
            didn't work properly in the following cases:
            <ul>
              <li>When the Cygwin drive prefix was not {@code /cygdrive}.</li>
              <li>When using drive-less mounts, for example, when Cygwin would translate
                {@code /home} to {@code \\server\subdir} instead of {@code C:\Some\Dir}.</li>
            </ul>
          </li>
          <li>Cygwin: {@code ndk-build} does not try to use the native Windows tools under
            {@code $NDK/prebuilt/windows/bin} with certain versions of Cygwin and/or GNU Make.</li>
        </ul>
      </dd>
    </dl>
  </div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 7</a> <em>(November 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p>This release of the NDK includes new features to support the Android 4.0 platform as well
    as many other additions and improvements:</p>

    <dl>
      <dt>New features</dt>

      <dd>
        <ul>
          <li>Added official NDK APIs for Android 4.0 (API level 14), which adds the following
          native features to the platform:

            <ul>
              <li>Added native multimedia API based on the Khronos Group OpenMAX AL? 1.0.1
              standard. The new <code>&lt;OMXAL/OpenMAXAL.h&gt;</code> and
              <code>&lt;OMXAL/OpenMAXAL_Android.h&gt;</code> headers allow applications targeting
              API level 14 to perform multimedia output directly from native code by using a new
              Android-specific buffer queue interface. For more details, see
              <code>docs/openmaxal/index.html</code> and <a href=
              "http://www.khronos.org/openmax/">http://www.khronos.org/openmax/</a>.</li>

              <li>Updated the native audio API based on the Khronos Group OpenSL ES 1.0.1?
              standard. With API Level 14, you can now decode compressed audio (e.g. MP3, AAC,
              Vorbis) to PCM. For more details, see <code>docs/opensles/index.html</code> and
              <a href=
              "http://www.khronos.org/opensles">http://www.khronos.org/opensles/</a>.</li>
            </ul>
          </li>

          <li>Added CCache support. To speed up large rebuilds, define the
          <code>NDK_CCACHE</code> environment variable to <code>ccache</code> (or the path to
          your <code>ccache</code> binary). When declared, the NDK build system automatically
          uses CCache when compiling any source file. For example:
            <pre>
export NDK_CCACHE=ccache
</pre>
          <p class="note"><strong>Note:</strong> CCache is not included in the NDK release
          so you must have it installed prior to using it. For more information about CCache, see
          <a href="http://ccache.samba.org">http://ccache.samba.org</a>.</p>
          </li>

          <li>Added support for setting <code>APP_ABI</code> to <code>all</code> to indicate that
          you want to build your NDK modules for all the ABIs supported by your given NDK
          release. This means that either one of the following two lines in your
          <code>Application.mk</code> are equivalent with this release:
            <pre>
APP_ABI := all
APP_ABI := armeabi armeabi-v7a x86
</pre>

            <p>This also works if you define <code>APP_ABI</code> when calling
            <code>ndk-build</code> from the command-line, which is a quick way to check that your
            project builds for all supported ABIs without changing the project's
            <code>Application.mk file</code>. For example:</p>
            <pre>
ndk-build APP_ABI=all
</pre>
          </li>

          <li>Added a <code>LOCAL_CPP_FEATURES</code> variable in <code>Android.mk</code> that
          allows you to declare which C++ features (RTTI or Exceptions) your module uses. This
          ensures that the final linking works correctly if you have prebuilt modules that depend
          on these features. See <code>docs/ANDROID-MK.html</code> and
          <code>docs/CPLUSPLUS-SUPPORT.html</code> for more details.</li>

          <li>Shortened paths to source and object files that are used in build commands. When
          invoking <code>$NDK/ndk-build</code> from your project path, the paths to the source,
          object, and binary files that are passed to the build commands are significantly
          shorter now, because they are passed relative to the current directory. This is useful
          when building projects with a lot of source files, to avoid limits on the maximum
          command line length supported by your host operating system. The behavior is unchanged
          if you invoke <code>ndk-build</code> from a sub-directory of your project tree, or if
          you define <code>NDK_PROJECT_PATH</code> to point to a specific directory.</li>
        </ul>
      </dd>

      <dt>Experimental features</dt>

      <dd>
        You can now build your NDK source files on Windows <em>without</em> Cygwin by calling the
        <code>ndk-build.cmd</code> script from the command line from your project path. The
        script takes exactly the same arguments as the original <code>ndk-build</code> script.
        The Windows NDK package comes with its own prebuilt binaries for GNU Make, Awk and other
        tools required by the build. You should not need to install anything else to get a
        working build system.

        <p class="caution"><strong>Important:</strong> <code>ndk-gdb</code> does not work on
        Windows, so you still need Cygwin to debug.</p>

        <p>This feature is still experimental, so feel free to try it and report issues on the
        <a href="http://b.android.com">public bug database</a> or <a href=
        "http://groups.google.com/group/android-ndk">public forum</a>. All samples and unit tests
        shipped with the NDK succesfully compile with this feature.</p>
      </dd>

      <dt>Important bug fixes</dt>

      <dd>
        <ul>
          <li>Imported shared libraries are now installed by default to the target installation
          location (<code>libs/&lt;abi&gt;</code>) if <code>APP_MODULES</code> is not defined in
          your <code>Application.mk</code>. For example, if a top-level module <code>foo</code>
          imports a module <code>bar</code>, then both <code>libfoo.so</code> and
          <code>libbar.so</code> are copied to the install location. Previously, only
          <code>libfoo.so</code> was copied, unless you listed <code>bar</code> in your
          <code>APP_MODULES</code> too. If you define <code>APP_MODULES</code> explicitly, the
          behavior is unchanged.</li>

          <li><code>ndk-gdb</code> now works correctly for activities with multiple categories in
          their MAIN intent filters.</li>

          <li>Static library imports are now properly transitive. For example, if a top-level
          module <code>foo</code> imports static library <code>bar</code> that imports static
          library <code>zoo</code>, the <code>libfoo.so</code> will now be linked against both
          <code>libbar.a</code> and <code>libzoo.a</code>.</li>
        </ul>
      </dd>

      <dt>Other changes</dt>

      <dd>
        <ul>
          <li><code>docs/NATIVE-ACTIVITY.HTML</code>: Fixed typo. The minimum API level should be
          9, not 8 for native activities.</li>

          <li><code>docs/STABLE-APIS.html</code>: Added missing documentation listing EGL as a
          supported stable API, starting from API level 9.</li>

          <li><code>download-toolchain-sources.sh</code>: Updated to download the toolchain
          sources from <a href="http://android.googlesource.com">android.googlesource.com</a>,
          which is the new location for the AOSP servers.</li>

          <li>Added a new C++ support runtime named <code>gabi++</code>. More details about it
          are available in the updated <code>docs/CPLUSPLUS-SUPPORT.html</code>.</li>

          <li>Added a new C++ support runtime named <code>gnustl_shared</code> that corresponds
          to the shared library version of GNU libstdc++ v3 (GPLv3 license). See more info at
          <code>docs/CPLUSPLUS-SUPPORT.html</code></li>

          <li>Added support for RTTI in the STLport C++ runtimes (no support for
          exceptions).</li>

          <li>Added support for multiple file extensions in <code>LOCAL_CPP_EXTENSION</code>. For
          example, to compile both <code>foo.cpp</code> and <code>bar.cxx</code> as C++ sources,
          declare the following:
            <pre>
LOCAL_CPP_EXTENSION := .cpp .cxx
</pre>
          </li>

          <li>Removed many unwanted exported symbols from the link-time shared system libraries
          provided by the NDK. This ensures that code generated with the standalone toolchain
          doesn't risk to accidentally depend on a non-stable ABI symbol (e.g. any libgcc.a
          symbol that changes each time the toolchain used to build the platform is changed)</li>

          <li>Refreshed the EGL and OpenGLES Khronos headers to support more extensions. Note
          that this does <em>not</em> change the NDK ABIs for the corresponding libraries,
          because each extension must be probed at runtime by the client application.

            <p>The extensions that are available depend on your actual device and GPU drivers,
            not the platform version the device runs on. The header changes simply add new
            constants and types to make it easier to use the extensions when they have been
            probed with <code>eglGetProcAddress()</code> or <code>glGetProcAddress()</code>. The
            following list describes the newly supported extensions:</p>

            <dl>
              <dt>GLES 1.x</dt>

              <dd>
                <ul>
                  <li><code>GL_OES_vertex_array_object</code></li>

                  <li><code>GL_OES_EGL_image_external</code></li>

                  <li><code>GL_APPLE_texture_2D_limited_npot</code></li>

                  <li><code>GL_EXT_blend_minmax</code></li>

                  <li><code>GL_EXT_discard_framebuffer</code></li>

                  <li><code>GL_EXT_multi_draw_arrays</code></li>

                  <li><code>GL_EXT_read_format_bgra</code></li>

                  <li><code>GL_EXT_texture_filter_anisotropic</code></li>

                  <li><code>GL_EXT_texture_format_BGRA8888</code></li>

                  <li><code>GL_EXT_texture_lod_bias</code></li>

                  <li><code>GL_IMG_read_format</code></li>

                  <li><code>GL_IMG_texture_compression_pvrtc</code></li>

                  <li><code>GL_IMG_texture_env_enhanced_fixed_function</code></li>

                  <li><code>GL_IMG_user_clip_plane</code></li>

                  <li><code>GL_IMG_multisampled_render_to_texture</code></li>

                  <li><code>GL_NV_fence</code></li>

                  <li><code>GL_QCOM_driver_control</code></li>

                  <li><code>GL_QCOM_extended_get</code></li>

                  <li><code>GL_QCOM_extended_get2</code></li>

                  <li><code>GL_QCOM_perfmon_global_mode</code></li>

                  <li><code>GL_QCOM_writeonly_rendering</code></li>

                  <li><code>GL_QCOM_tiled_rendering</code></li>
                </ul>
              </dd>

              <dt>GLES 2.0</dt>

              <dd>
                <ul>
                  <li><code>GL_OES_element_index_uint</code></li>

                  <li><code>GL_OES_get_program_binary</code></li>

                  <li><code>GL_OES_mapbuffer</code></li>

                  <li><code>GL_OES_packed_depth_stencil</code></li>

                  <li><code>GL_OES_texture_3D</code></li>

                  <li><code>GL_OES_texture_float</code></li>

                  <li><code>GL_OES_texture_float_linear</code></li>

                  <li><code>GL_OES_texture_half_float_linear</code></li>

                  <li><code>GL_OES_texture_npot</code></li>

                  <li><code>GL_OES_vertex_array_object</code></li>

                  <li><code>GL_OES_EGL_image_external</code></li>

                  <li><code>GL_AMD_program_binary_Z400</code></li>

                  <li><code>GL_EXT_blend_minmax</code></li>

                  <li><code>GL_EXT_discard_framebuffer</code></li>

                  <li><code>GL_EXT_multi_draw_arrays</code></li>

                  <li><code>GL_EXT_read_format_bgra</code></li>

                  <li><code>GL_EXT_texture_format_BGRA8888</code></li>

                  <li><code>GL_EXT_texture_compression_dxt1</code></li>

                  <li><code>GL_IMG_program_binary</code></li>

                  <li><code>GL_IMG_read_format</code></li>

                  <li><code>GL_IMG_shader_binary</code></li>

                  <li><code>GL_IMG_texture_compression_pvrtc</code></li>

                  <li><code>GL_IMG_multisampled_render_to_texture</code></li>

                  <li><code>GL_NV_coverage_sample</code></li>

                  <li><code>GL_NV_depth_nonlinear</code></li>

                  <li><code>GL_QCOM_extended_get</code></li>

                  <li><code>GL_QCOM_extended_get2</code></li>

                  <li><code>GL_QCOM_writeonly_rendering</code></li>

                  <li><code>GL_QCOM_tiled_rendering</code></li>
                </ul>
              </dd>

              <dt>EGL</dt>

              <dd>
                <ul>
                  <li><code>EGL_ANDROID_recordable</code></li>

                  <li><code>EGL_NV_system_time</code></li>
                </ul>
              </dd>
            </dl>
          </li>
        </ul>
      </dd>
    </dl>
  </div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 6b</a> <em>(August 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
      <p>This release of the NDK does not include any new features compared to r6. The r6b release
      addresses the following issues in the r6 release:</p>
      <dl>
        <dt>Important bug fixes</dt>
        <dd>
          <ul>
            <li>Fixed the build when <code>APP_ABI="armeabi x86"</code> is used for
            multi-architecture builds.</li>
            <li>Fixed the location of prebuilt STLport binaries in the NDK release package.
            A bug in the packaging script placed them in the wrong location.</li>
            <li>Fixed <code>atexit()</code> usage in shared libraries with the x86standalone
            toolchain.</li>
            <li>Fixed <code>make-standalone-toolchain.sh --arch=x86</code>. It used to fail
            to copy the proper GNU libstdc++ binaries to the right location.</li>
            <li>Fixed the standalone toolchain linker warnings about missing the definition and
            size for the <code>__dso_handle</code> symbol (ARM only).</li>
            <li>Fixed the inclusion order of <code>$(SYSROOT)/usr/include</code> for x86 builds.
            See the <a href="http://code.google.com/p/android/issues/detail?id=18540">bug</a> for
            more information.</li>
            <li>Fixed the definitions of <code>ptrdiff_t</code> and <code>size_t</code> in
            x86-specific systems when they are used with the x86 standalone toolchain.</li>
          </ul>
        </dd>
      </dl>
  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 6</a> <em>(July 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
      <p>This release of the NDK includes support for the x86 ABI and other minor changes.
      For detailed information describing the changes in this release, read the
      <code>CHANGES.HTML</code> document included in the NDK package.
      </p>
      <dl>
        <dt>General notes:</dt>
        <dd>
          <ul>
            <li>Adds support for the x86 ABI, which allows you to generate machine code
            that runs on compatible x86-based Android devices. Major features for x86
            include x86-specific toolchains, system headers, libraries and
            debugging support. For all of the details regarding x86 support,
            see <code>docs/CPU-X86.html</code> in the NDK package.

              <p>By default, code is generated for ARM-based devices, but you can add x86 to your
              <code>APP_ABI</code> definition in your <code>Application.mk</code> file to build
              for x86 platforms. For example, the following line instructs <code>ndk-build</code>
              to build your code for three distinct ABIs:</p>

              <pre>APP_ABI := armeabi armeabi-v7a x86</pre>

              <p>Unless you rely on ARM-based assembly sources, you shouldn't need to touch
              your <code>Android.mk</code> files to build x86 machine code.</p>

            </li>

            <li>You can build a standalone x86 toolchain using the <code>--toolchain=x86-4.4.3</code>
            option when calling <code>make-standalone-toolchain.sh</code>. See
            <code>docs/STANDALONE-TOOLCHAIN.html</code> for more details.
            </li>
            <li>The new <code>ndk-stack</code> tool lets you translate stack traces in
            <code>logcat</code> that are generated by native code. The tool translates
            instruction addresses into a readable format that contains things such
            as the function, source file, and line number corresponding to each stack frame.
            For more information and a usage example, see <code>docs/NDK-STACK.html</code>.
            </li>
          </ul>
        </dd>
        <dt>Other changes:</dt>
        <dd><code>arm-eabi-4.4.0</code>, which had been deprecated since NDK r5, has been
        removed from the NDK distribution.</dd>

      </dl>
    </div>
  </div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 5c</a> <em>(June 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p>This release of the NDK does not include any new features compared to r5b. The r5c release
    addresses the following problems in the r5b release:</p>
    <dl>
      <dt>Important bug fixes:</dt>
      <dd>
        <ul>
          <li><code>ndk-build</code>: Fixed a rare bug that appeared when trying to perform parallel
          builds of debuggable projects.</li>

          <li>Fixed a typo that prevented <code>LOCAL_WHOLE_STATIC_LIBRARIES</code> to work
          correctly with the new toolchain and added documentation for this in
          <code>docs/ANDROID-MK.html</code>.</li>

          <li>Fixed a bug where code linked against <code>gnustl_static</code> crashed when run on
          platform releases older than API level 8 (Android 2.2).</li>

          <li><code>ndk-gdb</code>: Fixed a bug that caused a segmentation fault when debugging Android 3.0
          or newer devices.</li>

          <li><code>&lt;android/input.h&gt;</code>: Two functions that were introduced in API level
          9 (Android 2.3) were incorrect and are fixed. While this breaks the source API, the
          binary interface to the system is unchanged. The incorrect functions were missing a
          <code>history_index</code> parameter, and the correct definitions are shown below:
<pre>
float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event,
                                           size_t pointer_index,
                                           size_t history_index);

float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event,
                                           size_t pointer_index,
                                           size_t history_index);
</pre>
          </li>

          <li>Updated the C library ARM binary for API level 9 (Android 2.3) to correctly expose at
          link time new functions that were added in that API level (for example,
          <code>pthread_rwlock_init</code>).</li>

        </ul>
      </dd>

      <dt>Minor improvements and fixes:</dt>
      <dd>
        <ul>
          <li>Object files are now always linked in the order they appear in
          <code>LOCAL_SRC_FILES</code>. This was not the case previously because the files were
          grouped by source extensions instead.</li>

          <li>When <code>import-module</code> fails, it now prints the list of directories that
          were searched. This is useful to check that the <code>NDK_MODULE_PATH</code> definition
          used by the build system is correct.</li>

          <li>When <code>import-module</code> succeeds, it now prints the directory where the
          module was found to the log (visible with <code>NDK_LOG=1</code>).</li>

          <li>Increased the build speed of debuggable applications when there is a very large number
          of include directories in the project.</li>

          <li><code>ndk-gdb</code>: Better detection of <code>adb shell</code> failures and improved
          error messages.</li>

          <li><code>&lt;pthread.h&gt;</code>: Fixed the definition of
          <code>PTHREAD_RWLOCK_INITIALIZER</code> for API level 9 (Android 2.3) and higher.</li>

          <li>Fixed an issue where a module could import itself, resulting in an infinite loop in
          GNU Make.</li>

          <li>Fixed a bug that caused the build to fail if <code>LOCAL_ARM_NEON</code> was set to
          true (typo in <code>build/core/build-binary.mk</code>).</li>

          <li>Fixed a bug that prevented the compilation of </code>.s</code> assembly files
          (<code>.S</code> files were okay).</li>
        </ul>
      </dd>
  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 5b</a> <em>(January 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
      <p>This release of the NDK does not include any new features compared to r5. The r5b release addresses the
      following problems in the r5 release:
      </p>
      <ul>
    <li>The r5 binaries required glibc 2.11, but the r5b binaries are generated with a special
    toolchain that targets glibc 2.7 or higher instead. The Linux toolchain binaries now run on Ubuntu 8.04 or higher. </li>
    <li>Fixes a compiler bug in the arm-linux-androideabi-4.4.3 toolchain.
    The previous binary generated invalid thumb instruction sequences when
    dealing with signed chars.</li>
    <li>Adds missing documentation for the
    "gnustl_static" value for APP_STL, that allows you to link against
    a static library version of GNU libstdc++. </li>
    <li>The following <code>ndk-build</code> issues are fixed:
      <ul>
        <li>A bug that created inconsistent dependency files when a
        compilation error occured on Windows. This prevented a proper build after
        the error was fixed in the source code.</li>
        <li>A Cygwin-specific bug where using very short paths for
        the Android NDK installation or the project path led to the
        generation of invalid dependency files. This made incremental builds
        impossible.</li>
        <li>A typo that prevented the cpufeatures library from working correctly
        with the new NDK toolchain.</li>
        <li>Builds in Cygwin are faster by avoiding calls to <code>cygpath -m</code>
        from GNU Make for every source or object file, which caused problems
        with very large source trees. In case this doesn't work properly, define <code>NDK_USE_CYGPATH=1</code> in your
        environment to use <code>cygpath -m</code> again.</li>
        <li>The Cygwin installation now notifies the user of invalid installation paths that contain spaces. Previously, an invalid path
        would output an error that complained about an incorrect version of GNU Make, even if the right one was installed.
      </ul>
    </li>
  <li>Fixed a typo that prevented the <code>NDK_MODULE_PATH</code> environment variable from working properly when
  it contained multiple directories separated with a colon. </li>
  <li>The <code>prebuilt-common.sh</code> script contains fixes to check the compiler for 64-bit
  generated machine code, instead of relying on the host tag, which
  allows the 32-bit toolchain to rebuild properly on Snow Leopard. The toolchain rebuild scripts now also support
  using a 32-bit host toolchain.</li>
  <li>A missing declaration for <code>INET_ADDRSTRLEN</code> was added to <code>&lt;netinet/in.h&gt;</code>.</li>
  <li>Missing declarations for <code>IN6_IS_ADDR_MC_NODELOCAL</code> and <code>IN6_IS_ADDR_MC_GLOBAL</code> were added to <code>&lt;netinet/in6.h&gt;</code>.</li>
  <li>'asm' was replaced with '__asm__' in <code>&lt;asm/byteorder.h&gt;</code> to allow compilation with <code>-std=c99</code>.</li>
  </ul>
  </div>
  </div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 5</a> <em>(December 2010)</em>
  </p>

  <div class="toggle-content-toggleme">
      <p>This release of the NDK includes many new APIs, most of which are introduced to
         support the development of games and similar applications that make extensive use
         of native code. Using the APIs, developers have direct native access to events, audio,
         graphics and window management, assets, and storage. Developers can also implement the
         Android application lifecycle in native code with help from the new
         {@link android.app.NativeActivity} class. For detailed information describing the changes in this
         release, read the <code>CHANGES.HTML</code> document included in the downloaded NDK package.
      </p>
      <dl>
        <dt>General notes:</dt>
        <dd>
          <ul>
            <li>Adds support for native activities, which allows you to implement the
            Android application lifecycle in native code.</li>

            <li>Adds native support for the following:

              <ul>

                <li>Input subsystem (such as the keyboard and touch screen)</li>

                <li>Access to sensor data (accelerometer, compass, gyroscope, etc).</li>

                <li>Event loop APIs to wait for things such as input and sensor events.</li>

                <li>Window and surface subsystem</li>

                <li>Audio APIs based on the OpenSL ES standard that support playback and recording
                as well as control over platform audio effects</li>

                <li>Access to assets packaged in an <code>.apk</code> file.</li>

              </ul>
            </li>

            <li>Includes a new toolchain (based on GCC 4.4.3), which generates better code, and can also now
            be used as a standalone cross-compiler, for people who want to build their stuff with
            <code>./configure &amp;&amp; make</code>. See
            docs/STANDALONE-TOOLCHAIN.html for the details. The binaries for GCC 4.4.0 are still provided,
            but the 4.2.1 binaries were removed.</li>

            <li>Adds support for prebuilt static and shared libraries (docs/PREBUILTS.html) and module
            exports and imports to make sharing and reuse of third-party modules much easier
            (docs/IMPORT-MODULE.html explains why).</li>

            <li>Provides a default C++ STL implementation (based on STLport) as a helper module. It can be used either
            as a static or shared library (details and usage examples are in sources/android/stlport/README). Prebuilt
            binaries for STLport (static or shared) and GNU libstdc++ (static only) are also provided if you choose to
            compile against those libraries instead of the default C++ STL implementation.
            C++ Exceptions and RTTI are not supported in the default STL implementation. For more information, see
            docs/CPLUSPLUS-SUPPORT.HTML.</li>

            <li>Includes improvements to the <code>cpufeatures</code> helper library that improves reporting
            of the CPU type (some devices previously reported ARMv7 CPU when the device really was an ARMv6). We
            recommend developers that use this library to rebuild their applications then
            upload to Google Play to benefit from the improvements.</li>

            <li>Adds an EGL library that lets you create and manage OpenGL ES textures and
              services.</li>

            <li>Adds new sample applications, <code>native-plasma</code> and <code>native-activity</code>,
            to demonstrate how to write a native activity.</li>

            <li>Includes many bugfixes and other small improvements; see docs/CHANGES.html for a more
              detailed list of changes.</li>
          </ul>
        </dd>
      </dl>
    </div>
  </div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 4b</a> <em>(June 2010)</em>
  </p>

  <div class="toggle-content-toggleme">
      <dl>
        <dt>NDK r4b notes:</dt>

        <dd>
          <p>Includes fixes for several issues in the NDK build and debugging scripts &mdash; if
          you are using NDK r4, we recommend downloading the NDK r4b build. For detailed
          information describing the changes in this release, read the CHANGES.TXT document
          included in the downloaded NDK package.</p>
        </dd>
      </dl>

      <dl>
        <dt>General notes:</dt>

        <dd>
          <ul>
            <li>Provides a simplified build system through the new <code>ndk-build</code> build
            command.</li>

            <li>Adds support for easy native debugging of generated machine code on production
            devices through the new <code>ndk-gdb</code> command.</li>

            <li>Adds a new Android-specific ABI for ARM-based CPU architectures,
            <code>armeabi-v7a</code>. The new ABI extends the existing <code>armeabi</code> ABI to
            include these CPU instruction set extensions:

              <ul>
                <li>Thumb-2 instructions</li>

                <li>VFP hardware FPU instructions (VFPv3-D16)</li>

                <li>Optional support for ARM Advanced SIMD (NEON) GCC intrinsics and VFPv3-D32.
                Supported by devices such as Verizon Droid by Motorola, Google Nexus One, and
                others.</li>
              </ul>
            </li>

            <li>Adds a new <code>cpufeatures</code> static library (with sources) that lets your
            app detect the host device's CPU features at runtime. Specifically, applications can
            check for ARMv7-A support, as well as VFPv3-D32 and NEON support, then provide separate
            code paths as needed.</li>

            <li>Adds a sample application, <code>hello-neon</code>, that illustrates how to use the
            <code>cpufeatures</code> library to check CPU features and then provide an optimized
            code path using NEON instrinsics, if supported by the CPU.</li>

            <li>Lets you generate machine code for either or both of the instruction sets supported
            by the NDK. For example, you can build for both ARMv5 and ARMv7-A architectures at the
            same time and have everything stored to your application's final
            <code>.apk</code>.</li>

            <li>To ensure that your applications are available to users only if their devices are
            capable of running them, Google Play now filters applications based on the
            instruction set information included in your application &mdash; no action is needed on
            your part to enable the filtering. Additionally, the Android system itself also checks
            your application at install time and allows the installation to continue only if the
            application provides a library that is compiled for the device's CPU architecture.</li>

            <li>Adds support for Android 2.2, including a new stable API for accessing the pixel
            buffers of {@link android.graphics.Bitmap} objects from native code.</li>
          </ul>
        </dd>
      </dl>
    </div>
  </div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 3</a> <em>(March 2010)</em>
  </p>

  <div class="toggle-content-toggleme">
      <dl>
        <dt>General notes:</dt>

        <dd>
          <ul>
            <li>Adds OpenGL ES 2.0 native library support.</li>

            <li>Adds a sample application,<code>hello-gl2</code>, that illustrates the use of
            OpenGL ES 2.0 vertex and fragment shaders.</li>

            <li>The toolchain binaries have been refreshed for this release with GCC 4.4.0, which
            should generate slightly more compact and efficient machine code than the previous one
            (4.2.1). The NDK also still provides the 4.2.1 binaries, which you can optionally use
            to build your machine code.</li>
          </ul>
        </dd>
      </dl>
    </div>
  </div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 2</a> <em>(September 2009)</em>
  </p>

  <div class="toggle-content-toggleme">
      <p>Originally released as "Android 1.6 NDK, Release 1".</p>

      <dl>
        <dt>General notes:</dt>

        <dd>
          <ul>
            <li>Adds OpenGL ES 1.1 native library support.</li>

            <li>Adds a sample application, <code>san-angeles</code>, that renders 3D graphics
            through the native OpenGL ES APIs, while managing activity lifecycle with a {@link
            android.opengl.GLSurfaceView} object.</li>
          </ul>
        </dd>
      </dl>
    </div>
  </div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt="">Android NDK, Revision 1</a> <em>(June 2009)</em>
  </p>

  <div class="toggle-content-toggleme">
      <p>Originally released as "Android 1.5 NDK, Release 1".</p>

      <dl>
        <dt>General notes:</dt>

        <dd>
          <ul>
            <li>Includes compiler support (GCC) for ARMv5TE instructions, including Thumb-1
            instructions.</li>

            <li>Includes system headers for stable native APIs, documentation, and sample
            applications.</li>
          </ul>
        </dd>
      </dl>
    </div>
  </div>





<!-- ####################### END OF RELEASE NOTES ####################### -->




























  <h2 id="Reqs">System and Software Requirements</h2>

  <p>The sections below describe the system and software requirements for using the Android NDK, as
  well as platform compatibility considerations that affect appplications using libraries produced
  with the NDK.</p>

  <h4>The Android SDK</h4>

  <ul>
    <li>A complete Android SDK installation (including all dependencies) is required.</li>

    <li>Android 1.5 SDK or later version is required.</li>
  </ul>

  <h4>Supported operating systems</h4>

  <ul>
    <li>Windows XP (32-bit) or Vista (32- or 64-bit)</li>

    <li>Mac OS X 10.4.8 or later (x86 only)</li>

    <li>Linux (32 or 64-bit; Ubuntu 8.04, or other Linux distributions using GLibc 2.7 or
later)</li>
  </ul>

  <h4>Required development tools</h4>

  <ul>
    <li>For all development platforms, GNU Make 3.81 or later is required. Earlier versions of GNU
    Make might work but have not been tested.</li>

    <li>A recent version of awk (either GNU Awk or Nawk) is also required.</li>

    <li>For Windows, <a href="http://www.cygwin.com">Cygwin</a> 1.7 or higher is required. The NDK
    will <em>not</em> work with Cygwin 1.5 installations.</li>
  </ul>

  <h4 id="platform-compat">Android platform compatibility</h4>

  <ul>
    <li>The native libraries created by the Android NDK can only be used on devices running
      specific minimum Android platform versions. The minimum required platform version depends on
      the CPU architecture of the devices you are targeting. The following table details which
      Android platform versions are compatible with native code developed for specific CPU
      architectures.

    <table style="margin:1em;">
      <tr>
        <th>Native Code CPU Architecture Used</th>
        <th>Compatible Android Platform(s)</th>
      </tr>

      <tr>
        <td>ARM, ARM-NEON</td>
        <td>Android 1.5 (API Level 3) and higher</td>
      </tr>

      <tr>
        <td>x86</td>
        <td>Android 2.3 (API Level 9) and higher</td>
      </tr>

      <tr>
        <td>MIPS</td>
        <td>Android 2.3 (API Level 9) and higher</td>
      </tr>
    </table>

      <p>These requirements mean you can use native libraries produced with the NDK in
      applications that are deployable to ARM-based devices running Android 1.5 or later. If you are
      deploying native libraries to x86 and MIPS-based devices, your application must target Android
      2.3 or later.</p>
    </li>

    <li>To ensure compatibility, an application using a native library produced with the NDK
    <em>must</em> declare a <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>
      &lt;uses-sdk&gt;</code></a> element in its manifest file, with an
      <code>android:minSdkVersion</code> attribute value of "3" or higher. For example:

<pre style="margin:1em;">
&lt;manifest&gt;
  &lt;uses-sdk android:minSdkVersion="3" /&gt;
  ...
&lt;/manifest&gt;
</pre>
    </li>

    <li>If you use this NDK to create a native library that uses the OpenGL ES APIs, the
    application containing the library can be deployed only to devices running the minimum platform
    versions described in the table below. To ensure compatibility, make sure that your application
    declares the proper <code>android:minSdkVersion</code> attribute value, as shown in the
    following table.</li>

    <li style="list-style: none; display: inline">
      <table style="margin:1em;">
        <tr>
          <th>OpenGL ES Version Used</th>

          <th>Compatible Android Platform(s)</th>

          <th>Required uses-sdk Attribute</th>
        </tr>

        <tr>
          <td>OpenGL ES 1.1</td>

          <td>Android 1.6 (API Level 4) and higher</td>

          <td><code>android:minSdkVersion="4"</code></td>
        </tr>

        <tr>
          <td>OpenGL ES 2.0</td>

          <td>Android 2.0 (API Level 5) and higher</td>

          <td><code>android:minSdkVersion="5"</code></td>
        </tr>
      </table>

      <p>For more information about API Level and its relationship to Android platform versions,
      see <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Android API Levels</a>.</p>
    </li>

    <li>Additionally, an application using the OpenGL ES APIs should declare a
    <code>&lt;uses-feature&gt;</code> element in its manifest, with an
    <code>android:glEsVersion</code> attribute that specifies the minimum OpenGl ES version
    required by the application. This ensures that Google Play will show your application only
    to users whose devices are capable of supporting your application. For example:
      <pre style="margin:1em;">
&lt;manifest&gt;
<!-- Declare that the application uses the OpenGL ES 2.0 API and is designed
     to run only on devices that support OpenGL ES 2.0 or higher. -->
  &lt;uses-feature android:glEsVersion="0x00020000" /&gt;
  ...
&lt;/manifest&gt;
</pre>

      <p>For more information, see the <a href=
      "{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>
      documentation.</p>
    </li>

    <li>If you use this NDK to create a native library that uses the API to access Android {@link
    android.graphics.Bitmap} pixel buffers or utilizes native activities, the application
    containing the library can be deployed only to devices running Android 2.2 (API level 8) or
    higher. To ensure compatibility, make sure that your application declares <code>&lt;uses-sdk
    android:minSdkVersion="8" /&gt;</code> attribute value in its manifest.</li>
  </ul>



























  <h2 id="Installing">Installing the NDK</h2>
  <p>Installing the NDK on your development computer is straightforward and involves extracting the
  NDK from its download package.</p>

  <p>Before you get started make sure that you have downloaded the latest <a href=
  "{@docRoot}sdk/index.html">Android SDK</a> and upgraded your applications and environment as
  needed. The NDK is compatible with older platform versions but not older versions of the SDK tools.
  Also, take a moment to review the <a href="{@docRoot}tools/sdk/ndk/overview.html#reqs">System and
Software Requirements</a>
  for the NDK, if you haven't already.</p>

  <p>To install the NDK, follow these steps:</p>

  <ol>
    <li>From the table at the top of this page, select the NDK package that is appropriate for your
    development computer and download the package.</li>

    <li>Uncompress the NDK download package using tools available on your computer. When
    uncompressed, the NDK files are contained in a directory called
    <code>android-ndk-&lt;version&gt;</code>. You can rename the NDK directory if necessary and you
    can move it to any location on your computer. This documentation refers to the NDK directory as
    <code>&lt;ndk&gt;</code>.</li>
  </ol>

  <p>You are now ready to start working with the NDK.</p>


<h2 id="GetStarted">Getting Started with the NDK</h2>

<p>Once you've installed the NDK successfully, take a few minutes to read the documentation
included in the NDK. You can find the documentation in the <code>&lt;ndk&gt;/docs/</code>
directory. In particular, please read the OVERVIEW.HTML document completely, so that you
understand the intent of the NDK and how to use it.</p>

<p>If you used a previous version of the NDK, take a moment to review the list of NDK changes in
the CHANGES.HTML document.</p>

<p>Here's the general outline of how you work with the NDK tools:</p>

<ol>
  <li>Place your native sources under <code>&lt;project&gt;/jni/...</code></li>

  <li>Create <code>&lt;project&gt;/jni/Android.mk</code> to describe your native sources to the
  NDK build system</li>

  <li>Optional: Create <code>&lt;project&gt;/jni/Application.mk</code>.</li>

  <li>Build your native code by running the 'ndk-build' script from your project's directory. It
  is located in the top-level NDK directory:
    <pre class="no-pretty-print">cd &lt;project&gt;
&lt;ndk&gt;/ndk-build
</pre>

    <p>The build tools copy the stripped, shared libraries needed by your application to the
    proper location in the application's project directory.</p>
  </li>

  <li>Finally, compile your application using the SDK tools in the usual way. The SDK build tools
  will package the shared libraries in the application's deployable <code>.apk</code> file.</li>
</ol>

<p>For complete information on all of the steps listed above, please see the documentation
included with the NDK package.</p>


<h3 id="Using">Using the NDK</h3>

<p>The Android framework provides two ways to use native code:</p>

<ul>
  <li>Write your application using the Android framework and use JNI to access the APIs provided
  by the Android NDK. This technique allows you to take advantage of the convenience of the
  Android framework, but still allows you to write native code when necessary. If you use this
  approach, your application must target specific, minimum Android platform levels, see <a
  href="#platform-compat">Android platform compatibility</a> for more information.</li>

  <li>
    <p>Write a native activity, which allows you to implement the lifecycle callbacks in native
    code. The Android SDK provides the {@link android.app.NativeActivity} class, which is a
    convenience class that notifies your
    native code of any activity lifecycle callbacks (<code>onCreate()</code>, <code>onPause()</code>,
    <code>onResume()</code>, etc). You can implement the callbacks in your native code to handle
    these events when they occur. Applications that use native activities must be run on Android
    2.3 (API Level 9) or later.</p>

    <p>You cannot access features such as Services and Content Providers natively, so if you want
    to use them or any other framework API, you can still write JNI code to do so.</p>
  </li>
</ul>





  <h2 id="Contents">Contents of the NDK</h2>

  <p>The NDK contains the APIs, documentation, and sample
  applications that help you write your native code. Specifically:</p>

  <ul>
    <li>A set of tools and build files used to generate native code libraries from C and C++
    sources</li>

    <li>A way to embed the corresponding native libraries into an application package file
    (<code>.apk</code>) that can be deployed on Android devices</li>

    <li>A set of native system headers and libraries that will be supported in all future versions
    of the Android platform, starting from Android 1.5. Applications that use native activities
    must be run on Android 2.3 or later.</li>

    <li>Documentation, samples, and tutorials</li>
  </ul>

  <p>The latest release of the NDK supports the following instruction sets:</p>

  <ul>
    <li>ARMv5TE, including Thumb-1 instructions (see {@code docs/CPU-ARCH-ABIS.html} for more
information)</li>

    <li>ARMv7-A, including Thumb-2 and VFPv3-D16 instructions, with optional support for
    NEON/VFPv3-D32 instructions (see {@code docs/CPU-ARM-NEON.html} for more information)</li>

    <li>x86 instructions (see {@code docs/CPU-X86.html} for more information)</li>

    <li>MIPS instructions (see {@code docs/CPU-MIPS.html} for more information)</li>
  </ul>

  <p>ARMv5TE machine code will run on all ARM-based Android devices. ARMv7-A will run only on
  devices such as the Verizon Droid or Google Nexus One that have a compatible CPU. The main
  difference between the two instruction sets is that ARMv7-A supports hardware FPU, Thumb-2, and
  NEON instructions. You can target either or both of the instruction sets &mdash; ARMv5TE is the
  default, but switching to ARMv7-A is as easy as adding a single line to the application's
  <code>Application.mk</code> file, without needing to change anything else in the file. You can also build for
  both architectures at the same time and have everything stored in the final <code>.apk</code>.
  Complete information is provided in the CPU-ARCH-ABIS.HTML in the NDK package.</p>

  <p>The NDK provides stable headers for libc (the C library), libm (the Math library), OpenGL ES
  (3D graphics library), the JNI interface, and other libraries, as listed in the <a href=
  "#Tools">Development tools</a> section.</p>


  <h3 id="Tools">Development tools</h3>

  <p>The NDK includes a set of cross-toolchains (compilers, linkers, etc..) that can generate
  native ARM binaries on Linux, OS X, and Windows (with Cygwin) platforms.</p>

  <p>It provides a set of system headers for stable native APIs that are guaranteed to be supported
  in all later releases of the platform:</p>

  <ul>
    <li>libc (C library) headers</li>

    <li>libm (math library) headers</li>

    <li>JNI interface headers</li>

    <li>libz (Zlib compression) headers</li>

    <li>liblog (Android logging) header</li>

    <li>OpenGL ES 1.1 and OpenGL ES 2.0 (3D graphics libraries) headers</li>

    <li>libjnigraphics (Pixel buffer access) header (for Android 2.2 and above).</li>

    <li>A Minimal set of headers for C++ support</li>

    <li>OpenSL ES native audio libraries</li>

    <li>Android native application APIS</li>
  </ul>

  <p>The NDK also provides a build system that lets you work efficiently with your sources, without
  having to handle the toolchain/platform/CPU/ABI details. You create very short build files to
  describe which sources to compile and which Android application will use them &mdash; the build
  system compiles the sources and places the shared libraries directly in your application
  project.</p>

  <p class="caution"><strong>Important:</strong> With the exception of the libraries listed above,
  native system libraries in the Android platform are <em>not</em> stable and may change in future
  platform versions. Your applications should <em>only</em> make use of the stable native system
  libraries provided in this NDK.</p>



  <h3 id="Docs">Documentation</h3>

  <p>The NDK package includes a set of documentation that describes the capabilities of the NDK and
  how to use it to create shared libraries for your Android applications. In this release, the
  documentation is provided only in the downloadable NDK package. You can find the documentation in
  the <code>&lt;ndk&gt;/docs/</code> directory. Included are these files (partial listing):</p>

  <ul>
    <li>
    INSTALL.HTML &mdash; describes how to install the NDK and configure it for your host
    system</li>

    <li>OVERVIEW.HTML &mdash; provides an overview of the NDK capabilities and usage</li>

    <li>ANDROID-MK.HTML &mdash; describes the use of the Android.mk file, which defines the native
    sources you want to compile</li>

    <li>APPLICATION-MK.HTML &mdash; describes the use of the Application.mk file, which describes
    the native sources required by your Android application</li>
    <li>CPLUSPLUS-SUPPORT.HTML &mdash; describes the C++ support provided in the Android NDK</li>
    <li>CPU-ARCH-ABIS.HTML &mdash; a description of supported CPU architectures and how to target
    them.</li>

    <li>CPU-FEATURES.HTML &mdash; a description of the <code>cpufeatures</code> static library that
    lets your application code detect the target device's CPU family and the optional features at
    runtime.</li>

    <li>CHANGES.HTML &mdash; a complete list of changes to the NDK across all releases.</li>

    <li>DEVELOPMENT.HTML &mdash; describes how to modify the NDK and generate release packages for it</li>

    <li>HOWTO.HTML &mdash; information about common tasks associated with NDK development</li>

    <li>IMPORT-MODULE.HTML &mdash; describes how to share and reuse modules</li>

    <li>LICENSES.HTML  &mdash; information about the various open source licenses that govern the Android NDK</li>

    <li>NATIVE-ACTIVITY.HTML &mdash; describes how to implement native activities</li>

    <li>NDK-BUILD.HTML &mdash; describes the usage of the ndk-build script</li>

    <li>NDK-GDB.HTML &mdash; describes how to use the native code debugger</li>

    <li>PREBUILTS.HTML &mdash; information about how shared and static prebuilt libraries work </li>

    <li>STANDALONE-TOOLCHAIN.HTML &mdash; describes how to use Android NDK toolchain as a standalone
    compiler (still in beta).</li>

    <li>SYSTEM-ISSUES.HTML &mdash; known issues in the Android system images that you should be
    aware of, if you are developing using the NDK.</li>

    <li>STABLE-APIS.HTML &mdash; a complete list of the stable APIs exposed by headers in the
    NDK.</li>

  </ul>

  <p>Additionally, the package includes detailed information about the "bionic" C library provided
  with the Android platform that you should be aware of, if you are developing using the NDK. You
  can find the documentation in the <code>&lt;ndk&gt;/docs/system/libc/</code> directory:</p>

  <ul>
    <li>OVERVIEW.HTML &mdash; provides an overview of the "bionic" C library and the features it
    offers.</li>
  </ul>





<h3 id="Samples">Sample apps</h3>

<p>The NDK includes sample applications that illustrate how to use native code in your Android
  applications:</p>

  <ul>
    <li><code>hello-jni</code> &mdash; a simple application that loads a string from a native
    method implemented in a shared library and then displays it in the application UI.</li>

    <li><code>two-libs</code> &mdash; a simple application that loads a shared library dynamically
    and calls a native method provided by the library. In this case, the method is implemented in a
    static library imported by the shared library.</li>

    <li><code>san-angeles</code> &mdash; a simple application that renders 3D graphics through the
    native OpenGL ES APIs, while managing activity lifecycle with a {@link
    android.opengl.GLSurfaceView} object.</li>

    <li><code>hello-gl2</code> &mdash; a simple application that renders a triangle using OpenGL ES
    2.0 vertex and fragment shaders.</li>

    <li><code>hello-neon</code> &mdash; a simple application that shows how to use the
    <code>cpufeatures</code> library to check CPU capabilities at runtime, then use NEON intrinsics
    if supported by the CPU. Specifically, the application implements two versions of a tiny
    benchmark for a FIR filter loop, a C version and a NEON-optimized version for devices that
    support it.</li>

    <li><code>bitmap-plasma</code> &mdash; a simple application that demonstrates how to access the
    pixel buffers of Android {@link android.graphics.Bitmap} objects from native code, and uses
    this to generate an old-school "plasma" effect.</li>

    <li><code>native-activity</code> &mdash; a simple application that demonstrates how to use the
    native-app-glue static library to create a native activity</li>

    <li><code>native-plasma</code> &mdash; a version of bitmap-plasma implemented with a native
    activity.</li>
  </ul>

  <p>For each sample, the NDK includes the corresponding C source code and the necessary Android.mk
  and Application.mk files. There are located under <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>
  and their source code can be found under <code>&lt;ndk&gt;/samples/&lt;name&gt;/jni/</code>.</p>

  <p>You can build the shared libraries for the sample apps by going into
  <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code> then calling the <code>ndk-build</code> command.
  The generated shared libraries will be located under
  <code>&lt;ndk&gt;/samples/&lt;name&gt;/libs/armeabi/</code> for (ARMv5TE machine code) and/or
  <code>&lt;ndk&gt;/samples/&lt;name&gt;/libs/armeabi-v7a/</code> for (ARMv7 machine code).</p>

  <p>Next, build the sample Android applications that use the shared libraries:</p>

  <ul>
    <li>If you are developing in Eclipse with ADT, use the New Project Wizard to create a new
    Android project for each sample, using the "Import from Existing Source" option and importing
    the source from <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>. Then, set up an AVD,
    if necessary, and build/run the application in the emulator.</li>

    <li>If you are developing with Ant, use the <code>android</code> tool to create the build file
    for each of the sample projects at <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>.
    Then set up an AVD, if necessary, build your project in the usual way, and run it in the
    emulator.</li>

  </ul>

  <p>For more information about developing with the Android SDK tools and what
  you need to do to create, build, and run your applications, see
  the <a href="{@docRoot}tools/workflow/index.html">Overview</a>
  section for developing on Android.</p>



  <h4 id="hello-jni">Exploring the hello-jni Sample</h4>

  <p>The hello-jni sample is a simple demonstration on how to use JNI from an Android application.
  The HelloJni activity receives a string from a simple C function and displays it in a
  TextView.</p>

  <p>The main components of the sample include:</p>

  <ul>
    <li>The familiar basic structure of an Android application (an <code>AndroidManifest.xml</code>
    file, a <code>src/</code> and <code>res</code> directories, and a main activity)</li>

    <li>A <code>jni/</code> directory that includes the implemented source file for the native code
    as well as the Android.mk file</li>

    <li>A <code>tests/</code> directory that contains unit test code.</li>
  </ul>

  <ol>
    <li>Create a new project in Eclipse from the existing sample source or use the
    <code>android</code> tool to update the project so it generates a build.xml file that you can
    use to build the sample.

      <ul>
        <li>In Eclipse:

          <ol type="a">
            <li>Click <strong>File &gt; New Android Project...</strong></li>

            <li>Select the <strong>Create project from existing source</strong> radio button.</li>

            <li>Select any API level above Android 1.5.</li>

            <li>In the <strong>Location</strong> field, click <strong>Browse...</strong> and select
            the <code>&lt;ndk-root&gt;/samples/hello-jni</code> directory.</li>

            <li>Click <strong>Finish</strong>.</li>
          </ol>
        </li>

        <li>On the command line:

          <ol type="a">
            <li>Change to the <code>&lt;ndk-root&gt;/samples/hello-jni</code> directory.</li>

            <li>Run the following command to generate a build.xml file:
              <pre class="no-pretty-print">android update project -p . -s</pre>
            </li>
          </ol>
        </li>
      </ul>
    </li>

    <li>Compile the native code using the <code>ndk-build</code> command.
      <pre class="no-pretty-print">
cd &lt;ndk-root&gt;/samples/hello-jni
&lt;ndk_root&gt;/ndk-build
</pre>
    </li>

    <li>Build and install the application as you would a normal Android application. If you are
    using Eclipse, run the application to build and install it on a device. If you are using Ant,
    run the following commands from the project directory:
      <pre class="no-pretty-print">
ant debug
adb install bin/HelloJni-debug.apk
</pre>
    </li>
  </ol>

  <p>When you run the application on the device, the string <code>Hello JNI</code> should appear on
  your device. You can explore the rest of the samples that are located in the
  <code>&lt;ndk-root&gt;/samples</code> directory for more examples on how to use the JNI.</p>



  <h4 id="native-activity">Exploring the native-activity Sample Application</h4>

  <p>The native-activity sample provided with the Android NDK demonstrates how to use the
  android_native_app_glue static library. This static library makes creating a native activity
  easier by providing you with an implementation that handles your callbacks in another thread, so
  you do not have to worry about them blocking your main UI thread. The main parts of the sample
  are described below:</p>

  <ul>
    <li>The familiar basic structure of an Android application (an <code>AndroidManifest.xml</code>
    file, a <code>src/</code> and <code>res</code> directories). The AndroidManifest.xml declares
    that the application is native and specifies the .so file of the native activity. See {@link
    android.app.NativeActivity} for the source or see the
    <code>&lt;ndk_root&gt;/platforms/samples/native-activity/AndroidManifest.xml</code> file.</li>

    <li>A <code>jni/</code> directory contains the native activity, main.c, which uses the
    <code>android_native_app_glue.h</code> interface to implement the activity. The Android.mk that
    describes the native module to the build system also exists here.</li>
  </ul>

  <p>To build this sample application:</p>

  <ol>
    <li>Create a new project in Eclipse from the existing sample source or use the
    <code>android</code> tool to update the project so it generates a build.xml file that you can
    use to build the sample.

      <ul>
        <li>In Eclipse:

          <ol type="a">
            <li>Click <strong>File &gt; New Android Project...</strong></li>

            <li>Select the <strong>Create project from existing source</strong> radio button.</li>

            <li>Select any API level above Android 2.3.</li>

            <li>In the <strong>Location</strong> field, click <strong>Browse...</strong> and select
            the <code>&lt;ndk-root&gt;/samples/native-activity</code> directory.</li>

            <li>Click <strong>Finish</strong>.</li>
          </ol>
        </li>

        <li>On the command line:

          <ol type="a">
            <li>Change to the <code>&lt;ndk-root&gt;/samples/native-activity</code> directory.</li>

            <li>Run the following command to generate a build.xml file:
              <pre class="no-pretty-print">
android update project -p . -s
</pre>
            </li>
          </ol>
        </li>
      </ul>
    </li>

    <li>Compile the native code using the <code>ndk-build</code> command.
      <pre class="no-pretty-print">
cd &lt;ndk-root&gt;/platforms/samples/android-9/samples/native-activity
&lt;ndk_root&gt;/ndk-build
</pre>
    </li>

    <li>Build and install the application as you would a normal Android application. If you are
    using Eclipse, run the application to build and install it on a device. If you are using Ant,
    run the following commands in the project directory, then run the application on the device:
      <pre class="no-pretty-print">
ant debug
adb install bin/NativeActivity-debug.apk
</pre>
    </li>
  </ol>
