| 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 that you may reuse existing code libraries written in these |
| languages and possibly increased performance.</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—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 <tool-path>/bin/clang} and |
| {@code <tool-path>/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 |
| <va_list> 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 <arch>/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 <pthread.h>} to {@code <limits.h>}.</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> |
| <path>/arm-linux-androideabi/include/c++/4.6.x-google |
| to: |
| <path>/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/<arch-os-ver>/prebuilt/gdbserver} to |
| {@code prebuilt/android-<arch>/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<D>(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><OMXAL/OpenMAXAL.h></code> and |
| <code><OMXAL/OpenMAXAL_Android.h></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/<abi></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><android/input.h></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><pthread.h></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><netinet/in.h></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><netinet/in6.h></code>.</li> |
| <li>'asm' was replaced with '__asm__' in <code><asm/byteorder.h></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 && 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 — 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 — 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> |
| <uses-sdk></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;"> |
| <manifest> |
| <uses-sdk android:minSdkVersion="3" /> |
| ... |
| </manifest> |
| </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><uses-feature></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;"> |
| <manifest> |
| <!-- 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. --> |
| <uses-feature android:glEsVersion="0x00020000" /> |
| ... |
| </manifest> |
| </pre> |
| |
| <p>For more information, see the <a href= |
| "{@docRoot}guide/topics/manifest/uses-feature-element.html"><code><uses-feature></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><uses-sdk |
| android:minSdkVersion="8" /></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-<version></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><ndk></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><ndk>/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><project>/jni/...</code></li> |
| |
| <li>Create <code><project>/jni/Android.mk</code> to describe your native sources to the |
| NDK build system</li> |
| |
| <li>Optional: Create <code><project>/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 <project> |
| <ndk>/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 — 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 — 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><ndk>/docs/</code> directory. Included are these files (partial listing):</p> |
| |
| <ul> |
| <li> |
| INSTALL.HTML — describes how to install the NDK and configure it for your host |
| system</li> |
| |
| <li>OVERVIEW.HTML — provides an overview of the NDK capabilities and usage</li> |
| |
| <li>ANDROID-MK.HTML — describes the use of the Android.mk file, which defines the native |
| sources you want to compile</li> |
| |
| <li>APPLICATION-MK.HTML — describes the use of the Application.mk file, which describes |
| the native sources required by your Android application</li> |
| <li>CPLUSPLUS-SUPPORT.HTML — describes the C++ support provided in the Android NDK</li> |
| <li>CPU-ARCH-ABIS.HTML — a description of supported CPU architectures and how to target |
| them.</li> |
| |
| <li>CPU-FEATURES.HTML — 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 — a complete list of changes to the NDK across all releases.</li> |
| |
| <li>DEVELOPMENT.HTML — describes how to modify the NDK and generate release packages for it</li> |
| |
| <li>HOWTO.HTML — information about common tasks associated with NDK development</li> |
| |
| <li>IMPORT-MODULE.HTML — describes how to share and reuse modules</li> |
| |
| <li>LICENSES.HTML — information about the various open source licenses that govern the Android NDK</li> |
| |
| <li>NATIVE-ACTIVITY.HTML — describes how to implement native activities</li> |
| |
| <li>NDK-BUILD.HTML — describes the usage of the ndk-build script</li> |
| |
| <li>NDK-GDB.HTML — describes how to use the native code debugger</li> |
| |
| <li>PREBUILTS.HTML — information about how shared and static prebuilt libraries work </li> |
| |
| <li>STANDALONE-TOOLCHAIN.HTML — describes how to use Android NDK toolchain as a standalone |
| compiler (still in beta).</li> |
| |
| <li>SYSTEM-ISSUES.HTML — 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 — 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><ndk>/docs/system/libc/</code> directory:</p> |
| |
| <ul> |
| <li>OVERVIEW.HTML — 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> — 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> — 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> — 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> — a simple application that renders a triangle using OpenGL ES |
| 2.0 vertex and fragment shaders.</li> |
| |
| <li><code>hello-neon</code> — 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> — 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> — 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> — 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><ndk>/samples/<name>/</code> |
| and their source code can be found under <code><ndk>/samples/<name>/jni/</code>.</p> |
| |
| <p>You can build the shared libraries for the sample apps by going into |
| <code><ndk>/samples/<name>/</code> then calling the <code>ndk-build</code> command. |
| The generated shared libraries will be located under |
| <code><ndk>/samples/<name>/libs/armeabi/</code> for (ARMv5TE machine code) and/or |
| <code><ndk>/samples/<name>/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><ndk>/samples/<name>/</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><ndk>/samples/<name>/</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 > 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><ndk-root>/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><ndk-root>/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 <ndk-root>/samples/hello-jni |
| <ndk_root>/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><ndk-root>/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><ndk_root>/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 > 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><ndk-root>/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><ndk-root>/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 <ndk-root>/platforms/samples/android-9/samples/native-activity |
| <ndk_root>/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> |