From d91b1d526eb374965a3a7a8eb4d02eff31b36d1f Mon Sep 17 00:00:00 2001 From: David Friedman Date: Sat, 23 May 2015 00:29:49 -0700 Subject: Docs: "Tombstone" for old NDK page, directing visitors to new NDK site. Change-Id: I520bfb5157b2ffed5baa182df7c6305bf8835360 --- docs/html/tools/sdk/ndk/index.jd | 4465 +------------------------------------- 1 file changed, 8 insertions(+), 4457 deletions(-) (limited to 'docs') diff --git a/docs/html/tools/sdk/ndk/index.jd b/docs/html/tools/sdk/ndk/index.jd index ae15bc1..90116d4 100644 --- a/docs/html/tools/sdk/ndk/index.jd +++ b/docs/html/tools/sdk/ndk/index.jd @@ -1,4470 +1,21 @@ -ndk=true -page.template=sdk - - -ndk.mac64_download=android-ndk-r10e-darwin-x86_64.bin -ndk.mac64_bytes=388937326 -ndk.mac64_checksum=2cb8893a5701603519d38a7e04c50e81 - -ndk.linux64_download=android-ndk-r10e-linux-x86_64.bin -ndk.linux64_bytes=401522849 -ndk.linux64_checksum=19af543b068bdb7f27787c2bc69aba7f - -ndk.linux32_download=android-ndk-r10e-linux-x86.bin -ndk.linux32_bytes=394281908 -ndk.linux32_checksum=c3edd3273029da1cbd2f62c48249e978 - -ndk.win64_download=android-ndk-r10e-windows-x86_64.exe -ndk.win64_bytes=419616132 -ndk.win64_checksum=8412bb4991a95e08fda50b5a44d95df7 - -ndk.win32_download=android-ndk-r10e-windows-x86.exe -ndk.win32_bytes=396563176 -ndk.win32_checksum=1a82445baaf62aec3a46386ab1e5772c - - - page.title=Android NDK @jd:body - - - -
- -
-

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

+ of your app using native-code languages such as C and C++. Typically, good use cases for the NDK + are CPU-intensive applications such as game engines, signal processing, and physics simulation. +

Before downloading the NDK, you should understand that the NDK will not benefit most apps. 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++.

- -

Typical good candidates for the NDK are CPU-intensive workloads such as game engines, - 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.

- - -

Downloads

- - - - -

Revisions

- -

The following sections provide information about releases of the NDK.

- -
-

- Android NDK, Revision 10e (May 2015) -

-
-
-
Important changes:
-
-
    -
  • Integrated the workaround for Cortex-A53 Erratum 843419 into the - {@code aarch64-linux-android-4.9} linker. For more information on this workaround, see - Workaround for cortex-a53 - erratum 843419.
  • - -
  • Added Clang 3.6; {@code NDK_TOOLCHAIN_VERSION=clang} now picks that version - of Clang by default.
  • - -
  • Removed Clang 3.4.
  • - -
  • Removed GCC 4.6.
  • - -
  • Implemented multithreading support in {@code ld.gold} for all architectures. It can - now link with or without support for multithreading; the default is to do it without. -
      -
    • To compile with multithreading, use the {@code --threads} option.
    • -
    • To compile without multithreading, use the {@code --no-threads} option.
    • -
    -
  • - -
  • Upgraded GDB/gdbserver to 7.7 for all architectures.
  • - -
  • Removed the NDK package for 32-bit Darwin.
  • -
-
-
- - -
Important bug fixes:
-
-
    -
  • Fixed a crash that occurred when there were OpenMP loops outside of the main thread.
  • - -
  • Fixed a GCC 4.9 internal compiler error (ICE) that occured when the user declared - {@code #pragma GCC optimize ("O0")}, but had a different level of optimization specified - on the command line. The {@code pragma} takes precedence.
  • - -
  • Fixed an error that used to produce a crash with the following error message: -
    -in add_stores, at var-tracking.c:6000
    -
    -
  • - -
  • Implemented a workaround for a Clang 3.5 issue in which LLVM auto-vectorization - generates {@code llvm.cttz.v2i64()}, an instruction with no counterpart in the ARM - instruction set.
  • -
-
- -
Other bug fixes:
-
-
    -
  • Made the following header and library fixes:
  • -
      -
    • Fixed {@code PROPERTY_*} in {@code media/NdkMediaDrm.h}.
    • -
    • Fixed {@code sys/ucontext.h} for {@code mips64}.
    • -
    • Dropped the Clang version check for {@code __builtin_isnan} and - {@code __builtin_isinf}.
    • -
    • Added {@code android-21/arch-mips/usr/include/asm/reg.h} - and {@code android-21/arch-mips64/usr/include/asm/reg.h}.
    • -
    - - -
  • Fixed a spurious array-bounds warning that GCC 4.9 produced for x86, and reenabled the - array bounds warning that GCC 4.9 had produced for ARM. The warning for ARM had - previously been unconditionally disabled.
  • - -
  • Fixed Clang 3.5 for {@code mips} and {@code mips64} to create a writable - {@code .gcc_except_table} section, thus matching GCC behavior. This change allows you - to avoid the following linker warning: - -
    -.../ld: warning: creating a DT_TEXTREL in a shared object
    -
    -
  • - -
  • Backported a fix for {@code compiler-rt} issues that were causing crashes when Clang - compiled for {@code mips64}. For more information, see LLVM Issue - 20098.
  • - -
  • Fixed Clang 3.5 crashes that occurred on non-ASCII comments. (Issue - 81440)
  • - -
  • Fixed {@code stlport collate::compare} to return {@code -1} and {@code 1}. Previously, - it had returned arbitrary signed numbers.
  • - -
  • Fixed {@code ndk-gdb} for 64-bit ABIs. (Issue - 118300)
  • - -
  • Fixed the crash that the HelloComputeNDK sample for RenderScript was producing on - Android 4.4 (Android API level 19). For more information, see - this page.
  • - -
  • Fixed {@code libc++ __wrap_iter} for GCC. For more information, see LLVM Issue - 22355.
  • - -
  • Fixed {@code .asm} support for ABI {@code x86_64}.
  • - -
  • Implemented a workaround for the GCC 4.8 {@code stlport} issue. (Issue - 127773)
  • - -
  • Removed the trailing directory separator {@code \\} from the project path in Windows. - (Issue 160584) -
  • - -
  • Fixed a {@code no rule to make target} error that occurred when compiling a single - {@code .c} file by executing the {@code ndk-build.cmd} command from {@code gradle}. (Issue - 66937)
  • - -
  • Added the {@code libatomic.a} and {@code libgomp.a} libraries that had been missing from - the following host toolchains: -
      -
    • {@code aarch64-linux-android-4.9}
    • -
    • {@code mips64el-linux-android-4.9}
    • -
    • {@code mipsel-linux-android-4.9}
    • -
    • {@code x86_64-4.9}
    • -
    -
-
- -
Other changes:
-
-
    -
  • Added {@code ld.gold} for {@code aarch64}. The default linker remains {@code ld.bfd}. - To explicitly enable {@code ld.gold}, add {@code -fuse-ld=gold} to the - {@code LOCAL_LDFLAGS} or {@code APP_LDFLAGS} variable.
  • - -
  • Built the MIPS and MIPS64 toolchains with {@code binutils-2.25}, which provides improved - R6 support.
  • - -
  • Made {@code -fstandalone-debug} (full debug info) a default option for Clang.
  • - -
  • Replaced {@code -fstack-protector} with {@code -fstack-protector-strong} for - the ARM, AArch64, X86, and X86_64 toolchains for GCC 4.9, Clang 3.5, and - Clang 3.6.
  • - -
  • Added the {@code --package} command-line switch to {@code ndk-gdb} to allow the build - system to override the package name. (Issue - 56189)
  • - -
  • Deprecated {@code -mno-ldc1-stc1} for MIPS. This option may not work with the new - {@code -fpxx} and {@code -mno-odd-spreg} options, or with the FPXX ABI.
  • - -
  • Added MIPS MSA and R6 detection to {@code cpu-features}.
  • - -
-
- -
-
-
- - -
-

- Android NDK, Revision 10d (December 2014) -

-
-
-
Important changes:
-
-
    -
  • Made GCC 4.8 the default for all 32-bit ABIs. Deprecated GCC 4.6, and - will remove it next release. To restore previous behavior, either add - NDK_TOOLCHAIN_VERSION=4.6 to ndk-build, or - add --toolchain=arm-linux-androideabi-4.6 when executing - make-standalone-toolchain.sh on the command line. GCC 4.9 remains the - default for 64-bit ABIs.
  • - -
  • Stopped all x86[_64] toolchains from adding -mstackrealign by default. The - NDK toolchain assumes a 16-byte stack alignment. The tools and options used by default - enforce this rule. A user writing assembly code must make sure to preserve stack - alignment, and ensure that other compilers also comply with this rule. - (GCC bug 38496)
  • - -
  • Added Address Sanitizer functionality to Clang 3.5 support to the ARM and x86 ABIs. - For more information on this change, see the - Address - Sanitizer project.
  • - -
  • Introduced the requirement, starting from API level 21, to use -fPIE -pie - when building. In API levels 16 and higher, ndk-build uses PIE - when building. This change has a number of implications, which are discussed in - - Developer Preview Issue 888. - These implications do not apply to shared libraries.
  • -
-
-
- - -
Important bug fixes:
-
-
    -
  • Made more fixes related to - - A53 Errata #835769 in the aarch64-linux-android-4.9 linker. As part of this, GCC - passes a new option, --fix-cortex-a53-835769, when - -mfix-cortex-a53-835769 (enabled by default) is specified. - For more information, see this - binutils message - and this - binutils message. -
  • - -
  • Documented a fix to a libc++ sscanf/vsscanf hang that occurred in API level - 21. The fix itself had been implemented in r10c. - (Issue 77988)
  • - -
  • Fixed an AutoFDO (-fauto-profile) crash that occurred with GCC 4.9 when - -Os was specified. (Issue 77571)
  • -
-
- - -
Other bug fixes:
-
-
    -
  • Made the following header and library fixes:
  • -
      -
    • Added posix_memalign to API level 16. Also, added a prototype in - stdlib.h to API levels 16 to 19. - (Issue 77861)
    • -
    • Fixed stdatomic.h so that it includes <atomic> only for - C++11.
    • -
    • Modified the following headers for standalone use: sys/user.h, and - gl2ext.h, dlext.h, fts.h, sgidefs.h - for API level 21.
    • -
    • Modified sys/user.h to rename mxcsr_mask as mxcr_mask, - and to change the data type for u_ar0
    • from unsigned long - to struct user_regs_struct*. -
    • Changed sysconf() return value type from int to - long.
    • -
    - -
  • Fixed ndk-build's handling of thumb for LOCAL_ARM_MODE: In - r10d, ndk-build adds LOCAL_LDFLAGS+=-mthumb by default, unless one of the - following conditions applies:
  • -
      -
    • You have set LOCAL_ARM_MODE equal to arm.
    • -
    • You are doing a debug build (with settings such as APP_OPTIM=debug and - AndroidManifest.xml containing android:debuggable="true"), - where ARM mode is the default in order to retain compatibility with earlier toolchains. - (Issue 74040)
    • -
    - -
  • Fixed LOCAL_SRC_FILES in ndk-build to use Windows absolute paths. - (Issue 74333)
  • - -
  • Removed bash-specific code from ndk-gdb. (Issue 73338)
  • - -
  • Removed bash-specific code from make-standalone-toolchain.sh. - (Issue 74145)
  • - -
  • Revised documentation concerning a fix for System.loadLibrary() transitive - dependencies. (Issue 41790)
  • - -
  • Fixed a problem that was preventing 64-bit packages from extracting on Ubuntu 14.04 and - OS X 10.10 (Yosemite). (Issue 78148)
  • - -
  • Fixed an issue with LOCAL_PCH to improve Clang support. (Issue - 77575)
  • - -
  • Clarified "requires executable stack" warning from ld.gold. (Issue - 79115)
  • -
-
- -
-
-
- - - - - - - -
-

- Android NDK, Revision 10c (October 2014) -

-
-
-
Important changes:
-
-
    -
  • Made the following changes to download structure:
  • -
      -
    • Each package now contains both the 32- and the 64-bit headers, libraries, and tools for - its respective platform.
    • -
    • STL libraries with debugging info no longer need be downloaded separately.
    • -
    -
  • Changed everything previously called Android-L to the official release - designation: android-21.
  • -
  • Updated GCC 4.9 by rebasing to the google branch - of the GCC repository. Major differences from the upstream version of GCC 4.9 include:
  • - -
      -
    • The -O2 option now turns on vectorization, without loop peeling but with more - aggressive unrolling.
    • -
    • Enhancements to FDO and - LIPO
    • -

      For more detailed information, see Important bug fixes below.

      -
    - -
  • Added Clang 3.5 support to all hosts: NDK_TOOLCHAIN_VERSION=clang - now picks Clang 3.5. Note that:
  • -
      - -
    • ARM and x86 default to using the integrated assembler. If this causes issues, use - -fno-integrated-as as a workaround. -
    • Clang 3.5 issues more warnings for unused flags, such as the -finline-functions - option that GCC supports.
    • -

      When migrating from projects using GCC, you can use - -Wno-invalid-command-line-argument and -Wno-unused-command-line-argument - to ignore the unused flags until you're able decide on what to do with them longer-term.

      - -
    -
  • Made it possible to enter ART debugging mode, when debugging on an Android 5.0 device using - ART as its virtual machine, by specifying the art-on option. For more information, - see prebuilt/common/gdb/common.setup in the directory containing the NDK.
  • -
  • Removed support for Clang 3.3.
  • -
  • Deprecated GCC 4.6, and may remove it from future releases.
  • -
  • Updated mclinker to 2.8 with Identical Code Folding ("ICF") support. Specify ICF using the - --icf option.
  • -
  • Broadened arm_neon.h support in x86 and x86_64, attaining coverage of ~93% of - NEON intrinsics. For more information about NEON support: -
      -
    • Navigate to the NDK Programmer's Guide (docs/Programmers_Guide/html/), and see - Architectures and CPUs > Neon.
    • -
    • Examine the updated hello-neon sample in samples/. -
    • See Intel's guide to porting from ARM NEON to Intel SSE.
    • -
    -
  • Documented support for _FORTIFY_SOURCE in headers/libs/android-21, - which appeared in r10 (when android-21 was still called Android-L), - but had no documentation.
  • -
-
-
- - -
Important bug fixes:
-
- -
- - -
Other bug fixes:
-
-
    -
  • Made the following header and library fixes to android-21: -
      - -
    • Added more TV keycodes: android/keycodes.h
    • -
    • Added more constants and six new sensor functions to android/sensor.h: - ASensorManager_getDefaultSensorEx, ASensor_getFifoMaxEventCount, - ASensor_getFifoReservedEventCount, ASensor_getStringType, - ASensor_getReportingMode, and ASensor_isWakeUpSensor.
    • -
    • Fixed stdatomic.h to improve compatibility with GCC 4.6, and provide support - for the <atomic> header.
    • -
    • Added sys/ucontext.h and sys/user.h to all API levels. The - signal.h header now includes <sys/ucontext.h>. You may - remove any existing definition of struct ucontext.
    • -
    • Added posix_memalign to API levels 17, 18, and 19.
    • -
    • Added the following functions to all architectures: - android_set_abort_message, posix_fadvise, - posix_fadvise64, pthread_gettid_np.
    • -
    • Added the required permissions to the native-media/AndroidManifest.xml - sample. - (Issue 106640)
    • -
    • Added clock_nanosleep and clock_settime to API level 21. (Issue - 77372) -
    • Removed the following symbols from all architectures: - get_malloc_leak_info, free_malloc_leak_info, - __srget, __swbuf, __srefill, __swsetup, - __sdidinit, __sflags, __sfp, - __sinit, __smakebuf, __sflush, __sread, - __swrite, __sseek, __sclose, - _fwalk, __sglue, __get_thread, __wait4, - __futex_wake, __open, __get_tls, - __getdents64, and dlmalloc.
    • -
    • Removed the following functions from the 64-bit architectures: basename_r, - dirname_r, __isthreaded, _flush_cache (mips64).
    • -
    • Removed the following function from the 32-bit architectures: - __signalfd4.
    • -
    • Changed the type of the third argument from size_t to int in - the following functions: strtoll_l, strtoull_l, - wcstoll_l, and wcstoull_l.
    • -
    • Restored the following functions to the 64-bit architecture: arc4random, - arc4random_buf, and arc4random_uniform.
    • -
    • Moved cxa_* and the new and delete operators back - to libstdc++.so. This change restores r9d behavior; previous versions of r10 - contained dummy files.
    • - -
    -
  • Restored MXU support in GCC 4.8 and 4.9 for mips. This support had been absent from - r10 and r10b because those versions of GCC had been compiled with binutils-2.24, which did - not support MXU. It now does.
  • -
  • Fixed --toolchain= in make-standalone-toolchain.sh so that it - now properly supports use of a suffix specifying a version of Clang.
  • -
  • Fixed the libc++/armeabi strtod() functions.
  • -
  • Made fixes to NDK documentation in docs/.
  • -
-
- -
Other changes:
-
-
    -
  • Enhanced cpu-features to detect ARMv8 support for the following - instruction sets: AES, CRC32, SHA2, SHA1, and 64-bit PMULL/PMULL2. (Issue - 106360)
  • - -
  • Modified ndk-build to use *-gcc-ar, which is available in GCC 4.8, GCC 4.9, and - Clang. Clang specifies it, instead of *-ar. This setting brings improved LTO - support.
  • - -
  • Removed the include-fixed/linux/a.out.h and - include-fixed/linux/compiler.h headers from the GCC compiler. - (Issue 73728)
  • - -
  • Fixed an issue related to -flto with GCC 4.8 on Mac OS X. The error message - read:
  • - -
    -.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so
    -Symbol not found: _environ
    -
    - -
  • Fixed a typo in build-binary.mk. (Issue - 76992)
  • -
-
- -
Important known issues:
-
-
    -
  • Specifying -Os (-fauto-profile) in GCC4.9 may cause crashing. - (Issue 77571)
  • -
-
- -
-
-
- -
-

- Android NDK, Revision 10b (September 2014) -

-
-
- -
Important notes:
-
-
    -
  • Because of the 512MB size restriction on downloadable packages, the following 32-bit items are not in the 32-bit NDK download packages. Instead, they reside in the 64-bit ones:
  • -
      -
    • Android-L headers
    • -
    • GCC 4.9
    • -
    -
  • Currently, the only Renderscript support provided by the NDK is for 32-bit Renderscript with Android 4.4 (API level 19). You cannot build HelloComputeNDK (the only Renderscript sample) with any other combination of Renderscript (32- or 64-bit) and Android version.
  • -
  • To compile native-codec, you must use a 64-bit NDK package, which is where all the Android-L headers are located.
  • -
-
- - -
Important bug fixes:
-
-
    -
  • Fixed gdb 7.6 in GCC 4.8/4.9. (Issues 74112 and 74371.)
  • -
  • Fixed GCC 4.8/4.9 for x86, so that they no longer enable -msse4.2 and -mpopcnt by default. (Issue 73843.)
  • -
-
- -
Other bug fixes:
-
-
    -
  • Removed stdio.h from the include-fixed/ directories of all versions of GCC. (Issue 73728.)
  • -
  • Removed duplicate header files from the Windows packages in the platforms/android-L/arch-*/usr/include/linux/netfilter*/ directories. (Issue 73704.)
  • -
  • Fixed a problem that prevented Clang from building HelloComputeNDK.
  • -
  • Fixed atexit. (Issue 66595.)
  • -
  • Made various fixes to the docs in docs/ and sources/third_party/googletest/README.NDK. (Issue 74069.)
  • -
  • Made the following fixes to the Android-L headers:
  • -
      -
    1. Added the following functions to ctype.h and wchar.h: dn_expand(), grantpt(), inet_nsap_addr(), inet_nsap_ntoa(), insque(), nsdispatch(), posix_openpt(), __pthread_cleanup_pop(), __pthread_cleanup_push(), remque(), setfsgid(), setfsuid(), splice(), tee(), twalk() (Issue 73719), and 42 *_l() functions.
    2. - -
    3. Renamed cmsg_nxthdr to __cmsg_nxthdr.
    4. - -
    5. Removed __libc_malloc_dispatch.
    6. - -
    7. Changed the ptrace() prototype to long ptrace(int, ...);.
    8. - -
    9. Removed sha1.h.
    10. - -
    11. Extended android_dlextinfo in android/dlext.h.
    12. - -
    13. Annotated __NDK_FPABI__ for functions receiving or returning float- or double-type values in stdlib.h, time.h, wchar.h, and complex.h.
    14. -
    -
-
- -
Other changes:
-
-
    -
  • Updated mipsel-linux-android-4.9 and mips64el-linux-android-4.9, implementing a new multilib directory layout, and providing support for gdb-7.7
  • -
  • Enhanced cpu-features to detect more arm64 features. (Change list 100339.)
  • -
- - -
-
-
- -
-

- Android NDK, Revision 10 (July 2014) -

-
-
-
Important changes:
-
-
    -
  • Added 3 new ABIs, all 64-bit: arm64-v8a, x86_64, mips64.
  • Note that: -
      -
    • GCC 4.9 is the default compiler for 64-bit ABIs. Clang is currently version 3.4. -NDK_TOOLCHAIN_VERSION=clang - may not work for arm64-v8a and mips64.
    • -
    • Android-L is the first level with 64-bit support. Note that this API -level is a temporary one, and only for L-preview. An actual API level number will replace it at -L-release.
    • -
    • This release includes now includes all32 and all64 -settings for APP_ABI. -
        -
      • APP_ABI=all32 is equivalent to -APP_ABI=armeabi,armeabi-v7a,x86,mips.
      • -
      • APP_ABI=all64 is equivalent to -APP_ABI=arm64-v8a,x86_64,mips64.
      • -
      • APP_ABI=all selects all ABIs.
      • -
      -
    • The new GNU libstdc++ in Android-L contains all <tr1/cmath> -Before defining your own math function, check _GLIBCXX_USE_C99_MATH_TR1 to see a -function with that name already exists, in order to avoid "multiple definition" errors from the -linker.
    • -
    • The cpu-features library has been updated for the ARMv8 kernel. The existing -cpu-features library may fail to detect the presence of NEON on the ARMv8 platform. Recompile your -code with the new version.
    • -
    -
  • Added a new platforms/android-L/ API directory. It includes:
  • -
      -
    • Updated Bionic headers, which had not changed from Android API levels 3 -(Cupcake) to 19 (KitKat). This new version, for level L, is to be synchronized with AOSP.
    • -
    • New media APIs and a native-codec sample.
    • -
    • An updated Android.h header for SLES/OpenSLES, enabling support for -single-precision, floating-point audio format in AudioPlayer.
    • -
    • GLES 3.1 and AEP extensions to libGLESv3.so.
    • -
    • GLES2 and GLES3 headers updated to the latest official Khronos versions.
    • -
    -
  • Added GCC 4.9 compilers to the 32-/64-bit ABIs. GCC 4.9 is the default (only) compiler -for 64-bit ABIs, as previously mentioned. For 32-bit ABIs, you must explcitly enable GCC 4.9, as -GCC 4.6 is still the default.
  • -
      -
    • For ndk-build, enable 32-bit, GCC 4.9 building either by adding -NDK_TOOLCHAIN_VERSION=4.9 to Application.mk, or exporting it as an -environment variable from the command line.
    • -
    • For a standalone toolchain, use the --toolchain= option in the -make-standalone-toolchain.sh script. For example: --toolchain=arm-linux-androideabi-4.9.
    • -
    -
  • Upgraded GDB to version 7.6 in GCC 4.8/4.9 and x86*. Since GDB is still at version GDB-7.3.x in -GCC 4.6 (the default for ARM and MIPS), you must set -NDK_TOOLCHAIN_VERSION=4.8 or 4.9 to enable ndk-gdb to select GDB 7.6.
  • -
  • Added the -mssse3 build option to provide SSSE3 support, and made it the default for ABI x86 -(upgrading from SSE3). The image released by Google does not contain SSSE3 instructions.
  • -
  • Updated GCC 4.8 to 4.8.3.
  • -
  • Improved ARM libc++ EH support by switching from gabi++ to libc++abi. For details, see the "C++ Support" section of the documentation. - Note that:
  • -
      -
    • All tests except for locale now pass for Clang 3.4 and GCC 4.8. For more -information, see the "C++ Support" section of the documentation.
    • -
    • The libc++ libraries for X86 and MIPS libc++ still use gabi++.
    • -
    • GCC 4.7 and later can now use <atomic>.
    • -
    • You must add -fno-strict-aliasing if you use <list>, because __list_imp::_end_ breaks - TBAA rules. (Issue 61571.)
    • -
    • As of GCC 4.6, LIBCXX_FORCE_REBUILD:=true no longer rebuilds libc++. Rebuilding it -requires the use of a different compiler. Note that Clang 3.3 is untested.
    • -
    -
  • mclinker is now version 2.7, and has aarch64 Linux support.
  • -
  • Added precompiled header support for headers specified by LOCAL_PCH. (Issue 25412).
  • -
-
- - -
Important bug fixes:
-
-
    -
  • Fixed libc++ so that it now compiles std::feof, etc. (Issue 66668).
  • -
  • Fixed a Clang 3.3/3.4 atomic library call that caused crashes in some of the libc++ -tests for ABI armeabi.
  • -
  • Fixed Clang 3.4 crashes that were occurring on reading precompiled headers. (Issue 66657).
  • -
  • Fixed the Clang 3.3/3.4 -O3 assert on:
  • - llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* -llvm::MDBuilder::createBranchWeights(llvm::ArrayRef): Assertion Weights.size() >= 2 -&& "Need at least two branch weights!" (Issue 57381). -
  • Fixed the following Clang 3.3/3.4 crash:
  • - Assertion failed: (!Fn && "cast failed but able to resolve overload expression!!"), function CheckCXXCStyleCast, file -Volumes/data/ndk-toolchain/src/llvm-3.3/llvm/tools/clang/lib/Sema/SemaCast.cpp, line 2018. -(Issue 66950). -
-
- -
Other bug fixes:
-
-
    -
  • Fixed headers:
  • -
      -
    • Fixed 32-bit ssize_t to be int instead of long -int.
    • -
    • Fixed WCHAR_MIN and WCHAR_MAX so that they they take -appropriate signs according to the architecture they're running on:
    • -
        -
      • X86/MIPS: signed. -
      • ARM: unsigned. -
      • To force X86/MIPS to default to unsigned, use --D__WCHAR_UNSIGNED__.
      • -
      • To force wchar_t to be 16 bits, use -fshort-wchar.
      • -
      -
    • Removed non-existent symbols from 32-bit libc.so, and added pread64, -pwrite64, ftruncate64 for -Android API level 12 and higher. (Issue 69319). For more -information, see the commit message accompanying AOSP change list - 94137.
    • -
    -
  • Fixed GCC warning about redefinition of putchar. Warning message reads:
  • - include/stdio.h:236:5: warning: conflicts with previous declaration here -[-Wattributes] int putchar(int); (Change list 91185). -
  • Fixed make-standalone-toolchain.sh --stl=libc++ so that it:
  • -
      -
    • Copies cxxabi.h. (Issue 68001).
    • -
    • Runs in directories other than the NDK install directory. (Issues 67690 and 68647).
    • -
    -
  • Fixed GCC/Windows to quote arguments only when necessary for spawning processes in -external programs. This change decreases the likelihood of exceeding the 32K length limit.
  • -
  • Fixed an issue that made it impossible to adjust the APP_PLATFORM -environment variable.
  • -
  • Fixed the implementation of IsSystemLibrary() in crazy_linker so that it -uses strrchr() - instead of strchr() to find the library path's true basename.
  • -
  • Fixed native-audio's inability to build in debug mode.
  • -
  • Fixed gdb's inability to print extreme floating-point numbers. (Issue 69203).
  • -
  • Fixed Clang 3.4 inability to compile with -Wl,-shared (as opposed to --shared, which - had no compilation issues). The problem was that Clang added -pie for Android -targets if neither -shared nor -static existed. This behavior, which was -incorrect, caused the linker to complain that -shared and -pie could not -co-exist.
  • - -
-
- - -
Other changes:
-
-
    -
  • Added arm_neon.h to the x86 toolchain so that it now emulates ~47% of -Neon. There is currently no support for 64-bit types. For more information, see the section on ARM -Neon intrinsics support in the x86 documentation.
  • -
  • Ported ARM/GOT_PREL optimization (present in GCC 4.6 built from the GCC google branch) to -ARM GCC 4.8/4.9. This optimization sometimes reduces instruction count when accessing global -variables. As an example, see the build.sh script in -$NDK/tests/build/b14811006-GOT_PREL-optimization/.
  • -
  • Added ARM version for STL gabi++, stlport, and libc++. They now have both it and Thumb -mode.
  • -
  • It is now possible to call the make-standalone-toolchain.sh script with ---toolchain=x86_64-linux-android-4.9, which is equivalent to ---toolchain=x86_64-4.9.
  • -
- -
-
-
- - -
-

- Android NDK, Revision 9d (March 2014) -

-
-
-
Important changes:
-
-
    -
  • Added support for the Clang 3.4 compiler. The -NDK_TOOLCHAIN_VERSION=clang option now picks Clang 3.4. GCC 4.6 is -still the default compiler.
  • -
  • Added APP_ABI=armeabi-v7a-hard, with -additional multilib option -mfloat-abi=hard. These options are for -use with ARM GCC 4.6/4.8 and Clang 3.3/3.4 (which use 4.8's assembler, linker, -and libs). When using these options, note the following changes:
  • -
      -
    • When executing the ndk-build script, add the -following options for armeabi-v7a target: -
      TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1
      -TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
      -The built library is copied to libs/armeabi-v7a. For make to -behave as expected, you cannot specify both armeabi-v7a and -armeabi-v7a-hard as make targets (i.e., on the APP_ABI= line). -Doing so causes one of them to be ignored. Note that APP_ABI=all -is still equivalent to -armeabi armeabi-v7a x86 mips.
    • -
    • The make-standalone-toolchain.sh script copies -additional libaries under /hard directories. - Add the above CFLAGS and LFLAGS to your -makefile to enable GCC or Clang to link with - libraries in /hard.
    • -
    -
  • Added the yasm assembler, as well as LOCAL_ASMFLAGS -and EXPORT_ASMFLAGS flags for x86 -targets. The ndk-build script uses -prebuilts/*/bin/yasm* to build LOCAL_SRC_FILES that -have the .asm extension.
  • -
  • Updated MClinker to 2.6.0, which adds -gc-sections -support.
  • -
  • Added experimental libc++ support (upstream r201101). Use this new -feature by following these steps: -
      -
    • Add APP_STL := c++_static or APP_STL := -c++_shared in Application.mk. - You may rebuild from source via LIBCXX_FORCE_REBUILD := -true
    • -
    • Execute make-standalone-toolchain.sh --stl=libc++ -to create a standalone toolchain with libc++ headers/lib.
    • -
    - For more information, see -CPLUSPLUS-SUPPORT.html. -(Issue 36496)
  • -
-
-
-
Important bug fixes:
-
-
    -
  • Fixed an uncaught throw from an unexpected -exception handler for GCC 4.6/4.8 ARM EABI. (GCC Issue 59392)
  • -
  • Fixed GCC 4.8 so that it now correctly resolves partial -specialization of a template with - a dependent, non-type template argument. (GCC Issue 59052)
  • -
  • Added more modules to prebuilt python (Issue 59902): -
      -
    • Mac OS X: zlib, bz2, -_curses, _curses_panel, _hashlib, -_ssl
    • -
    • Linux: zlib, nis, -crypt, _curses, and _curses_panel
    • -
    -
  • Fixed the x86 and MIPS gdbserver -event_getmsg_helper.
  • -
  • Fixed numerous issues in the RenderScript NDK toolchain, including -issues with compatibility across older devices and C++ reflection.
  • -
    -
-
- -
Other bug fixes:
-
-
    -
  • Header fixes: -
      -
    • Fixed a missing #include <sys/types.h> in -android/asset_manager.h for Android API level 13 and higher. - (Issue 64988)
    • -
    • Fixed a missing #include in -android/rect_manager.h for Android API level 14 and higher.
    • -
    • Added JNICALL to JNI_OnLoad and -JNI_OnUnload in jni.h. Note that JNICALL - is defined as __NDK_FPABI__ For more information, see -sys/cdefs.h.
    • -
    • Updated the following headers so that they can be included -without the need to -manually include their dependencies (Issue 64679):
    • -
      -android/tts.h
      -EGL/eglext.h
      -fts.h
      -GLES/glext.h
      -GLES2/gl2ext.h
      -OMXAL/OpenMAXSL_Android.h
      -SLES/OpenSLES_Android.h
      -sys/prctl.h
      -sys/utime.h
      -
      -
    • Added sys/cachectl.h for all architectures. MIPS -developers can now include this header instead of writing #ifdef -__mips__.
    • -
    • Fixed platforms/android-18/include/android/input.h - by adding __NDK_FPABI__ to functions taking or returning -float or double values.
    • -
    • Fixed MIPS struct stat, which was incorrectly set -to its 64-bit counterpart for Android API level 12 and later. This wrong -setting was a -regression introduced in release r9c.
    • -
    • Defined __PTHREAD_MUTEX_INIT_VALUE, -__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE, - and __PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE for Android API -level 9 and lower.
    • -
    • Added scalbln, scalblnf, and -scalblnl to x86 libm.so for APIs 18 and later.
    • -
    • Fixed a typo in -sources/android/support/include/iconv.h. - (Issue 63806)
    • - -
    -
  • -
  • Fixed gabi++ std::unexpected() to call -std::terminate() so that - a user-defined std::terminate() handler has a chance to run. -
  • -
  • Fixed gabi++ to catch std::nullptr.
  • -
  • Fixed samples Teapot and MoreTeapots: -
      -
    • Solved a problem with Tegra 2 and 3 chips by changing specular -variables to use medium precision. Values for specular power can now be less -than 1.0.
    • -
    • Changed the samples so that pressing the volume button restores -immersive mode and invalidates -SYSTEM_UI_FLAG_IMMERSIVE_STICKY. Screen rotation does not -trigger onSystemUiVisibilityChange, and so does not restore -immersive mode.
    • -
    -
  • -
  • Fixed the ndk-build script to add --rpath-link=$SYSROOT/usr/lib and --rpath-link=$TARGET_OUT in order to use ld.bfd to -link executables. (Issue 64266)
  • -
  • Removed -Bsymbolic from all STL builds.
  • -
  • Fixed ndk-gdb-py.cmd by setting SHELL as -an environment variable -instead of passing it to - python.exe, which ignores the setting. - (Issue 63054)
  • -
  • Fixed the make-standalone-toolchain.sh script so that -the --stl=stlport option copies the gabi++ headers instead of -symlinking them; the cmd.exe and MinGW shells do not understand -symlinks created by cygwin.
  • -
-
- -
Other changes:
-
-
    -
  • Applied execution permissions to all *cmd scripts -previously intended for use only in the cmd.exe shell, in case -developers prefer to use ndk-build.cmd in cygwin instead of the -recommended ndk-build script.
  • -
  • Improved the speed of the make-standalone-toolchain.sh -script by moving instead of copying if the specified destination directory does -not exist.
  • -
- -
-
-
- -
-

- Android NDK, Revision 9c (December 2013) -

-
-

This is a bug-fix-only release.

-
-
Important bug fixes:
-
-
    -
  • Fixed a problem with GCC 4.8 ARM, in which the stack pointer is -restored too early. This problem prevented the frame pointer from reliably -accessing a variable in the stack frame. (GCC Issue 58854)
  • -
  • Fixed a problem with GCC 4.8 libstdc++, in which a bug in -std::nth_element was causing generation of code that produced a random -segfault. (Issue 62910)
  • -
  • Fixed GCC 4.8 ICE in cc1/cc1plus with --fuse-ld=mcld, so that the following error no longer occurs: -
    cc1: internal compiler error: in common_handle_option, at
    -opts.c:1774
  • -
  • Fixed -mhard-float support for -__builtin math functions. For ongoing information on fixes for --mhard-float with STL, please follow Issue 61784.
  • -
-
- -
Other bug fixes:
-
-
    -
  • Header fixes: -
      -
    • Changed prototype of poll to poll(struct -pollfd *, nfds_t, int); in poll.h.
    • -
    • Added utimensat to libc.so for Android -API levels 12 and 19. These libraries are now included for all Android API -levels 12 through 19.
    • -
    • Introduced futimens into libc.so, for Android API -level 19.
    • -
    • Added missing clock_settime() and -clock_nanosleep() to time.h for Android API level 8 -and higher.
    • -
    • Added CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, -CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM, and -CLOCK_BOOTTIME_ALARM in time.h.
    • -
    • Removed obsolete CLOCK_REALTIME_HR and -CLOCK_MONOTONIC_HR.
    • -
    -
  • -
  • In samples Teapot, MoreTeapots, and -source/android/ndk_helper: -
      -
    • Changed them so that they now use a hard-float abi for armeabi-v7a.
    • -
    • Updated them to use immersive mode on Android API level 19 and -higher.
    • -
    • Fixed a problem with Check_ReleaseStringUTFChars in -/system/lib/libdvm.so that was causing crashes on x86 devices.
    • -
    -
  • -
  • Fixed ndk-build fails that happen in cygwin when the NDK -package is -referenced via symlink.
  • -
  • Fixed ndk-build.cmd fails that happen in windows -cmd.exe when -LOCAL_SRC_FILES contains absolute paths. (Issue 69992)
  • -
  • Fixed the ndk-stack script to proceed even when it can't parse -a frame due to inability to find a routine, filename, or line number. In any of -these cases, it prints ??.
  • -
  • Fixed the ndk-stack stack for windows-x64_64 targets so that -it no longer erroneously matches a frame line with a line in the -stack: section that doesn't contain pc, -eip, or ip. For example: -
    I/DEBUG   ( 1151):     #00  5f09db68  401f01c4
    -/system/lib/libc.so
  • -
  • Fixed gabi++ so that it: -
      -
    • Does not use malloc() to allocate C++ thread-local - objects.
    • -
    • Avoids deadlocks in gabi++ in cases where libc.debug.malloc is -non-zero in userdebug/eng Android platform builds.
    • -
    -
-
- -
Other changes:
-
-
    -
  • Added LOCAL_EXPORT_LDFLAGS.
  • -
  • Introduced the NDK_PROJECT_PATH=null setting for use in an -integrated build system where options are explicitly passed to -ndk-build. With this setting, ndk-build makes no -attempt to look for NDK_PROJECT_PATH. This setting also prevents -variables from deriving default settings from NDK_PROJECT_PATH. As a result, -the following variables must now be explicitly specified (with their default -values if such exist): NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, -NDK_DEBUG (optional, default to 0), and other APP_*'s -contained in Application.mk.
  • -
  • APP_ABI can now be enumerated in a comma-delimited list. For -example: -
    APP_ABI := "armeabi,armeabi-v7a"
  • -
  • Provided the ability to rebuild all of STL with debugging info in an -optional, separate package called -android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip, using the --g option. This option -helps the ndk-stack script provide better a stack dump across STL. -This change should not affect the code/size of the final, stripped file.
  • -
  • Enhanced hello-jni samples to report APP_ABI at -compilation.
  • -
  • Used the ar tool in Deterministic mode (option --D) to build static libraries. (Issue 60705)
  • -
-
- -
-
-
- -
-

- Android NDK, Revision 9b (October 2013) -

-
-
-
Important changes:
-
-
    -
  • Updated {@code include/android/*h} and {@code math.h} for all Android API levels up to - 18, including the addition of levels 13, 15, 16 and 17. - For information on added APIs, see commit messages for Changes - 68012 and - 68014. - (Issues 47150, - 58528, and - 38423)
  • -
  • Added support for Android API level 19, including Renderscript binding.
  • -
  • Added support for -mhard-float in the existing armeabi-v7a ABI. For more - information and current restrictions on Clang, see - {@code tests/device/hard-float/jni/Android.mk}.
  • -
  • Migrated from GNU Compiler Collection (GCC) 4.8 to 4.8.2, and added diagnostic color - support. To enable diagnostic colors, set -fdiagnostics-color=auto, - -fdiagnostics-color=always, or export {@code GCC_COLORS} as shown below: -
    -GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
    -
    - For more information, see - GCC - Language Independent Options. -
  • -
  • Added two new samples to demonstrate OpenGL ES 3.0 features: Teapot and MoreTeapots. - These samples run on devices with Android 4.1 (API level 16) and higher.
  • -
  • Deprecated GCC 4.7 and Clang 3.2 support, which will be removed in the next - release.
  • -
-
- -
Important bug fixes:
-
-
    -
  • Fixed problem with ARM GCC 4.6 {@code thumb2} failing to generate 16-bit relative jump - tables. (GCC Issue)
  • -
  • Fixed GCC 4.8 internal compiler error (ICE) on - {@code g++.dg/cpp0x/lambda/lambda-defarg3.C}. - (Change 62770, - GCC Issue)
  • -
  • Fixed a problem with Windows 32-bit {@code *-gdb.exe} executables failing to launch. - (Issue 58975)
  • -
  • Fixed GCC 4.8 ICE when building bullet library. The error message is as follows: -
    internal compiler error: verify_flow_info failed
    - (Issue 58916, - GCC Issue)
  • -
  • Modified GDB/ARM build to skip {@code ARM.exidx} data for unwinding in prologue code and - added a command ({@code set arm exidx-unwinding}) to control exidx-based stack unwinding. - (Issue 55826)
  • -
  • Fixed Clang 3.3 MIPS compiler problem where HI and LO registers are incorrectly - reused.
  • -
  • Fixed issue with MIPS 4.7 ICE in {@code dbx_reg_number}. The error message is as -follows: -
    -external/icu4c/i18n/decimfmt.cpp:1322:1:
    -internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
    -
    - (GCC Patch) - -
  • - -
-
- -
Other bug fixes:
-
-
    -
  • Header fixes -
      -
    • Fixed the ARM {@code WCHAR_MIN} and {@code WCHAR_MAX} to be unsigned according to - spec (the X86/MIPS versions are signed). Define {@code _WCHAR_IS_ALWAYS_SIGNED} to - restore old behavior. (Issue 57749)
    • -
    • Fixed {@code include/netinet/tcp.h} to contain {@code TCP_INFO} state enum. - (Issue 38881)
    • -
    • Fixed the {@code cdefs_elh.h} macro {@code _C_LABEL_STRING} to stop generating - warnings in the GCC 4.8 toolchain when using c++11 mode. - (Issue 58135, - Issue 58652)
    • -
    • Removed non-existent functions {@code imaxabs} and {@code imaxdiv} from header - {@code inttypes.h}.
    • -
    • Fixed issue with {@code pthread_exit()} return values and {@code pthread_self()}. - (Issue 60686)
    • -
    • Added missing {@code mkdtemp()} function, which already exists in {@code bionic} - header {@code stdlib.h}.
    • -
    -
  • -
  • Fixed problem building {@code samples/gles3jni} with Clang on Android API level 11.
  • -
  • Fixed MCLinker to allow multiple occurrences of the following options: - {@code -gc-sections} and {@code --eh-frame-hdr}.
  • -
  • Fixed MCLinker to accept the {@code --no-warn-mismatch} option.
  • -
  • Modified {@code cpu-features} option to not assume all VFPv4 devices support IDIV. - Now this option only adds IDIV to white-listed devices, including Nexus 4. - (Issue 57637)
  • -
  • Fixed problem with {@code android_native_app_glue.c} erroneously logging errors on event - predispatch operations.
  • -
  • Fixed all operations on {@code gabi++} terminate and unexpected_handler to be - thread-safe.
  • -
  • Fixed several issues with Clang -integrated-as option so it can pass - tests for {@code ssax-instructions} and {@code fenv}.
  • -
  • Fixed GCC 4.6/4.7/4.8 compiler to pass the linker option {@code --eh-frame-hdr} even - for static executables. For more information, see the - GCC patch.
  • -
  • Fixed extra apostrophe in CPU-ARCH-ABIS.html. For more information, see - NDK-DEPENDS.html. (Issue 60142)
  • -
  • Fixed extra quotes in ndk-build output on Windows. - (Issue 60649)
  • -
  • Fixed Clang 3.3 to compile ARM's built-in, atomic operations such as - {@code __atomic_fetch_add}, {@code __atomic_fetch_sub}, and {@code __atomic_fetch_or}. -
  • -
  • Fixed Clang 3.3 ICE with customized {@code vfprintf}. - (Clang issue) -
  • -
-
- -
Other changes:
-
-
    -
  • Enabled OpenMP for all GCC builds. To use this feature, add the following flags to your - build settings: -
    -LOCAL_CFLAGS += -fopenmp
    -LOCAL_LDFLAGS += -fopenmp
    -
    - For code examples, see {@code tests/device/test-openmp}
  • -
  • Reduced the size of {@code ld.mcld} significantly (1.5MB vs. {@code ld.bfd} 3.5MB and - {@code ld.gold} 7.5MB), resulting in a speed improvement of approximately 20%.
  • -
  • Added LOCAL_CONLYFLAGS and APP_CONLYFLAGS to specify - options applicable to C only but not C++. The existing LOCAL_CFLAGS - and APP_CFLAGS are also used for C++ compilation (to save trouble of - specifying most options twice), so options such as -std=gnu99 may fail in - g++ builds with a warning and clang++ builds with an error.
  • -
  • Added {@code gabi++} array helper functions.
  • -
  • Modified GCC builds so that all {@code libgcc.a} files are built with - -funwind-tables to allow the stack to be unwound past previously blocked - points, such as __aeabi_idiv0.
  • -
  • Added Ingenic MXU support in MIPS GCC4.6/4.7/4.8 with new -mmxu -option.
  • -
  • Extended MIPS GCC4.6/4.7/4.8 -mldc1-sdc1 to control ldxc1/sdxc1 too
  • -
  • Added crazy linker. For more information, see - {@code sources/android/crazy_linker/README.TXT}.
  • -
  • Fixed {@code bitmap-plasma} to draw to full screen rather than a 200x200 pixel -area.
  • -
  • Reduced linux and darwin toolchain sizes by 25% by creating symlinks to identical files. -
  • -
-
- -
-
-
- - -
-

- Android NDK, Revision 9 (July 2013) -

-
-
-
Important changes:
-
-
    -
  • Added support for Android 4.3 (API level 18). For more information, see - {@code STABLE-APIS.html} and new code examples in {@code samples/gles3jni/README}. -
  • Added headers and libraries for OpenGL ES 3.0, which is supported by Android 4.3 - (API level 18) and higher.
  • -
  • Added GNU Compiler Collection (GCC) 4.8 compiler to the NDK. Since GCC 4.6 is still - the default, you must explicitly enable this option: -
      -
    • For {@code ndk-build} builds, export {@code NDK_TOOLCHAIN_VERSION=4.8} or - add it in {@code Application.mk}.
    • -
    • For standalone builds, use the {@code --toolchain=} option in - {@code make-standalone-toolchain.sh}, for example:
      - {@code --toolchain=arm-linux-androideabi-4.8}
    • -
    -

    Note: - The {@code -Wunused-local-typedefs} option is enabled by {@code -Wall}. Be - sure to add {@code __attribute__((unused))} if you use compile-time asserts like - {@code sources/cxx-stl/stlport/stlport/stl/config/features.h}, line #311. For more - information, see - Change 55460

    -

    Note: - In the GCC 4.7 release and later, ARM compilers generate unaligned access code by - default for ARMv6 and higher build targets. You may need to add the - {@code -mno-unaligned-access} build option when building for kernels that do not support - this feature.

    -
  • -
  • Added Clang 3.3 support. The {@code NDK_TOOLCHAIN_VERSION=clang} build option - now picks Clang 3.3 by default. -

    Note: - Both GCC 4.4.3 and Clang 3.1 are deprecated, and will be removed from the next NDK - release.

  • -
  • Updated GNU Project Debugger (GDB) to support python 2.7.5.
  • -
  • Added MCLinker to support Windows hosts. Since {@code ld.gold} - is the default where available, you must add {@code -fuse-ld=mcld} in - {@code LOCAL_LDFLAGS} or {@code APP_LDFLAGS} to enable MCLinker.
  • -
  • Added {@code ndk-depends} tool which prints ELF library dependencies. - For more information, see {@code NDK-DEPENDS.html}. - (Issue 53486)
  • -
-
- -
Important bug fixes:
-
-
    -
  • Fixed potential event handling issue in {@code android_native_app_glue}. - (Issue 41755)
  • -
  • Fixed ARM/GCC-4.7 build to generate sufficient alignment for NEON load and store - instructions VST and VLD. - (GCC Issue 57271)
  • -
  • Fixed a GCC 4.4.3/4.6/4.7 internal compiler error (ICE) for a constant negative index - value on a string literal. - (Issue 54623)
  • -
  • Fixed GCC 4.7 segmentation fault for constant initialization with an object address. - (Issue 56508)
  • -
  • Fixed GCC 4.6 ARM segmentation fault for -O values when using Boost - 1.52.0. (Issue 42891) -
  • Fixed {@code libc.so} and {@code libc.a} to support the {@code wait4()} function. - (Issue 19854)
  • -
  • Updated the x86 libc.so and libc.a files to include the {@code clone()} - function.
  • -
  • Fixed {@code LOCAL_SHORT_COMMANDS} bug where the {@code linker.list} file is - empty or not used.
  • -
  • Fixed GCC MIPS build on Mac OS to use CFI directives, without which - {@code ld.mcld --eh-frame-hdr} fails frequently.
  • -
  • Fixed Clang 3.2 X86/MIPS internal compiler error in {@code llvm/lib/VMCore/Value.cpp}. - (Change 59021)
  • -
  • Fixed GCC 4.7 64-bit Windows assembler crash. (Error: {@code out of memory allocating - 4294967280 bytes}).
  • -
  • Updated {@code ndk-gdb} script so that the {@code --start} or {@code --launch} actions - now wait for the GNU Debug Server, so that it can more reliably hit breakpoints set - early in the execution path (such as breakpoints in JNI code). - (Issue 41278) -

    Note: - This feature requires jdb and produces warning about pending breakpoints. - Specify the {@code --nowait} option to restore previous behavior. -

    -
  • -
  • Fixed GDB crash when library list is empty.
  • -
  • Fixed GDB crash when using a {@code stepi} command past a {@code bx pc} or - {@code blx pc} Thumb instruction. - (Issue 56962, - Issue 36149)
  • -
  • Fixed MIPS {@code gdbserver} to look for {@code DT_MIPS_RLD_MAP} instead of - {@code DT_DEBUG}. (Issue 56586)
  • -
  • Fixed a circular dependency in the ndk-build script, for example: If A->B and - B->B, then B was dropped from build. - (Issue 56690)
  • -
-
- -
Other bug fixes:
-
-
    -
  • Fixed the {@code ndk-build} script to enable you to specify a version of Clang as a - command line option (e.g., {@code NDK_TOOLCHAIN_VERSION=clang3.2}). Previously, only - specifying the version as an environment variable worked.
  • -
  • Fixed gabi++ size of {@code _Unwind_Exception} to be 24 for MIPS build targets when - using the Clang compiler. - (Change 54141)
  • -
  • Fixed the {@code ndk-build} script to ensure that built libraries are actually - removed from projects that include prebuilt static libraries when using the - {@code ndk-build clean} command. - (Change 54461, - Change 54480)
  • -
  • Modified the {@code NDK_ANALYZE=1} option to be less verbose.
  • -
  • Fixed {@code gnu-libstdc++/Android.mk} to include a {@code backward/} path for builds - that use backward compability. - (Issue 53404)
  • -
  • Fixed a problem where {@code stlport new} sometimes returned random values.
  • -
  • Fixed {@code ndk-gdb} to match the order of {@code CPU_ABIS}, not {@code APP_ABIS}. - (Issue 54033)
  • -
  • Fixed a problem where the NDK 64-bit build on MacOSX choses the wrong path for - compiler. - (Issue 53769)
  • -
  • Fixed build scripts to detect 64-bit Windows Vista. - (Issue 54485)
  • -
  • Fixed x86 {@code ntonl/swap32} error: {@code invalid 'asm': operand number - out of range}. - (Issue 54465, - Change 57242)
  • -
  • Fixed {@code ld.gold} to merge string literals.
  • -
  • Fixed {@code ld.gold} to handle large symbol alignment.
  • -
  • Updated {@code ld.gold} to enable the {@code --sort-section=name} option.
  • -
  • Fixed GCC 4.4.3/4.6/4.7 to suppress the {@code -export-dynamic} option for - statically linked programs. GCC no longer adds an {@code .interp} section for statically - linked programs.
  • -
  • Fixed GCC 4.4.3 {@code stlport} compilation error about inconsistent {@code typedef} - of {@code _Unwind_Control_Block}. - (Issue 54426)
  • -
  • Fixed {@code awk} scripts to handle {@code AndroidManifest.xml} files created on - Windows which may contain trailing {@code \r} characters and cause build errors. - (Issue 42548)
  • -
  • Fixed {@code make-standalone-toolchain.sh} to probe the {@code prebuilts/} - directory to detect if the host is 32 bit or 64 bit.
  • -
  • Fixed the Clang 3.2 {@code -integrated-as} option.
  • -
  • Fixed the Clang 3.2 ARM EHABI compact model {@code pr1} and {@code pr2} handler data. -
  • -
  • Added Clang {@code -mllvm -arm-enable-ehabi} option to fix the following Clang error: -
    clang: for the -arm-enable-ehabi option: may only occur zero or one times!
    -
  • -
  • Fixed build failure when there is no {@code uses-sdk} element in application - manifest. (Issue 57015)
  • -
- -
-
Other changes:
-
-
    -
  • Header Fixes -
      -
    • Modified headers to make {@code __set_errno} an inlined function, since - {@code __set_errno} in {@code errno.h} is deprecated, and {@code libc.so} no longer - exports it.
    • -
    • Modified {@code elf.h} to include {@code stdint.h}. - (Issue 55443)
    • -
    • Fixed {@code sys/un.h} to be included independently of other headers. - (Issue 53646)
    • -
    • Fixed all of the {@code MotionEvent_getHistorical} API family to take the - {@code const AInputEvent* motion_event}. - (Issue 55873)
    • -
    • Fixed {@code malloc_usable_size} to take {@code const void*}. - (Issue 55725)
    • -
    • Fixed stdint.h to be more compatible with C99. - (Change 46821)
    • -
    • Modified {@code wchar.h} to not redefine {@code WCHAR_MAX} and - {@code WCHAR_MIN}
    • -
    • Fixed {@code <inttypes.h>} declaration for pointer-related {@code PRI} and - {@code SCN} macros. (Issue 57218)
    • -
    • Changed the {@code sys/cdefs.h} header so that {@code __WCHAR_TYPE__} is 32-bit - for API levels less than 9, which means that {@code wchat_t} is 32-bit for all - API levels. To restore the previous behavior, define the {@code _WCHAR_IS_8BIT} - boolean variable. (Issue 57267)
    • -
    -
  • -
  • Added more formatting in NDK {@code docs/} and miscellaneous documentation fixes. -
  • -
  • Added support for a thin archive technique when building static libraries. - (Issue 40303)
  • -
  • Updated script {@code make-standalone-toolchain.sh} to support the {@code stlport} - library in addition to {@code gnustl}, when you specify the option - {@code --stl=stlport}. For more information, see {@code STANDALONE-TOOLCHAIN.html}.
  • -
  • Updated the {@code make-standalone-toolchain.sh} script so that the - {@code --llvm-version=} option creates the {@code $TOOLCHAIN_PREFIX-clang} and - {@code $TOOLCHAIN_PREFIX-clang++} scripts in addition to {@code clang} and - {@code clang++}, to avoid using the host's clang and clang++ definitions by accident. -
  • -
  • Added two flags to re-enable two optimizations in upstream Clang but disabled in - NDK for better compatibility with code compiled by GCC: -
      -
    • Added a {@code -fcxx-missing-return-semantics} flag to re-enable missing -return - semantics in Clang 3.2+. Normally, all paths should terminate with a return - statement for a value-returning function. If this is not the case, clang inserts - an undefined instruction (or trap in debug mode) at the path without a return - statement. If you are sure your code is correct, use this flag to allow the - optimizer to take advantage of the undefined behavior. If you are not sure, do not - use this flag. The caller may still receive a random incorrect value, but the - optimizer will not exploit it and make your code harder to debug.
    • -
    • Added a {@code -fglobal-ctor-const-promotion} flag to re-enable - promoting global variables with static constructor to be constants. With this flag, - the global variable optimization pass of LLVM tries to evaluate the global - variables with static constructors and promote them to global constants. Although - this optimization is correct, it may cause some incompatability with code compiled - by GCC. For example, code may do {@code const_cast} to cast the constant to mutable - and modify it. In GCC, the variable is in read-write and the code is run by - accident. In Clang, the const variable is in read-only memory and may cause your - application to crash.
    • -
    -
  • -
  • Added {@code -mldc1-sdc1} to the MIPS GCC and Clang compilers. By default, compilers - align 8-byte objects properly and emit the {@code ldc1} and {@code sdc1} instructions - to move them around. If your app uses a custom allocator that does not always align - with a new object's 8-byte boundary in the same way as the default allocator, your app - may crash due to {@code ldc1} and {@code sdc1} operations on unaligned memory. In this - case, use the {@code -mno-ldc1-sdc1} flag to workaround the problem.
  • -
  • Downgraded the event severity from warning to info if {@code APP_PLATFORM_LEVEL} is - larger than {@code APP_MIN_PLATFORM_LEVEL}. The {@code APP_PLATFORM_LEVEL} may be lower - than {@code APP_PLATFORM} in {@code jni/Application.mk} because the NDK does not have - headers for all levels. In this case, the actual level is shifted downwards. The - {@code APP_MIN_PLATFORM_LEVEL} is specified by the {@code android:minSdkVersion} in - your application's manifest. - (Issue 39752)
  • -
  • Added the {@code android_getCpuIdArm()} and {@code android_setCpuArm()} methods to - {@code cpu-features.c}. This addition enables easier retrieval of the ARM CPUID - information. (Issue 53689)
  • -
  • Modified {@code ndk-build} to use GCC 4.7's {@code as/ld} for Clang compiling. -

    Note: - In GCC 4.7, {@code monotonic_clock} and {@code is_monotonic} have been renamed to - {@code steady_clock} and {@code is_steady}, respectively.

  • -
  • Added the following new warnings to the {@code ndk-build} script: -
      -
    • Added warnings if {@code LOCAL_LDLIBS/LDFLAGS} are used in static library - modules.
    • -
    • Added a warning if a configuration has no module to build.
    • -
    • Added a warning for non-system libraries being used in - {@code LOCAL_LDLIBS/LDFLAGS} of a shared library or executable modules.
    • -
    -
  • -
  • Updated build scripts, so that if {@code APP_MODULES} is not defined and only static - libraries are listed in {@code Android.mk}, the script force-builds all of them. - (Issue 53502)
  • -
  • Updated {@code ndk-build} to support absolute paths in {@code LOCAL_SRC_FILES}.
  • -
  • Removed the {@code *-gdbtui} executables, which are duplicates of the {@code *-gdb} - executables with the {@code -tui} option enabled.
  • -
  • Updated the build scripts to warn you when the Edison Design Group (EDG) compiler - front-end turns {@code _STLP_HAS_INCLUDE_NEXT} back on. - (Issue 53646)
  • -
  • Added the environment variable {@code NDK_LIBS_OUT} to allow overriding of the - path for {@code libraries/gdbserver} from the default {@code $PROJECT/libs}. - For more information, see {@code OVERVIEW.html}.
  • -
  • Changed ndk-build script defaults to compile code with format string protection - {@code -Wformat -Werror=format-security}. You may set - {@code LOCAL_DISABLE_FORMAT_STRING_CHECKS=true} to disable it. - For more information, see {@code ANDROID-MK.html}
  • -
  • Added STL pretty-print support in {@code ndk-gdb-py}. For more information, see - {@code NDK-GDB.html}.
  • -
  • Added tests based on the googletest frameworks.
  • -
  • Added a notification to the toolchain build script that warns you if the current shell - is not {@code bash}.
  • -
-
-
-
-
- - -
-

- Android NDK, Revision 8e (March 2013) -

- -
-
-
Important changes:
-
-
    -
  • Added 64-bit host toolchain set (package name suffix {@code *-x86_64.*}). For more - information, see {@code CHANGES.HTML} and {@code NDK-BUILD.html}.
  • -
  • Added Clang 3.2 compiler. GCC 4.6 is still the default. For information on using the - Clang compiler, see {@code CHANGES.HTML}.
  • -
  • Added static code analyzer for Linux/MacOSX hosts. For information on using the - analyzer, see {@code CHANGES.HTML}.
  • -
  • Added MCLinker for Linux/MacOSX hosts as an experimental feature. The {@code ld.gold} - linker is the default where available, so you must explicitly enable it. For more - information, see {@code CHANGES.HTML}.
  • -
  • Updated ndk-build to use topological sort for module dependencies, which means the - build automatically sorts out the order of libraries specified in - {@code LOCAL_STATIC_LIBRARIES}, {@code LOCAL_WHOLE_STATIC_LIBRARIES} and - {@code LOCAL_SHARED_LIBRARIES}. For more information, see {@code CHANGES.HTML}. - (Issue 39378)
  • -
-
- -
Important bug fixes:
-
-
    -
  • Fixed build script to build all toolchains in {@code -O2}. Toolchains in previous - releases were incorrectly built without optimization.
  • -
  • Fixed build script which unconditionally builds Clang/llvm for MacOSX in 64-bit.
  • -
  • Fixed GCC 4.6/4.7 internal compiler error: - {@code gen_thumb_movhi_clobber at config/arm/arm.md:5832}. - (Issue 52732)
  • -
  • Fixed build problem where GCC/ARM 4.6/4.7 fails to link code using 64-bit atomic - built-in functions. - (Issue 41297)
  • -
  • Fixed GCC 4.7 linker DIV usage mismatch errors. - (Sourceware Issue) -
  • Fixed GCC 4.7 internal compiler error {@code build_data_member_initialization, at - cp/semantics.c:5790}.
  • -
  • Fixed GCC 4.7 internal compiler error {@code redirect_eh_edge_1, at tree-eh.c:2214}. - (Issue 52909)
  • -
  • Fixed a GCC 4.7 segfault. - (GCC Issue)
  • -
  • Fixed {@code <chrono>} clock resolution and enabled {@code steady_clock}. - (Issue 39680)
  • -
  • Fixed toolchain to enable {@code _GLIBCXX_HAS_GTHREADS} for GCC 4.7 libstdc++. - (Issue 41770, - Issue 41859)
  • -
  • Fixed problem with the X86 MXX/SSE code failing to link due to missing - {@code posix_memalign}. - (Change 51872)
  • -
  • Fixed GCC4.7/X86 segmentation fault in {@code i386.c}, function - {@code distance_non_agu_define_in_bb()}. - (Change 50383)
  • -
  • Fixed GCC4.7/X86 to restore earlier {@code cmov} behavior. - (GCC Issue)
  • -
  • Fixed handling NULL return value of {@code setlocale()} in libstdc++/GCC4.7. - (Issue 46718) -
  • Fixed {@code ld.gold} runtime undefined reference to {@code __exidx_start} and - {@code __exidx_start_end}. - (Change 52134)
  • -
  • Fixed Clang 3.1 internal compiler error when using Eigen library. - (Issue 41246)
  • -
  • Fixed Clang 3.1 internal compiler error including {@code <chrono>} in C++11 -mode. - (Issue 39600)
  • -
  • Fixed Clang 3.1 internal compiler error when generating object code for a method - call to a uniform initialized {@code rvalue}. - (Issue 41387)
  • -
  • Fixed Clang 3.1/X86 stack realignment. - (Change 52154)
  • -
  • Fixed problem with GNU Debugger (GDB) SIGILL when debugging on Android 4.1.2. - (Issue 40941)
  • -
  • Fixed problem where GDB cannot set {@code source:line} breakpoints when symbols -contain - long, indirect file paths. - (Issue 42448)
  • -
  • Fixed GDB {@code read_program_header} for MIPS PIE executables. - (Change 49592)
  • -
  • Fixed {@code STLport} segmentation fault in {@code uncaught_exception()}. - (Change 50236)
  • -
  • Fixed {@code STLport} bus error in exception handling due to unaligned access of - {@code DW_EH_PE_udata2}, {@code DW_EH_PE_udata4}, and {@code DW_EH_PE_udata8}.
  • -
  • Fixed Gabi++ infinite recursion problem with {@code nothrow new[]} operator. - (Issue 52833)
  • -
  • Fixed Gabi++ wrong offset to exception handler pointer. - (Change 53446)
  • -
  • Removed Gabi++ redundant free on exception object - (Change 53447)
  • -
-
- -
Other bug fixes:
-
-
    -
  • Fixed NDK headers: -
      -
    • Removed redundant definitions of {@code size_t}, {@code ssize_t}, and - {@code ptrdiff_t}.
    • -
    • Fixed MIPS and ARM {@code fenv.h} header.
    • -
    • Fixed {@code stddef.h} to not redefine {@code offsetof} since it already exists - in the toolchain.
    • -
    • Fixed {@code elf.h} to contain {@code Elf32_auxv_t} and {@code Elf64_auxv_t}. - (Issue 38441) -
    • -
    • Fixed the {@code #ifdef} C++ definitions in the - {@code OpenSLES_AndroidConfiguration.h} header file. - (Issue 53163) -
    • -
    -
  • -
  • Fixed {@code STLport} to abort after out of memory error instead of silently exiting. -
  • -
  • Fixed system and Gabi++ headers to be able to compile with API level 8 and lower.
  • -
  • Fixed {@code cpufeatures} to not parse {@code /proc/self/auxv}. - (Issue 43055)
  • -
  • Fixed {@code ld.gold} to not depend on host libstdc++ and on Windows platforms, - to not depend on the {@code libgcc_sjlj_1.dll} library.
  • -
  • Fixed Clang 3.1 which emits inconsistent register list in {@code .vsave} and fails - assembler. - (Change 49930)
  • -
  • Fixed Clang 3.1 to be able to compile libgabi++ and pass the {@code test-stlport} - tests for MIPS build targets. - (Change 51961)
  • -
  • Fixed Clang 3.1 to only enable exception by default for C++, not for C.
  • -
  • Fixed several issues in Clang 3.1 to pass most GNU exception tests.
  • -
  • Fixed scripts {@code clang} and {@code clang++} in standalone NDK compiler to detect - {@code -cc1} and to not specify {@code -target} when found.
  • -
  • Fixed {@code ndk-build} to observe {@code NDK_APP_OUT} set in {@code Application.mk}. -
  • -
  • Fixed X86 {@code libc.so} and {@code lib.a} which were missing the {@code sigsetjmp} - and {@code siglongjmp} functions already declared in {@code setjmp.h}. - (Issue 19851)
  • -
  • Patched GCC 4.4.3/4.6/4.7 libstdc++ to work with Clang in C++ 11. - (Clang Issue)
  • -
  • Fixed cygwin path in argument passed to {@code HOST_AWK}.
  • -
  • Fixed {@code ndk-build} script warning in windows when running from project's JNI - directory. - (Issue 40192)
  • -
  • Fixed problem where the {@code ndk-build} script does not build if makefile has - trailing whitespace in the {@code LOCAL_PATH} definition. - (Issue 42841)
  • -
-
- -
Other changes:
-
-
    -
  • Enabled threading support in GCC/MIPS toolchain.
  • -
  • Updated GCC exception handling helpers {@code __cxa_begin_cleanup} and - {@code __cxa_type_match} to have default visibility from the previous - hidden visibility in GNU libstdc++. For more information, see - {@code CHANGES.HTML}.
  • -
  • Updated build scripts so that Gabi++ and STLport static libraries are now built with - hidden visibility except for exception handling helpers.
  • -
  • Updated build so that {@code STLport} is built for ARM in Thumb mode.
  • -
  • Added support for {@code std::set_new_handler} in Gabi++. - (Issue 52805)
  • -
  • Enabled {@code FUTEX} system call in GNU libstdc++.
  • -
  • Updated {@code ndk-build} so that it no longer copies prebuilt static library to - a project's {@code obj/local/<abi>/} directory. - (Issue 40302)
  • -
  • Removed {@code __ARM_ARCH_5*__} from ARM {@code toolchains/*/setup.mk} script. - (Issue 21132)
  • -
  • Built additional GNU libstdc++ libraries in thumb for ARM.
  • -
  • Enabled MIPS floating-point {@code madd/msub/nmadd/nmsub/recip/rsqrt} - instructions with 32-bit FPU.
  • -
  • Enabled graphite loop optimizer in GCC 4.6 and 4.7 to allow more optimizations: - {@code -fgraphite}, {@code -fgraphite-identity}, {@code -floop-block}, {@code --floop-flatten}, - {@code -floop-interchange}, {@code -floop-strip-mine}, {@code -floop-parallelize-all}, - and {@code -ftree-loop-linear}. - (info)
  • -
  • Enabled {@code polly} for Clang 3.1 on Linux and Max OS X 32-bit hosts which analyzes - and optimizes memory access. (info)
  • -
  • Enabled {@code -flto} in GCC 4.7, 4.6, Clang 3.2 and Clang 3.1 on linux (Clang LTO - via LLVMgold.so). MIPS compiler targets are not supported because {@code ld.gold} - is not available.
  • -
  • Enabled {@code --plugin} and {@code --plugin-opt} for {@code ld.gold} in GCC 4.6/4.7. -
  • -
  • Enabled {@code --text-reorder} for {@code ld.gold} in GCC 4.7.
  • -
  • Configured GNU libstdc++ with {@code _GLIBCXX_USE_C99_MATH} which undefines the - {@code isinf} script in the bionic header. For more information, see - {@code CHANGES.html}.
  • -
  • Added {@code APP_LDFLAGS} to the build scripts. For more information, see - {@code ANDROID-MK.html}.
  • -
  • Updated build scripts to allow {@code NDK_LOG=0} to disable the {@code NDK_LOG}.
  • -
  • Updated build scripts to allow {@code NDK_HOST_32BIT=0} to disable the host developer - environment 32-bit toolchain.
  • -
  • Changed the default GCC/X86 flags {@code -march=} and {@code -mtune=} from - {@code pentiumpro} and {@code generic} to {@code i686} and {@code atom}.
  • -
  • Enhanced toolchain build scripts: -
      -
    • Fixed a race condition in {@code build-gcc.sh} for the {@code mingw} build type - which was preventing a significant amount of parallel build processing.
    • -
    • Updated {@code build-gabi++.sh} and {@code build-stlport.sh} so they can now run - from the NDK package. - (Issue 52835) -
    • -
    • Fixed {@code run-tests.sh} in the {@code MSys} utilities collection.
    • -
    • Improved 64-bit host toolchain and Canadian Cross build support.
    • -
    • Updated {@code build-mingw64-toolchain.sh} script to more recent version.
    • -
    • Added option to build {@code libgnustl_static.a} and {@code stlport_static.a} - without hidden visibility.
    • -
    -
  • -
- -
-
-
-
- - -
-

- Android NDK, Revision 8d (December 2012) -

- -
-
-
Important changes:
-
-
    -
  • Added the GNU Compiler Collection (GCC) 4.7 compiler to the NDK. The GCC 4.6 compiler - is still the default, so you must to explicitly enable the new version as follows: -
      -
    • For {@code ndk-build}, export the {@code NDK_TOOLCHAIN_VERSION=4.7} variable - or add it to {@code Application.mk}.
    • -
    • For standalone builds, add the {@code --toolchain=} option to - {@code make-standalone-toolchain.sh}, for example: -
      --toolchain=arm-linux-androideabi-4.7
    • -
    -

    - Note: This feature is experimental. Please try it and - report any issues.

    -
  • -
  • Added {@code stlport} exception support via gabi++. Note that the new gabi++ - depends on {@code dlopen} and related code, meaning that: -
      -
    • You can no longer build a static executable using the {@code -static} - option or include {@code libstlport_static.a} using - {@code APP_STL := stlport_static}. (You can still use the {@code -static} option - with a standalone toolchain.) Compiling a dynamic executable using - {@code include $(BUILD_EXECUTABLE)} continues to work because the compiler - automatically adds the {@code -ldl} option.
    • -
    • If your project links using {@code -nostdlib} and {-Wl,--no-undefined}, you - must manually include the {@code -ldl} option.
    • -
    - For more information, see {@code CPLUSPLUS-SUPPORT.html}. - -

    - Note: This feature is experimental and works better with the GCC - 4.6/4.7 compilers than with GCC 4.4.3 or Clang 3.1. Please try it and - report any issues.

    -
  • -
  • Added a {@code -mstack-protector-guard=} option for x86 to choose between a - global default path which is compatible with older Android C library (bionic) - and a new tls path (%gs:20) for {@code -fstack-protector}, - {@code -fstack-protector-all} and {@code -fstack-protector-strong} using the GCC 4.6 - and higher compilers. - -

    - Note: The {@code -mstack-protector-guard} setting itself does not - enable any {@code -fstack-protector*} options.

    -
  • -
  • Added {@code android_setCpu()} function to - {@code sources/android/cpufeatures/cpu-features.c} for use when auto-detection via - {@code /proc} is not possible in Android 4.1 and higher. - (Chromium Issue - 164154)
  • -
-
- -
Important bug fixes:
-
-
    -
  • Fixed unnecessary rebuild of object files when using the {@code ndk-build} script. - (Issue 39810)
  • -
  • Fixed a linker failure with the NDK 8c release for Mac OS X 10.6.x that produced the - following error: -
    -dyld: lazy symbol binding failed: Symbol not found: _memmem
    -Referenced from: ...../arm-linux-androideabi/bin/ld
    -Expected in: /usr/lib/libSystem.B.dylib
    - This problem was caused by building on Mac OS X 10.7, which produced binaries that were - not compatible with Mac OS 10.6.x and the NDK. -
  • -
  • Removed the {@code -x c++} options from the Clang++ standalone build script. - (Issue 39089)
  • -
  • Fixed issues using the {@code NDK_TOOLCHAIN_VERSION=clang3.1} option in Cygwin. - (Issue 39585)
  • -
  • Fixed the {@code make-standalone-toolchain.sh} script to allow generation of a - standalone toolchain using the Cygwin or MinGW environments. The resulting toolchain - can be used in Cygwin, MingGW or CMD.exe environments. - (Issue 39915, - Issue 39585)
  • -
  • Added missing {@code SL_IID_ANDROIDBUFFERQUEUESOURCE} option in android-14 builds for - ARM and X86. - (Issue 40625)
  • -
  • Fixed x86 CPU detection for the {@code ANDROID_CPU_X86_FEATURE_MOVBE} feature. - (Issue 39317)
  • -
  • Fixed an issue preventing the Standard Template Library (STL) from using C++ - sources that do not have a {@code .cpp} file extension.
  • -
  • Fixed GCC 4.6 ARM internal compiler error at reload1.c:1061. - (Issue 20862)
  • -
  • Fixed GCC 4.4.3 ARM internal compiler error at emit-rtl.c:1954. - (Issue 22336)
  • -
  • Fixed GCC 4.4.3 ARM internal compiler error at postreload.c:396. - (Issue 22345)
  • -
  • Fixed problem with GCC 4.6/4.7 skipping lambda functions. - (Issue 35933)
  • -
-
- -
Other bug fixes:
-
-
    -
  • NDK header file fixes: -
      -
    • Fixed {@code __WINT_TYPE__} and {@code wint_t} to be the same type.
    • -
    • Corrected typo in {@code android/bitmap.h}. - (Issue 15134) -
    • -
    • Corrected typo in {@code errno.h}.
    • -
    • Added check for the presence of {@code __STDC_VERSION__} in {@code sys/cdefs.h}. - (Issue 14627) -
    • -
    • Reorganized headers in {@code byteswap.h} and {@code dirent.h}.
    • -
    • Fixed {@code limits.h} to include {@code page.h} which provides {@code PAGE_SIZE} - settings. - (Issue 39983) -
    • -
    • Fixed return type of {@code glGetAttribLocation()} and - {@code glGetUniformLocation()} from {@code int} to {@code GLint}.
    • -
    • Fixed {@code __BYTE_ORDER} constant for x86 builds. - (Issue 39824) -
    • -
    -
  • -
  • Fixed {@code ndk-build} script to not overwrite {@code -Os} with {@code -O2} for ARM - builds.
  • -
  • Fixed build scripts to allow overwriting of {@code HOST_AWK}, {@code HOST_SED}, and - {@code HOST_MAKE} settings.
  • -
  • Fixed issue for {@code ld.gold} on {@code fsck_msdos} builds linking objects built by - the Intel C/C++ compiler (ICC).
  • -
  • Fixed ARM EHABI support in Clang to conform to specifications.
  • -
  • Fixed GNU Debugger (GDB) to shorten the time spent on walking the target's link map - during {@code solib} events. - (Issue 38402)
  • -
  • Fixed missing {@code libgcc.a} file when linking shared libraries.
  • -
-
- -
Other changes:
-
-
    -
  • Backported 64-bit built-in atomic functions for ARM to GCC 4.6.
  • -
  • Added documentation for audio output latency, along with other documentation and - fixes.
  • -
  • Fixed debug builds with Clang so that non-void functions now raise a {@code SIGILL} - signal for paths without a return statement.
  • -
  • Updated {@code make-standalone-toolchain.sh} to accept the suffix {@code -clang3.1} - which is equivalent to adding {@code --llvm-version=3.1} to the GCC 4.6 toolchain.
  • -
  • Updated GCC and Clang bug report URL to: - http://source.android.com/source/report-bug -s.html
  • -
  • Added ARM ELF support to {@code llvm-objdump}.
  • -
  • Suppressed treating c input as c++ warning for Clang builds.
  • -
  • Updated build so that only the 32-bit version of {@code libiberty.a} is built and - placed in {@code lib32/}.
  • -
-
-
-
-
- - -
-

- Android NDK, Revision 8c (November 2012) -

- -
-
-
Important changes:
- -
-
    -
  • 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: -
      -
    • For {@code ndk-build}, export {@code NDK_TOOLCHAIN_VERSION=clang3.1} or - add this environment variable setting to {@code Application.mk}.
    • -
    • 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.
    • -
    -

    Note: This feature is experimental. Please try it and - report any issues.

  • -
  • 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.
  • -
  • 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.
  • -
  • Made the following changes to API level handling: -
      -
    • 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}. -
    • 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. -

      - Note: All API levels above 14 still link against {@code - platforms/android-14} and no new {@code platforms/android-N} have been added. -

    • -
    • 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}.
    • -
    -
  • -
  • Updated the {@code cpu-features} helper library to include more ARM-specific features. - See {@code sources/android/cpufeatures/cpu-features.h} for details.
  • -
  • 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.
  • -
  • Updated build for {@code APP_ABI=armeabi-v7a}: -
      -
    • 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.
    • -
    • Added {@code -mfpu=vfpv3-d16} to {@code ndk-build} instead of the - {@code -mfpu=vfp} option used in previous releases.
    • -
    -
  • -
-
-
- -
-
Important bug fixes:
- -
-
    -
  • 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. - (Issue 35279) -
      -
    • All files and executables in the NDK release package are set to have read and - execute permissions for all.
    • -
    • The ownership/group of {@code libstdc++.a} is now preserved when copied.
    • -
    -
  • -
  • 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. - (Issue 36054)
  • -
  • Fixed Windows parallel builds that sometimes failed due to timing issues in the - {@code host-mkdir} implementation. - (Issue 25875)
  • -
  • Fixed GCC 4.4.3 GNU {@code libstdc++} to not merge {@code typeinfo} names by - default. For more details, see - {@code toolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo}. - (Issue 22165)
  • -
  • 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}.
  • -
  • Fixed GCC 4.4.3 crashes on ARM NEON-specific type definitions for floats. - (Issue 34613)
  • -
  • Fixed the {@code STLport} internal {@code _IteWrapper::operator*()} implementation - where a stale stack location holding the dereferenced value was returned and caused - runtime crashes. - (Issue 38630)
  • - -
  • ARM-specific fixes: -
      -
    • Fixed ARM GCC 4.4.3/4.6 {@code g++} to not warn that the mangling of - <va_list> was changed in GCC 4.4. The workaround using the - {@code -Wno-psabi} switch to avoid this warning is no longer required.
    • -
    • 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.
    • -
    • Fixed {@code binutils-2.21/ld.bfd} to be capable of linking object from older - binutils without {@code tag_FP_arch}, which was producing assertion fail - error messages in GNU Binutils. - (Issue 35209) -
    • -
    • Removed Unknown EABI object attribute 44 warning when - {@code binutils-2.19/ld} links prebuilt object by newer {@code binutils-2.21}
    • -
    • 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}. - (Issue 35616) -
    • -
    • Fixed unresolvable R_ARM_THM_CALL relocation error. - (Issue 35342) -
    • -
    • 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}. - (GCC Issue 50099)
    • -
    • Fixed internal compiler error with negative shift amount. - (GCC Issue)
    • -
    -
  • - -
  • Fixed {@code -fstack-protector} for X86, which is also the default for the - {@code ndk-build} x86 ABI target.
  • - -
  • MIPS-specific fixes: -
      -
    • Fixed {@code STLport} endian-ness by setting {@code _STLP_LITTLE_ENDIAN} to 1 when - compiling MIPS {@code libstlport_*}.
    • -
    • Fixed GCC {@code __builtin_unreachable} issue when compiling LLVM. - (GCC Issue 54369)
    • -
    • Backported fix for {@code cc1} compile process consuming 100% CPU. - (GCC Issue 50380)
    • -
    -
  • - -
  • GNU Debugger-specific fixes: -
      -
    • 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. - (Issue 36120) -
    • -
    • Fixed {@code ndk-gdb} when {@code APP_ABI} contains {@code all} and matchs none - of the known architectures. - (Issue 35392) -
    • -
    • 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. - (GDB Issue 12843) -
    • -
    • Fixed adding of hardware breakpoint support for ARM in {@code gdbserver}. - (GDB Issue) -
    • -
    • Added fix to only read the current {@code solibs} when the linker is consistent. - This change speeds up {@code solib} event handling. - (Issue 37677) -
    • -
    • 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. - (Change 43563)
    • -
    • Fixed an issue where {@code gdb} would not stop on breakpoints placed in - {@code dlopen-ed} libraries. - (Issue 34856) -
    • -
    • 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}. - (Issue 37147) -
    • -
    -
  • -
-
-
- -
-
Other bug fixes:
- -
-
    -
  • Fixed NDK headers: -
      -
    • Fixed {@code arch-mips/include/asm/*} code that was incorrectly removed from - original kernel. (Change - 43335)
    • -
    • 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}.
    • -
    • Fixed {@code fenv.h} for enclosed C functions with {@code __BEGIN_DECLS} and - {@code __END_DECLS}.
    • -
    • Removed unimplemented functions in {@code malloc.h}.
    • -
    • Fixed {@code stdint.h} defintion of {@code uint64_t} for ANSI compilers. - (Issue 1952)
    • -
    • Fixed preprocessor macros in {@code <arch>/include/machine/*}.
    • -
    • Replaced {@code link.h} for MIPS with new version supporting all platforms.
    • -
    • Removed {@code linux-unistd.h}
    • -
    • 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>}.
    • -
    -
  • -
  • Fixed a buffer overflow in {@code ndk-stack-parser}.
  • -
  • 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.
  • -
  • Fixed building of Linux-only NDK packages without also building Windows code. Use the - following settings to perform this type of build: -
    ./build/tools/make-release.sh --force --systems=linux-x86
  • -
  • 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}. -

    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:

    -
    -extern "C" {
    -  extern void *__dso_handle __attribute__((__visibility__ ("hidden")));
    -  void *__dso_handle;
    -}
    -
    -
  • -
  • Fixed symbol decoder for ARM used in {@code objdump} for {@code plt} entries to - generate a more readable form {@code function@plt}.
  • -
  • 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}.
  • -
  • Removed unused {@code .ctors}, {@code .dtors}, and {@code .eh_frame} in MIPS - {@code crt*_so.S}.
  • -
  • 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}. - (More info)
  • -
-
-
- -
-
Other changes:
- -
-
    -
  • 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.
  • -
  • Simplified c++ include path in standalone packages, as shown below. - (Issue 35279) -
    -<path>/arm-linux-androideabi/include/c++/4.6.x-google
    -  to:
    -<path>/include/c++/4.6/
    -
  • -
  • 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.
  • -
  • Fixed an issue in {@code samples/san-angeles} that caused a black screen or freeze - frame on re-launch.
  • -
  • Replaced deprecated APIs in NDK samples. - (Issue 20017) -
      -
    • {@code hello-gl2} from android-5 to android-7
    • -
    • {@code native-activity} from android-9 to android-10
    • -
    • {@code native-audio} from android-9 to android-10
    • -
    • {@code native-plasma} from android-9 to android-10
    • -
    -
  • -
  • 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: -
    -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 */
    -}
    -
    -

    The previous branding options in section {@code .note.ABI-tag} are deprecated.

    -
  • -
  • 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
  • -
-
-
- -
-
- -
-

- Android NDK, Revision 8b (July 2012) -

- -
-

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.

- -
-
Important bug fixes:
- -
-
    -
  • 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.
  • -
  • Fixed several issues in {@code ndk-gdb}: -
      -
    • Updated tool to pass flags {@code -e}, {@code -d} and {@code -s} to adb more -consistently.
    • -
    • Updated tool to accept device serial names containing spaces.
    • -
    • 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).
    • -
    -
  • -
  • Fixed {@code ndk-build clean} on Windows, which was failing to remove -{@code ./libs/*/lib*.so}.
  • -
  • Fixed {@code ndk-build.cmd} to return a non-zero {@code ERRORLEVEL} when {@code make} -fails.
  • -
  • Fixed {@code libc.so} to stop incorrectly exporting the {@code __exidx_start} and -{@code __exidx_end} symbols.
  • -
  • Fixed {@code SEGV} when unwinding the stack past {@code __libc_init} for ARM and -MIPS.
  • -
-
-
- -
-
Important changes:
- -
-
    -
  • 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). -
      -
    • 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.
    • -
    • 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.
    • -
    • Programs compiled with {@code -fPIE} require the new {@code GDB} for debugging, -including binaries in Android 4.1 (API Level 16) system images.
    • -
    • The {@code binutils} 2.21 {@code ld} tool contains back-ported fixes from -version 2.22: -
        -
      • Fixed {@code ld --gc-sections}, which incorrectly retains zombie references to -external libraries. (more -info).
      • -
      • 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. (mor -e info)
      • -
      -
    • -
    • Disabled {@code sincos()} optimization for compatibility with older - platforms.
    • -
    -
  • - -
  • Updated build options to enable the Never eXecute (NX) bit and {@code relro}/{@code -bind_now} protections by default: -
      -
    • 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.
    • -
    • 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: 1, -2)
    • - -
    • These features can be disabled using the following options: -
        -
      1. Disable NX protection by setting the {@code --execstack} option for the -assembler and {@code -z execstack} for the linker.
      2. -
      3. Disable hardening of internal data by setting the {@code -z norelro} and -{@code -z lazy} options for the linker.
      4. -
      5. Disable these protections in the NDK {@code jni/Android.mk} by setting the -following options: -
        -LOCAL_DISABLE_NO_EXECUTE=true  # disable "--noexecstack" and "-z noexecstack"
        -DISABLE_RELRO=true             # disable "-z relro" and "-z now"
        -
        -
      6. -
      -

      See {@code docs/ANDROID-MK.html} for more details.

      -
    • -
    -
  • - -
  • 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: -
    -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 */
    -}
    -
  • -
-
-
- -
-
Other bug fixes:
- -
-
    -
  • Fixed {@code mips-linux-gnu} relocation truncated to fit {@code R_MIPS_TLS_LDM} issue. - (more info)
  • -
  • Fixed {@code ld} tool segfaults when using {@code --gc-sections}. - (more info) -
  • -
  • Fixed MIPS {@code GOT_PAGE} counting issue. - (more info)
  • -
  • Fixed follow warning symbol link for {@code mips_elf_count_got_symbols}.
  • -
  • Fixed follow warning symbol link for {@code mips_elf_allocate_lazy_stub}.
  • -
  • Moved MIPS {@code .dynamic} to the data segment, so that it is writable.
  • -
  • Replaced hard-coded values for symbols with correct segment sizes for MIPS.
  • -
  • 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.
  • -
  • Fixed wrong package names in samples {@code hello-jni} and {@code two-libs} so that -the {@code tests} project underneath it can compile.
  • -
-
-
- -
-
Other Changes:
- -
-
    -
  • Changed locations of binaries: -
      -
    • Moved {@code gdbserver} from -{@code toolchain/<arch-os-ver>/prebuilt/gdbserver} to -{@code prebuilt/android-<arch>/gdbserver/gdbserver}.
    • -
    • Renamed x86 toolchain prefix from {@code i686-android-linux-} to -{@code i686-linux-android-}.
    • -
    • 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.
    • -
    • Moved {@code libbfd.a} and {@code libintl.a} from {@code lib/} to {@code -lib32/}.
    • -
    -
  • - -
  • Added and improved various scripts in the rebuild and test NDK toolchain: -
      -
    • Added {@code build-mingw64-toolchain.sh} to generate a new Linux-hosted toolchain -that generates Win32 and Win64 executables.
    • -
    • 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.
    • -
    • Added {@code build-host-gcc.sh} and {@code build-host-gdb.sh} scripts.
    • -
    • Added {@code tests/check-release.sh} to check the content of a given NDK -installation directory, or an existing NDK package.
    • -
    • Rewrote the {@code tests/standalone/run.sh} standalone tests .
    • -
    -
  • -
  • 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).
  • -
-
-
- -
-
- -
-

- Android NDK, Revision 8 (May 2012) -

- -
-

This release of the NDK includes support for MIPS ABI and a few additional fixes.

- -
-
New features:
- -
-
    -
  • 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. - -

    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:

    - -
    APP_ABI := armeabi armeabi-v7a mips
    - -

    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.

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

Note: 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.

-
- -
Important bug fixes:
- -
-
    -
  • 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. - (Issue 28721) -
  • -
  • Fixed an issue in which {@code make-standalone-toolchain.sh} fails to copy - {@code libsupc++.*}.
  • -
-
- -
Other bug fixes:
- -
-
    -
  • 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. -
  • -
-
-
-
-
- -
-

- Android NDK, Revision 7c (April 2012) -

- -
-

This release of the NDK includes an important fix for Tegra2-based devices, and a few -additional fixes and improvements:

- -
-
Important bug fixes:
- -
-
    -
  • 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}).
  • -
-
- -
Important changes:
- -
-
    -
  • 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}.
  • -
  • 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}. -

    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.

    -
  • -
-
- -
Other bug fixes:
- -
-
    -
  • 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 active cores the first time the function -was called, rather than the total number of physically available cores.
  • -
-
-
-
-
- - -
-

- Android NDK, Revision 7b (February 2012) -

- -
-

This release of the NDK includes fixes for native Windows builds, Cygwin and many other - improvements:

- -
-
Important bug fixes:
- -
-
    -
  • 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}.
  • -
  • Reverted to {@code binutils} 2.19 to fix debugging issues that - appeared in NDK r7 (which switched to {@code binutils} 2.20.1).
  • -
  • 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.
  • -
  • Fixed native Windows build ({@code ndk-build.cmd}). Other build modes were not - affected. The fixes include: -
      -
    • Removed an infinite loop / stack overflow bug that happened when trying - to call {@code ndk-build.cmd} from a directory that was not the top of - your project path (e.g., in any sub-directory of it).
    • -
    • 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.
    • -
    • Fixed a problem where special characters in files or paths, other than spaces and - quotes, were not correctly handled.
    • -
    -
  • -
  • 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. - -

    See {@code docs/STANDALONE-TOOLCHAIN.html} for more details about this fix.

    -
  • -
  • 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.
  • -
  • Fixed Cygwin C++ link when not using any specific C++ runtime through - {@code APP_STL}.
  • -
-
-
- -
-
Other changes:
- -
-
    -
  • 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. -

    If you need these features, you must do one of the following:

    -
      -
    • Enable exceptions and/or RTTI explicitly in your modules or - {@code Application.mk}. (recommended)
    • -
    • 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.
    • -
    -
  • -
  • {@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.
  • -
  • 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.
  • -
  • {@code STLport}: Refresh the sources to match the Android platform version. This - update fixes a few minor bugs: -
      -
    • Fixed instantiation of an incomplete type
    • -
    • Fixed minor "==" versus "=" typo
    • -
    • Used {@code memmove} instead of {@code memcpy} in {@code string::assign}
    • -
    • Added better handling of {@code IsNANorINF}, {@code IsINF}, {@code IsNegNAN}, - etc.
    • -
    -

    For complete details, see the commit log.

    -
  • -
  • {@code STLport}: Removed 5 unnecessary static initializers from the library.
  • -
  • 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.
  • -
  • 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.
  • -
  • {@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.
  • -
  • Cygwin: {@code ndk-build} no longer creates an empty "NUL" file in the current - directory when invoked.
  • -
  • Cygwin: Added better automatic dependency detection. In the previous version, it - didn't work properly in the following cases: -
      -
    • When the Cygwin drive prefix was not {@code /cygdrive}.
    • -
    • When using drive-less mounts, for example, when Cygwin would translate - {@code /home} to {@code \\server\subdir} instead of {@code C:\Some\Dir}.
    • -
    -
  • -
  • 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.
  • -
-
-
-
-
- - -
-

- Android NDK, Revision 7 (November 2011) -

- -
-

This release of the NDK includes new features to support the Android 4.0 platform as well - as many other additions and improvements:

- -
-
New features
- -
-
    -
  • Added official NDK APIs for Android 4.0 (API level 14), which adds the following - native features to the platform: - -
      -
    • Added native multimedia API based on the Khronos Group OpenMAX AL? 1.0.1 - standard. The new <OMXAL/OpenMAXAL.h> and - <OMXAL/OpenMAXAL_Android.h> 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 - docs/openmaxal/index.html and http://www.khronos.org/openmax/.
    • - -
    • 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 docs/opensles/index.html and - http://www.khronos.org/opensles/.
    • -
    -
  • - -
  • Added CCache support. To speed up large rebuilds, define the - NDK_CCACHE environment variable to ccache (or the path to - your ccache binary). When declared, the NDK build system automatically - uses CCache when compiling any source file. For example: -
    -export NDK_CCACHE=ccache
    -
    -

    Note: CCache is not included in the NDK release - so you must have it installed prior to using it. For more information about CCache, see - http://ccache.samba.org.

    -
  • - -
  • Added support for setting APP_ABI to all 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 - Application.mk are equivalent with this release: -
    -APP_ABI := all
    -APP_ABI := armeabi armeabi-v7a x86
    -
    - -

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

    -
    -ndk-build APP_ABI=all
    -
    -
  • - -
  • Added a LOCAL_CPP_FEATURES variable in Android.mk 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 docs/ANDROID-MK.html and - docs/CPLUSPLUS-SUPPORT.html for more details.
  • - -
  • Shortened paths to source and object files that are used in build commands. When - invoking $NDK/ndk-build 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 ndk-build from a sub-directory of your project tree, or if - you define NDK_PROJECT_PATH to point to a specific directory.
  • -
-
- -
Experimental features
- -
- You can now build your NDK source files on Windows without Cygwin by calling the - ndk-build.cmd script from the command line from your project path. The - script takes exactly the same arguments as the original ndk-build 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. - -

Important: ndk-gdb does not work on - Windows, so you still need Cygwin to debug.

- -

This feature is still experimental, so feel free to try it and report issues on the - public bug database or public forum. All samples and unit tests - shipped with the NDK succesfully compile with this feature.

-
- -
Important bug fixes
- -
-
    -
  • Imported shared libraries are now installed by default to the target installation - location (libs/<abi>) if APP_MODULES is not defined in - your Application.mk. For example, if a top-level module foo - imports a module bar, then both libfoo.so and - libbar.so are copied to the install location. Previously, only - libfoo.so was copied, unless you listed bar in your - APP_MODULES too. If you define APP_MODULES explicitly, the - behavior is unchanged.
  • - -
  • ndk-gdb now works correctly for activities with multiple categories in - their MAIN intent filters.
  • - -
  • Static library imports are now properly transitive. For example, if a top-level - module foo imports static library bar that imports static - library zoo, the libfoo.so will now be linked against both - libbar.a and libzoo.a.
  • -
-
- -
Other changes
- -
-
    -
  • docs/NATIVE-ACTIVITY.HTML: Fixed typo. The minimum API level should be - 9, not 8 for native activities.
  • - -
  • docs/STABLE-APIS.html: Added missing documentation listing EGL as a - supported stable API, starting from API level 9.
  • - -
  • download-toolchain-sources.sh: Updated to download the toolchain - sources from android.googlesource.com, - which is the new location for the AOSP servers.
  • - -
  • Added a new C++ support runtime named gabi++. More details about it - are available in the updated docs/CPLUSPLUS-SUPPORT.html.
  • - -
  • Added a new C++ support runtime named gnustl_shared that corresponds - to the shared library version of GNU libstdc++ v3 (GPLv3 license). See more info at - docs/CPLUSPLUS-SUPPORT.html
  • - -
  • Added support for RTTI in the STLport C++ runtimes (no support for - exceptions).
  • - -
  • Added support for multiple file extensions in LOCAL_CPP_EXTENSION. For - example, to compile both foo.cpp and bar.cxx as C++ sources, - declare the following: -
    -LOCAL_CPP_EXTENSION := .cpp .cxx
    -
    -
  • - -
  • 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)
  • - -
  • Refreshed the EGL and OpenGLES Khronos headers to support more extensions. Note - that this does not change the NDK ABIs for the corresponding libraries, - because each extension must be probed at runtime by the client application. - -

    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 eglGetProcAddress() or glGetProcAddress(). The - following list describes the newly supported extensions:

    - -
    -
    GLES 1.x
    - -
    -
      -
    • GL_OES_vertex_array_object
    • - -
    • GL_OES_EGL_image_external
    • - -
    • GL_APPLE_texture_2D_limited_npot
    • - -
    • GL_EXT_blend_minmax
    • - -
    • GL_EXT_discard_framebuffer
    • - -
    • GL_EXT_multi_draw_arrays
    • - -
    • GL_EXT_read_format_bgra
    • - -
    • GL_EXT_texture_filter_anisotropic
    • - -
    • GL_EXT_texture_format_BGRA8888
    • - -
    • GL_EXT_texture_lod_bias
    • - -
    • GL_IMG_read_format
    • - -
    • GL_IMG_texture_compression_pvrtc
    • - -
    • GL_IMG_texture_env_enhanced_fixed_function
    • - -
    • GL_IMG_user_clip_plane
    • - -
    • GL_IMG_multisampled_render_to_texture
    • - -
    • GL_NV_fence
    • - -
    • GL_QCOM_driver_control
    • - -
    • GL_QCOM_extended_get
    • - -
    • GL_QCOM_extended_get2
    • - -
    • GL_QCOM_perfmon_global_mode
    • - -
    • GL_QCOM_writeonly_rendering
    • - -
    • GL_QCOM_tiled_rendering
    • -
    -
    - -
    GLES 2.0
    - -
    -
      -
    • GL_OES_element_index_uint
    • - -
    • GL_OES_get_program_binary
    • - -
    • GL_OES_mapbuffer
    • - -
    • GL_OES_packed_depth_stencil
    • - -
    • GL_OES_texture_3D
    • - -
    • GL_OES_texture_float
    • - -
    • GL_OES_texture_float_linear
    • - -
    • GL_OES_texture_half_float_linear
    • - -
    • GL_OES_texture_npot
    • - -
    • GL_OES_vertex_array_object
    • - -
    • GL_OES_EGL_image_external
    • - -
    • GL_AMD_program_binary_Z400
    • - -
    • GL_EXT_blend_minmax
    • - -
    • GL_EXT_discard_framebuffer
    • - -
    • GL_EXT_multi_draw_arrays
    • - -
    • GL_EXT_read_format_bgra
    • - -
    • GL_EXT_texture_format_BGRA8888
    • - -
    • GL_EXT_texture_compression_dxt1
    • - -
    • GL_IMG_program_binary
    • - -
    • GL_IMG_read_format
    • - -
    • GL_IMG_shader_binary
    • - -
    • GL_IMG_texture_compression_pvrtc
    • - -
    • GL_IMG_multisampled_render_to_texture
    • - -
    • GL_NV_coverage_sample
    • - -
    • GL_NV_depth_nonlinear
    • - -
    • GL_QCOM_extended_get
    • - -
    • GL_QCOM_extended_get2
    • - -
    • GL_QCOM_writeonly_rendering
    • - -
    • GL_QCOM_tiled_rendering
    • -
    -
    - -
    EGL
    - -
    -
      -
    • EGL_ANDROID_recordable
    • - -
    • EGL_NV_system_time
    • -
    -
    -
    -
  • -
-
-
-
-
- - -
-

- Android NDK, Revision 6b (August 2011) -

- -
-

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:

-
-
Important bug fixes
-
-
    -
  • Fixed the build when APP_ABI="armeabi x86" is used for - multi-architecture builds.
  • -
  • Fixed the location of prebuilt STLport binaries in the NDK release package. - A bug in the packaging script placed them in the wrong location.
  • -
  • Fixed atexit() usage in shared libraries with the x86standalone - toolchain.
  • -
  • Fixed make-standalone-toolchain.sh --arch=x86. It used to fail - to copy the proper GNU libstdc++ binaries to the right location.
  • -
  • Fixed the standalone toolchain linker warnings about missing the definition and - size for the __dso_handle symbol (ARM only).
  • -
  • Fixed the inclusion order of $(SYSROOT)/usr/include for x86 builds. - See the bug for - more information.
  • -
  • Fixed the definitions of ptrdiff_t and size_t in - x86-specific systems when they are used with the x86 standalone toolchain.
  • -
-
-
-
-
- -
-

- Android NDK, Revision 6 (July 2011) -

- -
-

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 - CHANGES.HTML document included in the NDK package. -

-
-
General notes:
-
-
    -
  • 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 docs/CPU-X86.html in the NDK package. - -

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

    - -
    APP_ABI := armeabi armeabi-v7a x86
    - -

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

    - -
  • - -
  • You can build a standalone x86 toolchain using the ---toolchain=x86-4.4.3 - option when calling make-standalone-toolchain.sh. See - docs/STANDALONE-TOOLCHAIN.html for more details. -
  • -
  • The new ndk-stack tool lets you translate stack traces in - logcat 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 docs/NDK-STACK.html. -
  • -
-
-
Other changes:
-
arm-eabi-4.4.0, which had been deprecated since NDK r5, has been - removed from the NDK distribution.
- -
-
-
- -
-

- Android NDK, Revision 5c (June 2011) -

- -
-

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:

-
-
Important bug fixes:
-
-
    -
  • ndk-build: Fixed a rare bug that appeared when trying to perform parallel - builds of debuggable projects.
  • - -
  • Fixed a typo that prevented LOCAL_WHOLE_STATIC_LIBRARIES to work - correctly with the new toolchain and added documentation for this in - docs/ANDROID-MK.html.
  • - -
  • Fixed a bug where code linked against gnustl_static crashed when run on - platform releases older than API level 8 (Android 2.2).
  • - -
  • ndk-gdb: Fixed a bug that caused a segmentation fault when debugging -Android 3.0 - or newer devices.
  • - -
  • <android/input.h>: 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 - history_index parameter, and the correct definitions are shown below: -
    -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);
    -
    -
  • - -
  • 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, - pthread_rwlock_init).
  • - -
-
- -
Minor improvements and fixes:
-
-
    -
  • Object files are now always linked in the order they appear in - LOCAL_SRC_FILES. This was not the case previously because the files were - grouped by source extensions instead.
  • - -
  • When import-module fails, it now prints the list of directories that - were searched. This is useful to check that the NDK_MODULE_PATH definition - used by the build system is correct.
  • - -
  • When import-module succeeds, it now prints the directory where the - module was found to the log (visible with NDK_LOG=1).
  • - -
  • Increased the build speed of debuggable applications when there is a very large number - of include directories in the project.
  • - -
  • ndk-gdb: Better detection of adb shell failures and improved - error messages.
  • - -
  • <pthread.h>: Fixed the definition of - PTHREAD_RWLOCK_INITIALIZER for API level 9 (Android 2.3) and higher.
  • - -
  • Fixed an issue where a module could import itself, resulting in an infinite loop in - GNU Make.
  • - -
  • Fixed a bug that caused the build to fail if LOCAL_ARM_NEON was set to - true (typo in build/core/build-binary.mk).
  • - -
  • Fixed a bug that prevented the compilation of .s assembly files - (.S files were okay).
  • -
-
-
-
-
- -
-

- Android NDK, Revision 5b (January 2011) -

- -
-

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: -

-
    -
  • 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.
  • -
  • 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.
  • -
  • Adds missing documentation for the - "gnustl_static" value for APP_STL, that allows you to link against - a static library version of GNU libstdc++.
  • the -
  • Fixed the following ndk-build issues: -
      -
    • 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.
    • -
    • 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.
    • -
    • A typo that prevented the cpufeatures library from working correctly - with the new NDK toolchain.
    • -
    • Builds in Cygwin are faster by avoiding calls to cygpath -m - 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 -NDK_USE_CYGPATH=1 in your - environment to use cygpath -m again.
    • -
    • 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. -
    -
  • -
  • Fixed a typo that prevented the NDK_MODULE_PATH environment variable from -working properly when - it contained multiple directories separated with a colon.
  • -
  • The prebuilt-common.sh 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.
  • -
  • A missing declaration for INET_ADDRSTRLEN was added to -<netinet/in.h>.
  • -
  • Missing declarations for IN6_IS_ADDR_MC_NODELOCAL and -IN6_IS_ADDR_MC_GLOBAL were added to <netinet/in6.h>.
  • -
  • 'asm' was replaced with '__asm__' in <asm/byteorder.h> to allow -compilation with -std=c99.
  • -
-
-
- -
-

- Android NDK, Revision 5 (December 2010) -

- -
-

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 CHANGES.HTML document included in the downloaded NDK -package. -

-
-
General notes:
-
-
    -
  • Adds support for native activities, which allows you to implement the - Android application lifecycle in native code.
  • - -
  • Adds native support for the following: - -
      - -
    • Input subsystem (such as the keyboard and touch screen)
    • - -
    • Access to sensor data (accelerometer, compass, gyroscope, etc).
    • - -
    • Event loop APIs to wait for things such as input and sensor events.
    • - -
    • Window and surface subsystem
    • - -
    • Audio APIs based on the OpenSL ES standard that support playback and recording - as well as control over platform audio effects
    • - -
    • Access to assets packaged in an .apk file.
    • - -
    -
  • - -
  • 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 - ./configure && make. 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.
  • - -
  • 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).
  • - -
  • 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.
  • - -
  • Includes improvements to the cpufeatures 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.
  • - -
  • Adds an EGL library that lets you create and manage OpenGL ES textures and - services.
  • - -
  • Adds new sample applications, native-plasma and -native-activity, - to demonstrate how to write a native activity.
  • - -
  • Includes many bugfixes and other small improvements; see docs/CHANGES.html for a -more - detailed list of changes.
  • -
-
-
-
-
- -
-

- Android NDK, Revision 4b (June 2010) -

- -
-
-
NDK r4b notes:
- -
-

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.

-
-
- -
-
General notes:
- -
-
    -
  • Provides a simplified build system through the new ndk-build build - command.
  • - -
  • Adds support for easy native debugging of generated machine code on production - devices through the new ndk-gdb command.
  • - -
  • Adds a new Android-specific ABI for ARM-based CPU architectures, - armeabi-v7a. The new ABI extends the existing armeabi ABI to - include these CPU instruction set extensions: - -
      -
    • Thumb-2 instructions
    • - -
    • VFP hardware FPU instructions (VFPv3-D16)
    • - -
    • 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.
    • -
    -
  • - -
  • Adds a new cpufeatures 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.
  • - -
  • Adds a sample application, hello-neon, that illustrates how to use the - cpufeatures library to check CPU features and then provide an optimized - code path using NEON instrinsics, if supported by the CPU.
  • - -
  • 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 - .apk.
  • - -
  • 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.
  • - -
  • 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.
  • -
-
-
-
-
- -
-

- Android NDK, Revision 3 (March 2010) -

- -
-
-
General notes:
- -
-
    -
  • Adds OpenGL ES 2.0 native library support.
  • - -
  • Adds a sample application,hello-gl2, that illustrates the use of - OpenGL ES 2.0 vertex and fragment shaders.
  • - -
  • 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.
  • -
-
-
-
-
- -
-

- Android NDK, Revision 2 (September 2009) -

- -
-

Originally released as "Android 1.6 NDK, Release 1".

- -
-
General notes:
- -
-
    -
  • Adds OpenGL ES 1.1 native library support.
  • - -
  • Adds a sample application, san-angeles, that renders 3D graphics - through the native OpenGL ES APIs, while managing activity lifecycle with a {@link - android.opengl.GLSurfaceView} object.
  • -
-
-
-
-
- -
-

- Android NDK, Revision 1 (June 2009) -

- -
-

Originally released as "Android 1.5 NDK, Release 1".

- -
-
General notes:
- -
-
    -
  • Includes compiler support (GCC) for ARMv5TE instructions, including Thumb-1 - instructions.
  • - -
  • Includes system headers for stable native APIs, documentation, and sample - applications.
  • -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

System and Software Requirements

- -

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.

- -

The Android SDK

- - - -

Supported operating systems

- - - -

Required development tools

- - - -

Android platform compatibility

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Installing the NDK

-

Installing the NDK on your development computer is straightforward and involves extracting the - NDK from its download package.

- -

Before you get started make sure that you have downloaded the latest Android SDK 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 System and -Software Requirements - for the NDK, if you haven't already.

- -

To install the NDK, first download the appropriate package from the table at the top of this - page. Then, follow the procedure for your development platform:

- When uncompressed, the NDK files are contained in a directory called - android-ndk-<version>. 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 - <ndk>. - - -

You are now ready to start working with the NDK.

- - -

Getting Started with the NDK

- -

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 <ndk>/docs/ -directory. In particular, please read the OVERVIEW.HTML document completely, so that you -understand the intent of the NDK and how to use it.

- -

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

- -

Here's the general outline of how you work with the NDK tools:

- -
    -
  1. Place your native sources under <project>/jni/...
  2. - -
  3. Create <project>/jni/Android.mk to describe your native sources to the - NDK build system
  4. - -
  5. Optional: Create <project>/jni/Application.mk.
  6. - -
  7. Build your native code by running the 'ndk-build' script from your project's directory. It - is located in the top-level NDK directory: -
    cd <project>
    -<ndk>/ndk-build
    -
    - -

    The build tools copy the stripped, shared libraries needed by your application to the - proper location in the application's project directory.

    -
  8. - -
  9. 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 .apk file.
  10. -
- -

For complete information on all of the steps listed above, please see the documentation -included with the NDK package.

- - -

Using the NDK

- -

The Android framework provides two ways to use native code:

- - - - - - - -

Contents of the NDK

- -

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

- - - -

The latest release of the NDK supports the following instruction sets:

- - - -

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 - Application.mk 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 .apk. - Complete information is provided in the CPU-ARCH-ABIS.HTML in the NDK package.

- -

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 Development tools section.

- - -

Development tools

- -

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.

- -

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

- - - -

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.

- -

Important: With the exception of the libraries listed above, - native system libraries in the Android platform are not stable and may change in future - platform versions. Your applications should only make use of the stable native system - libraries provided in this NDK.

- - - -

Documentation

- -

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 <ndk>/docs/ directory. Included are these files (partial listing):

- - - -

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 <ndk>/docs/system/libc/ directory:

- - - - - - - -

Sample apps

- -

The NDK includes sample applications that illustrate how to use native code in your Android - applications:

- - - -

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

- -

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

- -

Next, build the sample Android applications that use the shared libraries:

- - - -

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 Overview - section for developing on Android.

- - - -

Exploring the hello-jni Sample

- -

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.

- -

The main components of the sample include:

- - - -
    -
  1. Create a new project in Eclipse from the existing sample source or use the - android tool to update the project so it generates a build.xml file that you can - use to build the sample. - -
      -
    • In Eclipse: - -
        -
      1. Click File > New Android Project...
      2. - -
      3. Select the Create project from existing source radio button.
      4. - -
      5. Select any API level above Android 1.5.
      6. - -
      7. In the Location field, click Browse... and select - the <ndk-root>/samples/hello-jni directory.
      8. - -
      9. Click Finish.
      10. -
      -
    • - -
    • On the command line: - -
        -
      1. Change to the <ndk-root>/samples/hello-jni directory.
      2. - -
      3. Run the following command to generate a build.xml file: -
        android update project -p . -s
        -
      4. -
      -
    • -
    -
  2. - -
  3. Compile the native code using the ndk-build command. -
    -cd <ndk-root>/samples/hello-jni
    -<ndk_root>/ndk-build
    -
    -
  4. - -
  5. 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: -
    -ant debug
    -adb install bin/HelloJni-debug.apk
    -
    -
  6. -
- -

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

- - - -

Exploring the native-activity Sample Application

- -

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:

- - - -

To build this sample application:

- -
    -
  1. Create a new project in Eclipse from the existing sample source or use the - android tool to update the project so it generates a build.xml file that you can - use to build the sample. - -
      -
    • In Eclipse: - -
        -
      1. Click File > New Android Project...
      2. - -
      3. Select the Create project from existing source radio button.
      4. - -
      5. Select any API level above Android 2.3.
      6. - -
      7. In the Location field, click Browse... and select - the <ndk-root>/samples/native-activity directory.
      8. - -
      9. Click Finish.
      10. -
      -
    • - -
    • On the command line: - -
        -
      1. Change to the <ndk-root>/samples/native-activity directory.
      2. - -
      3. Run the following command to generate a build.xml file: -
        -android update project -p . -s
        -
        -
      4. -
      -
    • -
    -
  2. - -
  3. Compile the native code using the ndk-build command. -
    -cd <ndk-root>/platforms/samples/android-9/samples/native-activity
    -<ndk_root>/ndk-build
    -
    -
  4. + if it is essential to your app—never because you simply prefer to program in C/C++. + 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.

    -
  5. 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: -
    -ant debug
    -adb install bin/NativeActivity-debug.apk
    -
    -
  6. -
+ + NDK Documentation and Downloads -- cgit v1.1