diff options
Diffstat (limited to 'docs/html/tools/sdk/ndk/index.jd')
-rw-r--r-- | docs/html/tools/sdk/ndk/index.jd | 1128 |
1 files changed, 1128 insertions, 0 deletions
diff --git a/docs/html/tools/sdk/ndk/index.jd b/docs/html/tools/sdk/ndk/index.jd new file mode 100644 index 0000000..956d939 --- /dev/null +++ b/docs/html/tools/sdk/ndk/index.jd @@ -0,0 +1,1128 @@ +ndk=true + +ndk.win_download=android-ndk-r8-windows.zip +ndk.win_bytes=109928336 +ndk.win_checksum=37b1a2576f28752fcc09e1b9c07e3f14 + +ndk.mac_download=android-ndk-r8-darwin-x86.tar.bz2 +ndk.mac_bytes=96650992 +ndk.mac_checksum=81ce5de731f945692123b377afe0bad9 + +ndk.linux_download=android-ndk-r8-linux-x86.tar.bz2 +ndk.linux_bytes=88310791 +ndk.linux_checksum=5c9afc9695ad67c61f82fbf896803c05 + +page.title=Android NDK + +@jd:body + +<h2 id="notes">Revisions</h2> + +<p>The sections below provide information and notes about successive releases of +the NDK, as denoted by revision number. </p> + +<script type="text/javascript"> +function toggleDiv(link) { + var toggleable = $(link).parent(); + if (toggleable.hasClass("closed")) { + //$(".toggleme", toggleable).slideDown("fast"); + toggleable.removeClass("closed"); + toggleable.addClass("open"); + $(".toggle-img", toggleable).attr("title", "hide").attr("src", "{@docRoot}assets/images/triangle-opened.png"); + } else { + //$(".toggleme", toggleable).slideUp("fast"); + toggleable.removeClass("open"); + toggleable.addClass("closed"); + $(".toggle-img", toggleable).attr("title", "show").attr("src", "/assets/images/triangle-closed.png"); + } + return false; +} +</script> + +<style> +.toggleable { +padding: 5px 0 0; +} +.toggleme { + padding: 10px 0 0 20px; +} +.toggleable a { + text-decoration:none; +} +.toggleme a { + text-decoration:underline; +} +.toggleable.closed .toggleme { + display:none; +} +#jd-content .toggle-img { + margin:0 5px 3px 0; +} +</style> + +<div class="toggleable open"> + <a href="#" onclick="return toggleDiv(this)"><img src= + "{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px" width="9px"> + Android NDK, Revision 8</a> <em>(May 2012)</em> + + <div class="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="toggleable closed"> + <a href="#" onclick="return toggleDiv(this)"><img src= + "{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px"> + Android NDK, Revision 7c</a> <em>(April 2012)</em> + + <div class="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="toggleable closed"> + <a href="#" onclick="return toggleDiv(this)"><img src= + "{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px"> + Android NDK, Revision 7b</a> <em>(February 2012)</em> + + <div class="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="toggleable closed"> + <a href="#" onclick="return toggleDiv(this)"><img src= + "{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px"> + Android NDK, Revision 7</a> <em>(November 2011)</em> + + <div class="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="toggleable closed"> + <a href="#" onclick="return toggleDiv(this)"><img src= + "{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px"> + Android NDK, Revision 6b</a> <em>(August 2011)</em> + + <div class="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="toggleable closed"> + <a href="#" onclick="return toggleDiv(this)"><img src= + "{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px"> + Android NDK, Revision 6</a> <em>(July 2011)</em> + + <div class="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="toggleable closed"> + <a href="#" onclick="return toggleDiv(this)"><img src= + "{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px"> + Android NDK, Revision 5c</a> <em>(June 2011)</em> + + <div class="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="toggleable closed"> + <a href="#" + onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png" + class="toggle-img" + height="9px" + width="9px" /> Android NDK, Revision 5b</a> <em>(January 2011)</em> + + <div class="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="toggleable closed"> + <a href="#" + onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png" + class="toggle-img" + height="9px" + width="9px" /> Android NDK, Revision 5</a> <em>(December 2010)</em> + + <div class="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="toggleable closed"> + <a href="#" + onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png" + class="toggle-img" + height="9px" + width="9px" /> Android NDK, Revision 4b</a> <em>(June 2010)</em> + + <div class="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="toggleable closed"> + <a href="#" + onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png" + class="toggle-img" + height="9px" + width="9px" /> Android NDK, Revision 3</a> <em>(March 2010)</em> + + <div class="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="toggleable closed"> + <a href="#" + onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png" + class="toggle-img" + height="9px" + width="9px" /> Android NDK, Revision 2</a> <em>(September 2009)</em> + + <div class="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="toggleable closed"> + <a href="#" + onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png" + class="toggle-img" + height="9px" + width="9px" /> Android NDK, Revision 1</a> <em>(June 2009)</em> + + <div class="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> + + <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="gettingstarted">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> + + <h2 id="samples">Sample Applications</h2> + + <p>The NDK includes sample Android applications that illustrate how to use native code in your + Android applications. For more information, see <a href= + "{@docRoot}tools/sdk/ndk/overview.html#samples">Sample Applications</a>.</p> + + <h2 id="forum">Discussion Forum and Mailing List</h2> + + <p>If you have questions about the NDK or would like to read or contribute to discussions about + it, please visit the <a href="http://groups.google.com/group/android-ndk">android-ndk</a> group + and mailing list.</p> |