<html><body><pre>Android NDK ChangeLog:

-------------------------------------------------------------------------------
android-ndk-r8d

IMPORTANT CHANGES:

- Added GCC 4.7 compiler.  Since GCC 4.6 is still the default,
  you need to explicitly enable it:
  1. For ndk-build: Either export NDK_TOOLCHAIN_VERSION=4.7 or add it
     in Application.mk.
  2. For standalone: Use "--toolchain=" option in make-standalone-toolchain.sh.
     eg. "--toolchain=arm-linux-androideabi-4.7"

  This feature is experimental now but welcome to try and report issues.

- Added stlport exception support via gabi++.  Note that the new gabi++
  depends on dlopen, etc, meaning that:
  1. libstlport_static.a can no longer be used in "static" executable (-static,
     only possible with standalone toolchain).  "dynamic" executable (eg.
     include $(BUILD_EXECUTABLE)) can link fine because compiler impliciently adds -ldl
  2. If your project links with "-nostdlib -Wl,--no-undefined", you need to provide
     your own -ldl

  See CPLUSPLUS-SUPPORT.html.

  This feature is experimental now and works better with GCC 4.6/4.7
  than with GCC 4.4.3 and clang3.1.  Welcome to try and report issues.

- Add -mstack-protector-guard option for x86 to choose between "global"
  (default, compatible with older bionic) and "tls" (new %gs:20) for
  -fstack-protector, -fstack-protector-all, and -fstack-protector-strong
  (GCC 4.6+).  Note that this alone doesn't enable any -fstack-protector*

- Add android_setCpu() to sources/android/cpufeatures/cpu-features.c
  when auto-detection via /proc isn't possible in and after JB
  See http://code.google.com/p/chromium/issues/detail?id=164154


IMPORTANT BUG FIXES:

- Fixed un-needed rebuild of object files via ndk-build
  See http://code.google.com/p/android/issues/detail?id=39810

- Fixed r8c linker fail in MacOSX 10.6.x with error reads:

    dyld: lazy symbol binding failed: Symbol not found: _memmem
    Referenced from: ...../arm-linux-androideabi/bin/ld
    Expected in: /usr/lib/libSystem.B.dylib

  r8c was packaged on 10.7 machine which produced binaries not
  compatible with 10.6 SDK/NDK still supports.  Will build it
  on 10.6 from now on.

- Removed '-x c++' from clang++ in standalone.
  See http://code.google.com/p/android/issues/detail?id=39089

- Fixed issues using NDK_TOOLCHAIN_VERSION=clang3.1 in cygwin
  See http://code.google.com/p/android/issues/detail?id=39585

- Fixed make-standalone-toolchain.sh to create standalone toolchain
  on cygwin and MinGW, which works for all cygwin, MingGW, and CMD.exe.
  See http://code.google.com/p/android/issues/detail?id=39915 and
  http://code.google.com/p/android/issues/detail?id=39585 (again)

- Added  missing SL_IID_ANDROIDBUFFERQUEUESOURCE in android-14 for
  ARM/X86.  See http://code.google.com/p/android/issues/detail?id=40625

- Fixed x86 cpu detection for MOVBE
  See http://code.google.com/p/android/issues/detail?id=39317

- Fixed an issue preventing STL dependencies to C++ sources not
  in .cpp extension.

- Fixed GCC 4.6 ARM ICE at reload1.c:1061
  See http://code.google.com/p/android/issues/detail?id=20862

- Fixed GCC 4.4.3 ARM ICE at emit-rtl.c:1954
  See http://code.google.com/p/android/issues/detail?id=22336

- Fixed GCC 4.4.3 ARM ICE at postreload.c:396
  See http://code.google.com/p/android/issues/detail?id=22345

- Fixed GCC 4.6/4.7 elides lambdas
  See http://code.google.com/p/android/issues/detail?id=35933


OTHER BUG FIXES:

- Fixed NDK headers
  1. Fixed __WINT_TYPE__ and wint_t to be the same type
  2. Corrected typo in &lt;android/bitmap.h&gt;
     See http://code.google.com/p/android/issues/detail?id=15134
  3. Corrected typo in &lt;errono.h&gt;
     See http://code.google.com/p/android/issues/detail?id=15134
  4. Check the presence of __STDC_VERSION__ in &lt;sys/cdefs.h&gt;
     See http://code.google.com/p/android/issues/detail?id=14627
  5. Re-org headers byteswap.h and dirent.h
  6. Fixed limits.h to include page.h which provides PAGE_SIZE
     See http://code.google.com/p/android/issues/detail?id=39983
  7. Fixed return type of glGetAttribLocation and glGetUniformLocation
     from int to GLint.
  8. Fixed __BYTE_ORDER for x86
     See http://code.google.com/p/android/issues/detail?id=39824

- Fixed ndk-build to not overwrite -Os with -O2 in ARM

- Fixed to allow overwriting HOST_AWK, HOST_SED, and HOST_MAKE.

- Fixed ld.gold issue on fsck_msdos build linking objects built by ICC

- Fixed ARM EHABI support in clang conforming to spec.

- Fixed GDB to shorten the time spending on walking target's link map upon
  solib events.  See http://code.google.com/p/android/issues/detail?id=38402

- Fixed missing libgcc.a when linking shared libraries


OTHER CHANGES:

- Backported 64-bit built-in atomic functions for ARM to GCC 4.6

- Documentation for audio output latency, other misc docs/ fixes

- Non-void functions in debug build by Clang now raise SIGILL on path w/o
  return statement

- make-standalone-toolchain.sh now accepts surffix "-clang3.1" which is
  equivalent to adding "--llvm-version=3.1" on GCC 4.6 toolchain.

- Changed GCC and Clang bug report URL to http://source.android.com/source/report-bugs.html

- Added ARM ELF support to llvm-objdump.

- Suppressed warning "treating c input as c++" in clang.

- Only 32-bit of libiberty.a is built (placed at lib32/)


-------------------------------------------------------------------------------
android-ndk-r8c

IMPORTANT CHANGES:

- Added Clang 3.1 compiler.  Since GCC 4.6 is still the default,
  you need to explicitly enable it:
  1. For ndk-build: Either export NDK_TOOLCHAIN_VERSION=clang3.1 or add it
     in Application.mk.
  2. For standalone: Add "--llvm-version=3.1" to make-standalone-toolchain.sh
     and replace CC and CXX in your makefile with &lt;tool-path&gt;/bin/clang
     and &lt;tool-path&gt;/bin/clang++.

  See STANDALONE-TOOLCHAIN.html for details.
  This feature is experimental now but welcome to try and report issues.

- Gold linker ld.gold is now available in Windows toolchain.  Gold is also the
  default linker for ARM/X86 on all hosts.  You may override it to use ld.bfd
  linker by adding LOCAL_LDFLAGS += -fuse-ld=bfd in Android.mk, or pass
  -fuse-ld=bfd to g++/clang++ commandline which does the linking.

- ndk-build[.cmd] and ndk-gdb now check and bail out if NDK path contains space.

- Changes in API level
  1. Projects with android-10 .. 13 specified in APP_PLATFORM, project.properties or
     default.properties will link against android-9 instead of android-14.
  2. Executable in project with android-16 (Jelly Bean) or higher is compiled
     with -fPIE (position-independent executables).  A new APP_PIE allow manual control
     of this behavior.  See APPLICATION-MK.html for details.  Note that all API level
     above 14 still link against platforms/android-14. ie. no new platforms/android-N
     is added.
  3. ndk-build now warns about the adjusted API level is larger than android:minSdkVersion
     in project's AndroidManifest.xml.

- ARM: Updated 'cpu-features' helper library to include 9 more ARM-specific features

  See sources/android/cpufeatures/cpu-features.h for details.

- X86: long double is still a distinct type but it's 8-byte in size now (same as double)

- APP_ABI=armeabi-v7a: 
  1. -march=armv7-a is also passed to linker to link v7-specific libraries and crt*.o
  2. -mfpu=vfpv3-d16 is added by ndk-build instead of -mfpu=vfp in the previous releases.


IMPORTANT BUG FIXES:

- Fixed an issue when make-standalone-toolchain.sh is run under root privilege resulting
  in standalone toolchain inaccessible to some.
  1. All files/executables attributes in NDK release package are set to readable/executable to all
  2. The ownership/group of file libstdc++.a is now preserved when copied

  See http://code.google.com/p/android/issues/detail?id=35279

- Removed redundant \r from Windows prebuilt echo.exe. The redundant \r in gdb.setup fails
  GDB because it incorrectly becomes part of the path.

  See http://code.google.com/p/android/issues/detail?id=36054

- Fixed windows parallel builds that sometimes failed due to timing issues in the host-mkdir
  implementation.

  See http://code.google.com/p/android/issues/detail?id=25875

- Fixed GCC 4.4.3 GNU libstdc++ to NOT merge typeinfo names by default.

  See
    toolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo
    http://code.google.com/p/android/issues/detail?id=22165
    https://groups.google.com/forum/#!msg/android-ndk/FlnuAOIKHOo/kLEwaBso7KYJ%5B1-25%5D

- Fixed crash on null context in GCC 4.6 cp/mangle.c::write_unscoped_name, where gcc
  may crash when context == NULL and dereferenced in TREE_CODE

- Fixed GCC 4.4.3 crashes on NEON specific typedef for float

  See http://code.google.com/p/android/issues/detail?id=34613

- Fixed the STLport internal _IteWrapper::operator*() implementation where stale
  stack location holding the dereferenced value is returned and leads to runtime crashes

  See http://code.google.com/p/android/issues/detail?id=38630

- ARM: Fixed ARM GCC 4.4.3/4.6 g++ to not warn about "the mangling of &lt;va_list&gt; has
  changed in GCC 4.4".  Switch -Wno-psabi is no longer needed to workaround.

- ARM: Fix an issue when project with .arm/.neon suffixes in LOCAL_SRC_FILES also
  uses APP_STL.  With APP_STL, ndk-build searches for C++ file in LOCAL_SRC_FILES before
  adding STL header/lib paths to compilation.  Fix ndk-build to filter out .arm and .neon
  suffixes before the search, otherwise item in LOCAL_SRC_FILESfile like myfile.cpp.arm.neon
  won't be considered C++.

- ARM: Fixed binutils-2.21/ld.bfd to be capable of linking object from older binutils w/o
  tag_FP_arch, which used to produce error message reads

    BFD (GNU Binutils) 2.21 assertion fail
         ...../binutils/binutils-2.21/bfd/elf32-arm.c:10190

  The root cause is that ARM's binutils-2.21/ld.bfd performs sanity check and asserts
  when "tag_FP_arch==0 && tag_ABI_HardFP_use !=0".  This can happen in object using FP
  linked by older binutils when tag_FP_arch isn't produced at all (thus gets the default
  "zero" in new linker).

  See http://code.google.com/p/android/issues/detail?id=35209

- ARM: Removed warning when binutils-2.19/ld links prebuilt object by newer binutils-2.21
  which reads

    Unknown EABI object attribute 44

  The reason is that all prebuilt crt*.o and C++ STL are built with later GCC 4.6/binutils-2.21
  and contain new tag "DIV_use" with value set to "Not allowed".  This tag can be safely ignored
  by the original GCC4.4.3/binutils-2.19 toolchain since it is only for sanity check.

- ARM: Fixed an issue in GNU stdc++ compilation with both -mthumb and -march=armv7-a, by
  making make-standalone-toolchain.sh to also populate headers/libs in sub-directory
  "armv7-a/thumb".

  See http://code.google.com/p/android/issues/detail?id=35616

- ARM: Fix error: unresolvable R_ARM_THM_CALL relocation

  See
    http://code.google.com/p/android/issues/detail?id=35342
    https://groups.google.com/forum/?fromgroups#!topic/android-ndk/HaLycHImqL8

- ARM: Fixed internal compiler error at "reload1.c:3633".  The reason is that ARM back-end
  expects wrong operand type when sign-extend from char.

  Back port fix from http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50099

- ARM: Fixed internal compiler error with negative shift amount.
    int foo(int a, int b)
    {
        return a | (b &lt;&lt; -3);
    }

  See http://gcc.gnu.org/ml/gcc-patches/2011-10/msg00594.html

- X86: Fixed -fstack-protector, which is also the default for ndk-build x86 ABI

- MIPS: Fixed stlport endianess by setting _STLP_LITTLE_ENDIAN to 1 when compiling
  MIPS' libstlport_*

- MIPS: Fixed GCC __builtin_unreachable issue compiling LLVM

  See Bug 54369: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54369

- MIPS: Backport fix to bug 50380: cc1 hangs eating 100% CPU

  See
    http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50380
    http://gcc.gnu.org/viewcvs/trunk/gcc/cse.c?r1=177852&r2=182498&pathrev=182498

- GDB: Disable python support in gdb-7.x at build, otherwise gdb-7.x/configure may
  pick up whatever python in host and build gdb with hard-wired dependency to specific
  version of python.

  See http://code.google.com/p/android/issues/detail?id=36120

- GDB: Fixed ndk-gdb when APP_ABI contains "all" and matches none of known architecture

  See http://code.google.com/p/android/issues/detail?id=35392

- GDB: Fixed Windows pathname support.  Keep ':' if it looks like it could be part of
  a Windows path starting with a drive letter.

  See
    http://sourceware.org/ml/gdb/2011-06/msg00030.html
    http://sourceware.org/bugzilla/show_bug.cgi?id=12843

- GDB: Fixed add HW breakpoint support for ARM in gdbserver

  See http://sourceware.org/ml/gdb-patches/2011-09/msg00200.html

- GDB: Fixed to only read current solibs when linker is consistent.  Speeds up solib
  event handling.

  See http://code.google.com/p/android/issues/detail?id=37677

- GDB: Fixed to make repeated attempts to find solib breakpoint.  GDB will retry enable_break()
  during every call to svr4_current_sos() until it succeeds.

  See https://android-review.googlesource.com/#/c/43563

- GDB: Fixed an issue where gdb cannot stop on breakpoints placed on dlopen-ed
  libraries.

  See http://code.google.com/p/android/issues/detail?id=34856

- GDB: Fixed SIGILL in dynamic linker when calling dlopen(), on system
  where /system/bin/linker is stripped of symbols and rtld_db_dlactivity()
  is implemented as Thumb, due to not preserving LSB of sym_addr

  See http://code.google.com/p/android/issues/detail?id=37147


OTHER BUG FIXES:

- Fixed NDK headers
  1. Fixed arch-mips/include/asm/* previously incorrectly cleaned from original kernel
     See https://android-review.googlesource.com/#/c/43335
  2. Replace struct member data "__unused" with "__linux_unused" in linux/sysctl.h
     and linux/icmp.h to avoid conflict with "#define __unused" in sys/cdefs.h
  3. Fixed fenv.h to enclosed C functions with __BEGIN_DECLS/__END_DECLS
  4. Removed unimplemented functions in malloc.h
  5. Fixed stdint.h.  See http://code.google.com/p/android/issues/detail?id=1952
  6. Fixed preprocessor macros in &lt;arch&gt;/include/machine/*
  7. Replaced link.h for mips with new version for all platforms
  8. Remove linux-unistd.h
  9. Move GLibc-specific macros LONG_LONG_MIN, LONG_LONG_MAX and ULONG_LONG_MAX from
     &lt;pthread.h&gt; to &lt;limits.h&gt;.

- Fixed a buffer overflow in ndk-stack-parser.

- Fixed _STLP_USE_EXCEPTIONS, when not defined, to omit all declarations
  and uses of __Named_exception.  Compile and use __Named_exception only
  when STLport is being allowed to use exceptions.

- Fixed to build Linux-only NDK packages (invoked as follow) w/o also building windows

    ./build/tools/make-release.sh --force --systems=linux-x86

- Fixed libc.so to not export atexit() and __do_handler.  These symbols are exported
  on ARM 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 crtbegin_*.o

  If your project is linked with "-nostdlib -Wl,--no-undefined", you need to provide
  your own __dso_handle because crtbegin_so.o isn't linked.  The content of __dso_handle
  doesn't matter.  eg.

    extern "C" {
      extern void *__dso_handle __attribute__((__visibility__ ("hidden")));
      void *__dso_handle;
    }

- ARM: Fixed symbol decoder (used in objdump) for plt entries to generate more
  readable form function@plt

- X86: Removed the following symbols introduced in GCC 4.6/libgcc.a from X86's libc.so

    __aeabi_idiv0, __aeabi_ldiv0, __aeabi_unwind_cpp_pr1, and __aeabi_unwind_cpp_pr2

- MIPS: Removed unused .ctors, .dtors, and .eh_frame in MIPS crt*_so.S.

- GDB: ndk-gdb now only takes the last line of output for ndk-build DUMP_XXXX.  This
  ensures that if Application.mk or Android.mk do print something with $(info ...),
  it doesn't get injected into the result of DUMP_XXX.

  See https://groups.google.com/d/msg/android-ndk/-/ew0lTWGr1UEJ


OTHER CHANGES:

- Removed arch-x86 and arch-mips headers from platforms/android-{3,4,5,8}.
  Those headers are incomplete to begin with, since both X86 and MIPS ABIs are only
  supported at API &ge; 9

- Simplified c++ include path in standalone package, eg. change

    &lt;path&gt;/arm-linux-androideabi/include/c++/4.6.x-google
  to
    &lt;path&gt;/include/c++/4.6/

  See http://code.google.com/p/android/issues/detail?id=35279

- Enhanced ndk-build to recognize more C++ file extensions by default:

    .cc .cp .cxx .cpp .CPP .c++ .C

  You may still use LOCAL_CPP_EXTENSION to override it

- Fixed an issue in samples/san-angeles about black/freeze frame
  at re-launch.

- Replaced deprecated APIs in NDK samples
  1. hello-gl2 from android-5 to android-7
  2. native-activity from android-9 to android-10
  3. native-audio from android-9 to android-10
  4. native-plasma from android-9 to android-10

  See http://code.google.com/p/android/issues/detail?id=20017

- Added new branding for Android executables with a simpler scheme in section
  .note.android.ident (defined in 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 */
  }

  Previous branding in section .note.ABI-tag is deprecated.

- Added a new script run-tests-all.sh which calls run-tests.sh and standalone/run.sh
  with various conditions.  Script run-tests.sh w/o --abi is also enhanced to compile
  most of tests for all supported ABI and run on all attached devices


-------------------------------------------------------------------------------
android-ndk-r8b

IMPORTANT BUG FIXES:

- Fixed LOCAL_SHORT_COMMANDS issues on darwin-x86 and windows cygwin environment
  and for static libraries.  List file generation is sped up, and it is no longer
  regenerated and causes whole project to be rebuilt every time.

- Fixed several issues in ndk-gdb

    * to pass flags "-e", "-d", "-s" to adb more consistently

    * to accept device serial name containing space

    * to also pull /system/bin/link, so gdb on host can set a breakpoint in
      __dl_rtld_db_dlactivity and be aware of linker activity (eg. rescan solib symbols
      when dlopen() is called)

- Fixed "ndk-build clean" in windows which failed to remove ./libs/*/lib*.so

- Fixed ndk-build.cmd to return non-zero ERRORLEVEL when make fails

- Fixed libc.so to no longer incorrectly export __exidx_start and __exidx_end symbols

- Fixed SEGV when unwinding stack pasts __libc_init for ARM and MIPS.

  Fixed __start (in crtbegin_dynamic/static.o) to "call __libc_init" instead of
  "jump __libc_init", otherwise stack unwinding past __libc_init may get wrong return
  address and crash the program or do wield things.  With "call", return address is pushed
  on stack and unwinding stops correctly at _start.  Note that __libc_init never returns, so
  this fix wonʼt affect normal program execution.  But just in case it "does" return,
  jump to address 0 and halt.


IMPORTANT CHANGES:

- GCC 4.6 toolchain

  Add GCC 4.6 toolchain (binutils 2.21 with gold + GDB 7.3.x) to co-exists with
  the original GCC 4.4.3 toolchain (binutils 2.19 + GDB 6.6).  Note:

    * GCC 4.6 is the default.  You may set NDK_TOOLCHAIN_VERSION=4.4.3 in Application.mk
      to select the original one.

    * Gold linker support is only available for ARM and x86 architectures on linux-86
      and  darwin-x86 hosts.  It's not turned on by default.  Add
      "LOCAL_LDFLAGS += -fuse-ld=gold" in Android.mk to enable it.

    * You will need the new GDB to debug program compiled with -fPIE (including
      binaries in Jelly Bean image)

    * The binutils 2.21 ld also contain back-port of fixes from 2.22

      * Fixed "ld --gc-sections" which incorrectly retain zombie references to external
        libraries.  See http://sourceware.org/bugzilla/show_bug.cgi?id=13177 for detail.

      * Fuxed ARM "strip" to preserve the original p_align and p_flags in GNU_RELRO section
        if they are valid.  Otherwise program built with -fPIE can't be debugged.
        http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/elf.c.diff?cvsroot=src&r1=1.552&r2=1.553

    * Sincos optimization is not enabled for compatibility with old platforms which don't have
      it.

- NX and relro/bind_now protections are enabled by default

  Add "--noexecstack" for assembler and "-z noexecstack" for linker to enable NX
  protection against buffer overflow attacks by enabling NX bit on stack and heap.

  Add "-z relro -z now" for linker to harden internal data sections after linking
  against security vulnerabilities due to memory corruption.  See

  http://www.akkadia.org/drepper/nonselsec.pdf (section 6)
  http://tk-blog.blogspot.com/2009/02/relro-not-so-well-known-memory.html

  For those who really needs it, these features can be disabled by
  1. Passing "--execstack" to assembler and "-z execstack" to linker to
     disable NX protection.
     Passing "-z norelro -z lazy" to linker to disable second protection.
  2. In NDK jni/Android.mk, set the following
     LOCAL_DISABLE_NO_EXECUTE=true: to disable "--noexecstack" and "-z noexecstack"
     LOCAL_DISABLE_RELRO=true: to disable "-z relro -z now"
  see $NDK/docs/ANDROID-MK.html for details

- Brand executables with .note.ABI-tag section

  Brand Android executable with .note.ABI-tag (in crtbegin_static/dynamic.o) for debugging
  tools to act accordingly.  The structure member and values are defined as follow.

  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:

- Backport several patches to fix MIPS issues.

    * http://sourceware.org/bugzilla/show_bug.cgi?id=12637
      mips-linux-gnu: relocation truncated to fit: R_MIPS_TLS_LDM

    * http://sourceware.org/bugzilla/show_bug.cgi?id=12845
      ld segfaults when using --gc-sections

    * http://sourceware.org/ml/binutils/2011-05/msg00198.html
      Refix MIPS GOT_PAGE counting

    * Follow warning symbol link in mips_elf_count_got_symbols.

    * Follow warning symbol link in mips_elf_allocate_lazy_stub.

    * Move MIPS .dynamic to the data segment, so that it is writable.
      Replace hard-coded 4096 with symbols for correct segment sizes for MIPS.

    * Remove -mno-shared as default in MIPS toolchain.  -fPIC (or -fpic if supported)
      is default for Android toolchain.  Without explicitly specifying one of
      -mshared, -fpic, -fPIC, -fpie, or -fPIE, MIPS compiler adds -mno-shared
      which turns off PIC.  Fixed it not to add -mno-shared as default.

- Fixed wrong package names in samples hello-jni and two-libs so tests project
  underneath can compile


OTHER CHANGES:

- New binaries locations

    * gdbserver is moved from toolchain/&lt;arch-os-ver&gt;/prebuilt/gdbserver to
      prebuilt/android-&lt;arch&gt;/gdbserver/gdbserver

    * x86 toolchain prefix is renamed from i686-android-linux- to i686-linux-android-

    * sources/cxx-stl/gnu-libstdc++/include and lib are moved to
      sources/cxx-stl/gnu-libstdc++/4.4.3 when compiled with 4.4.3 GCC, or
      sources/cxx-stl/gnu-libstdc++/4.6 when compiled with 4.6 GCC

    * libbfd.a and libintl.a are moved from lib/ to lib32/

- Header if_dl.h is removed from all platforms and architectures. AF_LINK and sockaddr_dl
    it describes are specpfic to BSD (ie. don't exist in Linux)

- Various scripts to rebuild/test NDK toolchain

    * Add build-mingw64-toolchain.sh to generate a new Linux-hosted toolchain that generates
      Win32 and Win64 executables.

    * Speed up download-toolchain-sources.sh by "clone" but only "checkout" the directories
      that we need to build the NDK toolchain binaries.

    * New build-host-gcc.sh and build-host-gdb.sh

    * Add tests/check-release.sh to check the content of a given NDK installation directory,
      or an existing NDK package.

    * Rewrite standalone tests: tests/standalone/run.sh


-------------------------------------------------------------------------------
android-ndk-r8

IMPORTANT BUG FIXES:

- Fixed a typo in GAbi++ implementation where result of dynamic_cast&lt;D&gt;(b)
  of base class object 'b' to derived class D is adjusted wrong
  (in the opposite direction from base class). See
  http://code.google.com/p/android/issues/detail?id=28721

- Fixed an issue in make-standalone-toolchain.sh which fails to copy
  libsupc++.*.


IMPORTANT CHANGES:

- Added support for the mips ABI.

  This release of the Android NDK contains support for 'mips' ABI.
  To generate machine runs on MIPS-based Android devices, please add 'mips' to
  APP_ABI definition in your Application.mk, or 'all' to generate binaries for
  all currently supported ABI.  See docs/CPU-MIPS.html for details.

- You can build a standalone mips toolchain using the
  --toolchain=mipsel-linux-android-4.4.3 option when calling
  make-standalone-toolchain.sh. See docs/STANDALONE-TOOLCHAIN.html for more details.


OTHER BUG FIXES:

- Fixed ndk-build.cmd to ensure that ndk-build.cmd works correctly even if
  the user has redefined the SHELL environment variable (which can happen under
  the hood when installing a variety of development tools on Windows)


-------------------------------------------------------------------------------
android-ndk-r7c

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 where not configured properly, resulting
  in crashes on Tegra2-based devices and others when trying to use certain
  floating-point functions (e.g., cosf, sinf, expf).


IMPORTANT CHANGES:

- Added support for custom output directories through the NDK_OUT
  environment variable. When defined, this variable is used to store all
  intermediate generated files, instead of $PROJECT_PATH/obj.

  The variable is also recognized by ndk-gdb.

- Added support for building modules with hundreds or even thousand of source
  files by defining LOCAL_SHORT_COMMANDS to true in your Android.mk.

  This change forces the NDK build system to put most linker or archiver
  options into list files, to work-around command-line length limitations
  (particularly on Windows). See docs/ANDROID-MK.html for details.


OTHER BUG FIXES:

- Fixed android_getCpuCount() implementation in the cpufeatures helper
  library. The previous implementation only listed the cores that were
  active the first time the function was called. This behavior could
  provide results that were too low on devices that disable and enable
  cores dynamically.

-------------------------------------------------------------------------------
android-ndk-r7b

IMPORTANT BUG FIXES:

- Updated &lt;sys/atomics.h&gt; 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 completely be eliminated. For more details, read
  docs/ANDROID-ATOMICS.html.

- Reverted to binutils 2.19 to try to fix debugging issues that
  appeared in NDK r7 (which switched to binutils 2.20.1).

- Fixed ndk-build on 32-bit Linux. A packaging error put a 64-bit version
  of the 'awk' executable under prebuilt/linux-x86/bin in NDK r7.

- Fixed native Windows build (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 ndk-build.cmd from a directory that was _not_ the top of your
      project path (e.g. 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
  -lstdc++ (i.e. linking against the GNU libstdc++ C++ runtime). You should
  use -lgnustl_shared if you want to link against the shared library
  version or -lstdc++ for the static version.

  See docs/STANDALONE-TOOLCHAIN.html for more details about this fix.

- Fixed gnustl_shared on Cygwin. The linker complained that it couldn't find
  libsupc++.a while the file was at the right location.

- Fixed cygwin C++ link when not using any specific C++ runtime through
  APP_STL.

OTHER CHANGES:

- When your application uses the GNU libstdc++ runtime, the compiler will
  no longer forcibly enable exceptions and RTTI. This change results in smaller
  code. If you need these features, you need to do either one of these:

     1/ Enable exceptions and/or RTTI explicitly in your modules or
        Application.mk. (recommended)

     2/ Define APP_GNUSTL_FORCE_CPP_FEATURES to 'exceptions', 'rtti' or both
        in your Application.mk. See docs/APPLICATION-MK.html for more details.

- 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 'ps', which is usually a service
  process.

- Fixed a rare bug where NDK r7 would fail to honor the LOCAL_ARM_MODE value
  and always compile certain source files (but not all) to 32-bit instructions.

- 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
   - Use memmove instead of memcpy in string::assign
   - Added better handling of IsNANorINF, IsINF, IsNegNAN, etc..

  For complete details, see the commit log.

- stlport: Removed 5 un-necessary static initializers from the library.

- The GNU libstdc++ libraries for armeabi-v7a were mistakenly compiled for
  armeabi instead. This had no impact on correctness, but using the right
  ABI should provide for slightly better performance.

- the 'cpu-features' helper library was updated to report three optional
  x86 CPU features (SSSE3, MOVBE and POPCNT). See docs/CPU-FEATURES.html
  for more details.

- docs/NDK-BUILD.html was updated to mention NDK_APPLICATION_MK instead
  of NDK_APP_APPLICATION_MK to select a custom Application.mk file.

- cygwin: ndk-build no longer creates an empty "NUL" file in the current
  directory when invoked.

- cygwin: better automatic dependency detection. It previously didn't work
  properly in the following case:

    - When the cygwin drive prefix was not /cygdrive
    - When using drive-less mounts, e.g. when Cygwin would translate /home
      to \\server\subdir instead of C:\Some\Dir.

- cygwin: ndk-build does not try to use the native Windows tools under
  $NDK/prebuilt/windows/bin with certain versions of Cygwin and/or
  GNU Make.

-------------------------------------------------------------------------------
android-ndk-r7

IMPORTANT CHANGES:

- New official NDK APIs for Android 4.0 (a.k.a. API level 14),
  which adds the following native features to the platform:

     - Native multimedia API based on the Khronos Group OpenMAX AL&#0153;
       1.0.1 Standard.  New headers &lt;OMXAL/OpenMAXAL.h&gt; and
       &lt;OMXAL/OpenMAXAL_Android.h&gt; are provided to allow
       applications targeting this API level to perform multimedia output
       directly from native code 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&#0153; Standard.  API Level 14 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/.

- CCache support. To speed up large rebuilds, simply define the NDK_CCACHE
  environment variable to 'ccache' (or the path to your ccache binary), as in:

        export NDK_CCACHE=ccache

  The NDK build system will automatically use it when compiling any source
  file. For more information about CCache, see http://ccache.samba.org  

- You can now set your 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 these 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 on the command-line, as in:

        ndk-build APP_ABI=all

  Which is a quick way to check that your project builds for all supported
  ABIs without changing its Application.mk file.

- Shorter paths to source and object files used in build commands.
  When invoking $NDK/ndk-build from your project path, the paths to the
  source, object and binary files passed to the build commands will be
  significantly shorter now because they are now 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 behaviour is unchanged if you invoked ndk-build from a sub-directory
  of your project tree, or if you define NDK_PROJECT_PATH to point to a
  specific directory.

- New LOCAL_CPP_FEATURES variable in Android.mk, used to declare which C++
  features (RTTI or Exceptions) your module uses. This is especially handy
  if you have prebuilt modules that depend on them since this will ensure
  the final link will work correctly.

  See docs/ANDROID-MK.html and docs/CPLUSPLUS-SUPPORT.html for more details

- WARNING: VERY EXPERIMENTAL!!

     You can now build your NDK sources on Windows *without* Cygwin.
     Simply call the script 'ndk-build.cmd' from the Windows cmd.exe
     command-line, when in your project path.

     The script takes exactly the same arguments than the original
     ndk-build one.

     Note that the Windows NDK package comes with its own prebuilt
     binaries for GNU Make, Awk and other tools required by the build,
     i.e. you shouldn't need to install anything else to get a working
     build system.

     IMPORTANT: ndk-gdb doesn't work. You still need Cygwin to debug
                at the moment!

     This feature is still very experimental, but feel free to try it
     and report issues on the public forum (android-ndk@googlegroups.com)
     or the public bug database (http://b.android.com).

     Note that all samples and unit tests successfully compile with it.

IMPORTANT BUG FIXES:

- Imported shared libraries are now installed by default to the target
  installation location (i.e. libs/%lt;abi%gt;) if APP_MODULES is not
  defined in your Application.mk.

  This means that if a top-level module "foo" imports a module "bar", then
  both libfoo.so and libbar.so will be copied to the install location.

  Previously, only libfoo.so was, unless you listed 'bar' in your APP_MODULES
  too.

  If you define APP_MODULES explicitly, the behaviour is unchanged.

- Static library imports are now properly transitive. If top-level module
  'foo' imports static library 'bar' which imports static library 'zoo',
  the libfoo.so will now be linked against both libbar.a and libzoo.a.

- ndk-gdb now works correctly for activities with multiple categories
  in their MAIN intent filters.

OTHER CHANGES:

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

- Add a new C++ support runtime named "gabi++". More details about it
  are available in the updated docs/CPLUSPLUS-SUPPORT.html.

- The STLport C++ runtimes now support RTTI (no exceptions yet though).

- Add a new C++ support runtime named "gnustl_shared" corresponding to the
  shared library version of GNU libstdc++ v3 (GPLv3 license). See more
  info at docs/CPLUSPLUS-SUPPORT.html

- You can now list several file extensions in LOCAL_CPP_EXTENSION. As in:

        LOCAL_CPP_EXTENSION := .cpp .cxx

  To compile both foo.cpp and bar.cxx as C++ sources.

- Refreshed the EGL and OpenGLES Khronos headers to support more extensions.
  Note that this does *not* change the NDK ABIs for the corresponding
  libraries, since each extension must be probed at runtime by the client
  application.

  Which extensions are available depends on your actual device (and GPU
  drivers), not the version of the platform it provides.

  The header changes simply add new constants and types to make it easier
  to use the extensions why they have been probed with eglGetProcAddress() or
  glGetProcAddress(). Here is the list of 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

- docs/NATIVE-ACTIVITY.HTML: Fixed typo, the minimum API level
  should be 9, not 8 for native activities.

- 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).

- download-toolchain-sources.sh: Script was updated to download the toolchain
  sources from android.googlesource.com, the new location for AOSP servers.

-------------------------------------------------------------------------------
android-ndk-r6b

This is a bug-fix release for NDK r6, no new features are provided.

IMPORTANT BUG FIXES:

- Fixed the multi-architecture build, i.e. when using APP_ABI="armeabi x86"

- Fixed 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 x86 standalone toolchain.

- Fixed make-standalone-toolchain.sh --arch=x86 (it failed to copy the
  proper GNU libstdc++ binaries to the right location).

- Fixed standalone toolchain linker warnings about missing definition and
  size for '__dso_handle' symbol (arm only).

- Fixed the inclusion order of $(SYSROOT)/usr/include for x86 builds,
  see http://code.google.com/p/android/issues/detail?id=18540

- Fixed the definitions of ptrdiff_t and size_t in x86-specific system
  when used with the x86 standalone toolchain.

-------------------------------------------------------------------------------
android-ndk-r6

IMPORTANT CHANGES:

- Official support for the x86 ABI.

  This release of the Android NDK now provides support for the 'x86' ABI.
  This allows you to generate machine code that runs on future x86-based
  Android devices.

  Note that by default, code is still generated for ARM-based devices.
  You can however add 'x86' to your APP_PLATFORM definition in your
  Application.mk. 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.

  For all details regarding x86 support, please read the new documentation
  file named docs/CPU-X86.html.

  Don't hesitate to file NDK bugs related to x86 at http://b.android.com

- 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 can be used to translate stack traces
  (as reported by adb logcat in case of crash in native code) into
  something more readable, i.e. containing function / source file /
  line number information corresponding to each stack frame.

  For more information and usage example, see the new documentation
  file docs/NDK-STACK.html

OTHER FIXES &amp; CHANGES:

- The arm-eabi-4.4.0, which had been deprecated since NDK r5, has been
  finally removed from the NDK distribution.

- Support a project.properties file in the application's directory
  instead of default.properties. This is in preparation for future SDK Tools
  changes.

-------------------------------------------------------------------------------
android-ndk-r5c

This release fixes a few bugs in r5b. There are no new features.

IMPORTANT BUG FIXES:

- Fixed a typo that prevented LOCAL_WHOLE_STATIC_LIBRARIES to work correctly
  with the new toolchain. Also properly document this variable in
  docs/ANDROID-MK.html.

- Fixed a bug where code linked against gnustl_static would crash when run
  on Android platform releases older than 2.2.

- &lt;android/input.h&gt;: Two functions in this header file, introduced
  by API level 9 (a.k.a. 2.3) were incorrect and have been fixed. While
  this breaks the source API, the binary interface to the system is
  unchanged.

  The functions missing a third 'history_index' parameter. They correct
  definition is now:

      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 android-9 C library arm binary to correctly expose at link time
  new functions that were added to it in Gingerbread (e.g. pthread_rwlock_init).

- Fixed a bug that made gdbserver crash on misc. Honeycomb devices (e.g.
  the Motorola Xoom).

OTHER FIXES &amp; CHANGES:

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

- download-toolchain-sources.sh: Fixed a silly bug that prevented the
  --git-date option to work properly when downloading the master branch.

- Fix an issue where a module could import itself, resulting in an infinite
  loop in GNU Make.

- 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).

- &lt;pthread.h&gt;: Fixed the definition of PTHREAD_RWLOCK_INITIALIZER for
  android-9 API level and higher.

- Fixed a bug where LOCAL_ARM_NEON was defined to true would make the build
  fail (typo in build/core/build-binary.mk)

- Fixed a bug that prevented the compilation of .s assembly files
  (.S files were ok).

- Speed-up the build of debuggable applications when there is a very
  large number of include directories in a project.

- ndk-gdb: Better detection of 'adb shell' failures (improves error messages).

- ndk-build: Fix a rare bug that appeared when trying to perform parallel
  builds of debuggable projects.


-------------------------------------------------------------------------------
android-ndk-r5b

This release fixes a few bugs in r5. There are no new features.

IMPORTANT BUG FIXES:

- Fix 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. This problem was first reported on the
  android-ndk forum and fixed by the following change in the toolchain
  sources:

        https://review.source.android.com/#change,19474

- docs/CPLUSPLUS-SUPPORT.html: Add missing documentation for the
  "gnustl_static" value for APP_STL, that allows you to link against
  a static library version of GNU libstdc++.

- ndk-build: Fix a bug that created inconsistent dependency files when a
  compilation error occurred on Windows, preventing building properly after
  the error was fixed in the source code.

- ndk-build: Fix a Cygwin-specific bug where using very short paths for
  the Android NDK installation or the project path could lead to the
  generation of invalid dependency files, making incremental builds
  impossible.

- Fix a typo that prevented the cpufeatures library to work correctly
  with the new NDK toolchain.

- Linux toolchain binaries now run on Ubuntu 8.04 or higher.
  More specifically, the r5 binaries did require GLibc 2.11 on the host
  system, and refused to run with previous releases due to an ABI mismatch
  in the GNU C Library. The r5b binaries are generated with a special
  toolchain that instead targets GLibc 2.7 or higher.

- GNU libstdc++ will not crash anymore when printing floating-point values
  through i/o streams.

OTHER FIXES &amp; CHANGES:

- ndk-build: Speed-up the Cygwin build by avoiding calling "cygpath -m"
  from GNU Make for each and every source or object file. This was a problem
  for users with very large source trees.

  In case this doesn't work properly, define NDK_USE_CYGPATH=1 in your
  environment to use 'cygpath -m' as usual.

  Also, if 'cygpath' is not in your path, completely ignore it
  (seems to be enough to run the NDK under MSys).

- ndk-build: Handle installation paths containing spaces when checking
  cygwin installation. Before that, the script complained that the user
  was using an incorrect version of GNU Make (even if he had the right one).

- Fixed a typo that prevented several NDK_MODULE_PATH to work properly when
  it contained multiple directories separated with ":"

- prebuilt-common.sh: Make the script check the compiler directly for 64-bit
  generated machine code, instead of relying on the host tag. That should
  allow the 32-bit toolchain to rebuild properly on Snow Leopard.

- prebuilt-common.sh: Fix the toolchain rebuild scripts to work when
  using a 32-bit host toolchain.

- &lt;netinet/in.h&gt;: Add missing declaration for INET_ADDRSTRLEN
- &lt;netinet/in6.h&gt;: Add missing declaration for IN6_IS_ADDR_MC_NODELOCAL
  and IN6_IS_ADDR_MC_GLOBAL.

- &lt;asm/byteorder.&gt;: Replaced 'asm' with '__asm__' to allow compilation
  with -std=c99. See https://review.source.android.com/#change,20076

- standalone toolchain: The -fpic flag is now the default for the
  arm-linux-androideabi toolchain, instead of -fPIC. This avoids a performance
  degradation when compared to the old android-eabi configuration.

  This only affects users of the standalone toolchain. The NDK build script
  always enforced -fpic implicitly.

-------------------------------------------------------------------------------
android-ndk-r5

IMPORTANT BUG FIXES:

- Allow dlclose() to properly call static C++ destructors when unloading
  a shared library. This requires changes in both the C library and the
  build system. IMPORTANT: This feature is only available for API level 9.

- Fix packaging error for system libraries of level 5 and 8. The libraries
  bundled with the NDK and used at link time were not the correct version,
  and this prevented linking against certain symbols appropriately.

- ndk-gdb: do not start activity unless --start or --launch is used.
  (the documentation was correct, the implementation wrong)

- The system headers for all API levels have been cleaned up and will
  not provide the declarations of functions that are not available in
  the corresponding system libraries.

IMPORTANT CHANGES:

- Support for API level 9, (a.k.a. Android 2.3) which adds the following
  native features to the platform:

     - Native audio API based on the Khronos Group OpenSL ES&#0153; 1.0.1 Standard.
       New headers &lt;SLES/OpenSLES.h&gt; and &lt;SLES/OpenSLES_Android.h&gt;
       are provided to allow applications targeting this API level to perform
       audio input, output and processing directly from native code.

     - Native activity support, i.e. the ability to build applications that
       are coded entirely in C or C++. More precisely, such applications still
       run inside a VM, and will have to access most of the platform's features
       using JNI (i.e. native code calling VM methods). However, this also
       comes with a series of headers and libraries to implement the following
       directly from native code:

          - activity lifecycle management.
          - user input handling (touch, keyboard, trackball, ...).
          - window management (including accessing the pixel buffer).
          - sensor listeners (e.g. accelerometer, compass, ...).
          - hardware configuration management.
          - easily reading assets out of an APK from native code.
          - access to the storage manager, a new feature of Android X.X
            that allows one to provide Opaque Binary Objects containing
            large amounts of data outside of the APK.

       See the documentation in docs/STABLE-APIS.html for more details.

       Note that most of these new features are targeted at game developers.

- Improved gdbserver binary to allow debugging _threaded_ programs properly
  with ndk-gdb (the previous binary could only set breakpoints on the main
  thread).

  IMPORTANT: THIS ONLY WORKS IF YOU RUN ON ANDROID 2.3 OR HIGHER.

  The root cause of the problem is a platform bug that was only fixed in
  2.3. If you try to debug on a previous platform, the gdbserver binary
  will only be able to set breakpoints on the main thread.

  For more information, see the specific section in docs/NDK-GDB.html.

- Easier debuggable builds: just invoke ndk-build while defining the
  NDK_DEBUG variable to 1, as in:

      $NDK/ndk-build NDK_DEBUG=1

  This will have the same result that setting the android:debuggable="true"
  in the &lt;application&gt; element of your AndroidManifest.xml file. See the
  file docs/NDK-BUILD.html for more details.

  Note that you will need to use the SDKr8 build tools to use this feature
  properly!

- Refresh of system C++ headers:

     - Headers have been moved out of the platform directory hierarchy.
       This is to prevent conflicts with other STLs like STLport or the
       GNU libstdc++ which provide their own version of the headers, but
       does not affect your builds.

     - The list of headers has grown to include the following:

            cassert, cctype, cerrno, cfloat, climits, cmath,
            csetjmp, csignal, cstddef, cstdint, cstdio, cstdlib,
            cstring, ctime, cwchar, new, typeinfo, utility

    Note that they still correspond to our minimal C++ runtime, no new feature
    was introduced here.

- Support for C++ exceptions and RTTI. See docs/CPLUSPLUS-SUPPORT.html for
  all details (and limitations).

- STLport implementation: Add sources and prebuilt binaries for a port of
  the STLport C++ Standard Library (www.stlport.org), and an easy way to use
  it at build time by defining APP_STL in your Application.mk. See
  docs/APPLICATION-MK.html and docs/CPLUSPLUS-SUPPORT.html for all details.

- GNU libstdc++ implementation: Available as a static library that you can
  select for your application through APP_STL. See docs/CPLUSPLUS-SUPPORT.html
  for all details.

- Add support for prebuilt libraries with the PREBUILT_SHARED_LIBRARY and
  PREBUILT_STATIC_LIBRARIES build scripts. See the new documentation
  file named docs/PREBUILTS.html for explanations and usage examples.

- Support for module exports: A module can now define a set of compiler or
  linker flags that will be automatically 'imported' by any other module that
  depends on it, through LOCAL_STATIC_LIBRARIES or LOCAL_SHARED_LIBRARIES.

  This is achieved with the help of new Android.mk variables named
  LOCAL_EXPORT_CFLAGS, LOCAL_EXPORT_CPPFLAGS, LOCAL_EXPORT_C_INCLUDES and
  LOCAL_EXPORT_LDLIBS. See docs/ANDROID-MK.html for mode documentation, and
  a 'samples/module-exports' for a sample project that uses this.

- Add support to specify a different file name for generated files, through
  the new LOCAL_MODULE_FILENAME variable. See docs/ANDROID-MK.html for an
  example.

- Add support for module imports, through the NDK_MODULE_PATH environment
  variable and the new 'import-module' function. This allows you to avoid
  hard-coding the path of third-party modules into your project files.

  See docs/IMPORT-MODULE.html for details.

- Add the content of LOCAL_C_INCLUDES to gdb.setup to make native debugging
  easier. Also fixes an issue that prevented clean parallel builds of
  debuggable applications to work correctly. This fixes an error message that
  said:

      /bin/sh: &lt;project&gt;/libs/armeabi/gdb.setup: No such file or directory

  When doing a "ndk-build -j&lt;number&gt;", with &lt;number&gt; bigger than 1.

- Add support for assembly-level source filtering. See the description of
  LOCAL_FILTER_ASM in docs/ANDROID-MK.html for more details. This can be useful
  for certain kinds of obfuscation tasks.

- This NDK comes with a new toolchain (named arm-linux-androideabi-4.4.3)
  which provides many benefits, including:

     - Better code generation than the previous one (gcc-4.4.0)
     - On Windows, the binaries do not depend on Cygwin anymore.
     - The ability to use it as a stand-alone cross-compiler
       (see docs/STANDALONE-TOOLCHAIN.html for all details).

  The binaries for gcc-4.4.0 are still provided for backwards compatibility.
  Use NDK_TOOLCHAIN=arm-eabi-4.4.0 in your environment to force its usage.
  Note that it is now deprecated and will be removed in a future NDK release.

  IMPORTANT: The old toolchain doesn't properly support exceptions, RTTI,
             STLport and GNU libstdc++.

  The binaries for the already-deprecated gcc-4.2.1 have been removed.

- The 'cpufeatures' library has been updated to provide better architecture
  and features detection (including a work-around for buggy ARMv6 kernels
  which report an architecture version of 7).

  The library is now also available as an import module, to simplify its
  usage in your build scripts. See the updated docs/CPU-FEATURES.html file
  for details.

  NOTE: Please update your Android.mk to use module imports as soon as
        possible. The location $NDK/source/cpufeatures/ is deprecated
        and will be removed in a future NDK release. Avoid referencing
        it directly in your build scripts!

OTHER FIXES AND CHANGES:

- Reduced the size of generated binaries by using --strip-unneeded
  instead of --strip-debug. This gets rid of mor symbol table entries
  in release shared libraries and executables, without impacting
  runtime execution.

- Fix bad automatic dependency tracking when using multiple source
  sub-directories.

- The path to system headers is now included last in the compilation command
  line. This prevents conflicts with source code that define their own headers
  with similar names (e.g. a custom "err.h" was ignored, because the system
  &lt;err.h&gt; was used instead).

- Update documentation for 'my-dir' function to explain that, due to the
  way GNU Make works, it really returns the path of the last included
  Makefile (instead of the current one). Also provide examples on how
  to deal with it.

- make-release.sh: Now has an --out-dir=&lt;path&gt; option to specify the
  output directory where the packages are going to be copied. Also
  ensure that generated packages have go+r permissions.

- ndk-build will now properly escape arguments. This means that something
  like this:

     ndk-build  MY_CFLAGS="-DFOO -DBAR"

  will now work correctly.

- Add --git-http option to download-toolchain-sources.sh and
  rebuild-all-prebuilt.sh in order to download sources from
  android.git.kernel.org through HTTP.

- ndk-gdb: properly launch activities for which name does not contain any dot.

- ndk-gdb: add --delay=&lt;timeout&gt; option to specify a delay in seconds
  between activity launch and gdbserver attach. This is needed because certain
  activities can take a long time to properly launch. The default delay is
  also increased to 2 seconds (instead of 1).

- build/tools/build-gcc.sh: copy the sysroot to the build directory. This
  avoids the generated toolchain binaries from hard-coding host build paths.

- Platform files are now under $NDK/platforms instead of $NDK/build/platforms

- Toolchain files are now under $NDK/toolchains instead of
  $NDK/build/toolchains and $NDK/build/prebuilt.

- Release and debug objects are stored under two different directories now
  (i.e. obj/local/&lt;abi&gt;/objs and obj/local/&lt;abi&gt;/objs-debug). This
  prevents rebuilding *everything* when you switch between these two modes,
  which can be a real time-saver for complex projects.

- Fixed a bug that duplicated the LOCAL_LDFLAGS in the final link command
  when LOCAL_ALLOW_UNDEFINED_SYMBOLS was not set to 'true'

-------------------------------------------------------------------------------
android-ndk-r4b

This release fixes a few bugs in r4 scripts. There are no new features.

OTHER FIXES &amp; CHANGES:

- build/tools/rebuild-all-prebuilt.sh: mktemp expects 'XXXXXX' instead of 'XXX'.
  Fix the script (and others in the same directory) to do that properly.

- ndk-gdb: check the target device's API level, and dump an error message if
  it is not at least 8 (Android 2.2 a.k.a. Froyo). Fix script to properly
  remove control characters like '\r' from adb shell's output. Also fix
  script to work properly with OS X's BSD awk.

- ndk-build: Make AndroidManifest.xml optional. Now the build scripts will try
  to look for jni/Android.mk if no manifest is found. If you don't use this,
  you can also define NDK_PROJECT_PATH to point to your tree.

  Also, on Windows, check that a Cygwin-compatible make executable is being
  used, and dump a readable help message to solve the issue if this is not
  the case.

- Place generated binaries under $PROJECT_PATH/obj/ instead of
  $PROJECT_PATH/bin/ndk/. The 'bin' directory is sometimes cleaned
  by the JDT, resulting in the inability to properly load symbol versions
  of the shared libraries when running ndk-gdb.

- Warn when sources with unsupported extensions are used in LOCAL_SRC_FILES.
  Previous behaviour was to silently ignore them.

- Set the optimization mode to 'debug' automatically if the manifest sets
  android:debuggable to 'true'. You can override this by using
  'APP_OPTIM := release' in your Application.mk, or by adding '-O2' to
  your LOCAL_CFLAGS.

  Note that even in release mode, the NDK build scripts will produce
  binaries with symbols under obj/local/&lt;abi&gt;/ that will be used for
  debugging with gdb. However, the debugger will have a harder time to
  print proper local variable values that have been optimized out or
  even set breakpoints properly.

-------------------------------------------------------------------------------
android-ndk-r4

IMPORTANT BUG FIXES:

- The &lt;fenv.h&gt; header was not placed in the correct location and could not
  be found by normal builds.

IMPORTANT CHANGES:

- On Windows, Cygwin 1.7 or higher is now required. The NDK will not
  work properly with Cygwin 1.5 which is now officially obsolete
  anyway.

- Simplified build system: You no longer need to run build/host-setup.sh
  or modify anything under $NDK_ROOT/apps/. Instead, just invoke the
  new 'ndk-build' script from your application's project directory, or
  one of its sub-directories.

  See docs/OVERVIEW.html and docs/NDK-BUILD.html for more details.

  NOTE: For compatibility purpose, you can still define projects
        through $NDK_ROOT/apps/&lt;name&gt; though.

        However, not that sample applications have moved from
        'apps/&lt;name&gt;/project' to 'samples/&lt;name&gt;' and now must
        be built with 'ndk-build'. The source code of pre-existing
        samples didn't change though.

- Easy native debugging support when running debuggable applications
  on Android 2.2 or higher, through the new 'ndk-gdb' helper script.
  See docs/NDK-GDB.html for details.

- Support for hardware FPU. This is through the new 'armeabi-v7a' ABI
  corresponding to ARMv7-a class devices.

  Note that by default, the NDK will still generate machine code for the old
  'armeabi' ABI (ARMv5TE based) which is supported by all official Android
  system images to date.

  You will need to define APP_ABI in your Application.mk file to change this.
  See docs/APPLICATION-MK.html

  More details about ABIs is now available in docs/CPU-ARCH-ABIS.html

- A small static library named 'cpufeatures' is provided with source code
  and can be used at runtime to determine the CPU features supported by the
  target device. It should run on all Android platforms, starting from 1.5.

  For more information, see docs/CPU-FEATURES.html

- Support for the optional ARM Advanced SIMD (a.k.a. NEON) instruction set
  extension through the use the LOCAL_ARM_NEON variable in Android.mk, or
  the '.neon' suffix when listing source files.

  Neon is an *optional* instruction set extension, and not all Android ARMv7
  devices will support it. You will need to use the 'cpufeatures' library to
  determine if such code can be used at runtime, and provide alternate code
  paths if this is not the case. This is similar to MMX/SSE/3DNow on x86
  platforms.

  For more information, see docs/CPU-ARM-NEON.html

- Added a new sample (hello-neon) to demonstrate usage of 'cpufeatures'
  and NEON intrinsics and build support.

- Added &lt;android/bitmap.h&gt;, a new stable API available from android-8
  (a.k.a. Android 2.2) to reliably access the pixel buffer of an
  android.graphics.Bitmap object from native code. See docs/STABLE-API.html
  and the new sample program under 'samples/bitmap-plasma' for details
  and usage example.

- Support the NX (No Execute) security feature, where special sections
  are added to the generated shared libraries to instruct the kernel
  that code shall not be executed from the heap and stack by default.

  See docs/ANDROID-MK.html to see how to disable this, plus reference
  links for more information.

OTHER FIXES AND CHANGES:

- support the .s extension for raw assembly sources (.S is already supported
  but the input files are parsed by the C-preprocessor before being sent to
  the assembler).

- build/host-setup.sh has been removed. There is no need for a 'setup' step
  when using the NDK for the first time. All host-specific autodetection and
  basic tool sanity checking have been moved to the build scripts themselves.

- APP_MODULES in Application.mk is now optional. If not defined, the NDK
  will simply build _all_ the modules that are declared from your Android.mk.

  You can still use APP_MODULES to restrict the set of modules you want to
  build. Note that the NDK now computes the transitive dependencies of these
  modules for you now. See docs/APPLICATION-MK.html for details.

- docs/STABLE-APIS.html: Add missing section for Dynamic Linker Library
  (libdl.so). It is actually supported by all API levels.

- build/tools/download-toolchain-sources.sh: Use 'master' branch by default
  instead of the 'eclair' one.

- build-toolchain.sh: Allow ad-hoc patching of toolchain sources when rebuilding
  them. This is primarily to ease development. All you need to do is put a patch
  under build/tools/toolchain-patches/&lt;foo&gt;/&lt;name&gt;.patch, and it will be applied
  with 'patch -p1' into the &lt;foo&gt; directory of the unpacked toolchain sources
  before the configure step.

- docs/CPU-ARCH-ABIS.html: Mention the experimental 'x86' ABI.

- build/core/mkdeps.sh: Removed obsolete script.

- the NDK build script now only parses the Application.mk and Android.mk of
  the applications listed by APP. The error messages when APP is empty or
  malformed have also been improved.

- removed the annoying 'the mangling of 'va_list' has changed in GCC 4.4'
  warning when building with GCC 4.4.0 for ARM.

- C Library header fixes:

    For all platforms:

        - &lt;arpa/inet.h&gt;: no longer includes &lt;netinet/in6.h&gt;.
        - &lt;ctype.h&gt;: better inlining with -ansi option.
        - &lt;mntent.h&gt;: add missing include for &lt;stdio.h&gt;.
        - &lt;netinet/in.h&gt;: include &lt;netinet/in6.h&gt; and define in6addr_any +
          in6addr_loopback.
        - &lt;netinet/in6.h&gt;: add IPV6_JOIN_GROUP, IPV6_LEAVE_GROUP,
          IN6ADDR_ANY_INIT, ipv6mr_interface.
        - &lt;sys/epoll.h&gt;: add missing C++ inclusion guards.
        - &lt;sys/resource.h&gt;: add missing rlim_t declaration.
        - &lt;sys/system_properties.h&gt;: add missing C++ inclusion guards.
        - &lt;time64.h&gt;: add missing C++ inclusion guards.
        - &lt;netdb.h&gt;: move h_errno declaration inside C++ inclusion guards.

- C Library changes:

    For android-8 (a.k.a. Android 2.2):

        - &lt;dlfcn.h&gt;: add DL_info and dladdr().
        - &lt;err.h&gt;: add err(), warn() and other variants.
        - &lt;regex.h&gt;, &lt;fts.h&gt;, &lt;sys/queue.h&gt;: added
        - &lt;pthread.h&gt;: add pthread_condattr_t
        - &lt;sched.h&gt;: added proper clone() declaration (and implementation).
        - &lt;signal.h&gt;: added killpg().
        - &lt;stdio.h&gt;: add fdprintf() and vfdprintf().
        - &lt;stdlib.h&gt;: fix ptsname_r() signature in declaration. previous
          implementation was broken anyway.
        - &lt;unistd.h&gt;: add getusershell(), setusershell(), endusershell(),
          ttyname(), ttyname_r(), TEMP_FAILURE_RETRY. Fix usleep() signature
          (now returns int).
        - &lt;wchar.h&gt;: add fake mbstowcs() and wcstombs().

  More details available under docs/system/libc/CHANGES.html

-------------------------------------------------------------------------------
android-ndk-r3

IMPORTANT BUG FIXES:

- Fix build/host-setup.sh to execute as a Bourne shell script (again)

- Make target shared libraries portable to systems that don't use the exact
  same toolchain. This is needed due to differences in libgcc.a implementations
  between gcc 4.2.1 and 4.4.0. This change ensures that generated machine
  code doesn't depend on helper functions provided by the Android platform
  runtime.


IMPORTANT CHANGES:

- GCC 4.4.0 is now used by default by the NDK. It generates better code than
  GCC 4.2.1, which was used in previous releases. However, the compiler's C++
  frontend is also a lot more pedantic regarding certain template constructs
  and will even refuse to build some of them.

  For this reason, the NDK also comes with GCC 4.2.1 prebuilt binaries, and
  you can force its usage by defining NDK_TOOLCHAIN in your environment to
  the value 'arm-eabi-4.2.1'. For example:

        export NDK_TOOLCHAIN=arm-eabi-4.2.1
        make APP=hello-jni

  Note that only the 'armeabi' ABI is supported by the 4.2.1 toolchain. We
  recommend switching to 4.2.1 *only* if you encounter compilation problems
  with 4.4.0.

  The 4.2.1 prebuilt binaries will probably be removed from a future release
  of the Android NDK, we thus *strongly* invite you to fix your code if such
  problems happen.

- Support for OpenGL ES 2.0. This is through the new 'android-5' platform to
  reflect Android 2.0 (previously the Eclair branch). This is merely a copy
  of android-4 that also includes headers and libraries for OpenGL ES 2.0.

  See the sample named "hello-gl2" for a *very* basic demonstration. Note that
  OpenGL ES 2.0 is currently *not* available from Java, and must be used
  through native code exclusively.

  IMPORTANT: OpenGL ES 2.0 is not supported in the Android emulator at this
             time. Running/testing any native code that depends on it thus
             requires a real device.

- The NDK build script will now remove installed binaries from the application
  project's path before starting the build. This ensures that:

  - if the build fails for some reason, a stale/obsolete file is not left in
    your application project tree by mistake.

  - if you change the target ABI, a stale/obsolete file is not left into the
    folder corresponding to the old ABI.


- Updated the STABLE-APIS.html document to clarify the OpenGL ES 1.0/1.1/2.0
  issues regarding specific devices (i.e. 1.0 supported everywhere, 1.1 and
  2.0 on specific devices only, need for &lt;uses-feature&gt; tag in manifest).


OTHER FIXES AND CHANGES:

- Actually use the awk version detected by host-setup.sh during the build.

- Only allow undefined symbols when LOCAL_ALLOW_UNDEFINED_SYMBOLS is set
  to 'true', just like the documentation says it works. Also fix a typo
  in CLEAR_VARS that prevented this variable from being cleared properly.

- Simplified build/tools/make-release.sh, the --prebuilt-dir option is
  gone, and --help will dump a clearer description of expected options
  and input files.

- Added --prebuilt-ndk=FILE option to build/tools/make-release.sh script to
  package a new experimental NDK package archive from the current source tree
  plus the toolchain binaries of an existing NDK release package. E.g.:

    build/tools/make-release.sh \
       --prebuilt-ndk=/path/to/android-ndk-1.6_r1-linux-x86.zip

  will generate a new NDK package in /tmp/ndk-release that contains the most
  up-to-date build scripts, plus the toolchain binaries from 1.6_r1 (which
  are not in the git repository).

  Also added the --no-git option to collect all sources from the current
  NDK root directory, instead of the list given by 'git ls-files'. This can
  be useful if you don't want to checkout the whole 'platform/development'
  project from repo and still work on the NDK.

  This change is to help people easily package experimental NDK releases to
  test and distribute fixes and improvements.

- Remove bash-isms from build/tools/build-toolchain.sh. Now it's possible to
  build it with the 'dash' shell on Debian-based systems (tested on Ubuntu 8.04)

- Remove bash-ism from build/tools/build-ndk-sysroot.sh

- Refresh C library headers for all platforms:

    - make &lt;endian.h&gt; simply include &lt;sys/endian.h&gt;
    - make &lt;stdint.h&gt; properly declare 64-bit integer types with a C99 compiler
    - add missing &lt;sys/types.h&gt; to &lt;strings.h&gt;
    - add GLibc-compatible macro aliases (st_atimensec, st_mtimensec and
      st_ctimensec) to &lt;stat.h&gt;
    - add missing declaration for tzset() in &lt;time.h&gt;

- Added build/tools/download-toolchain-sources.sh, a script that allows you
  to download the toolchain sources from the official open-source repository
  at android.git.kernel.org and nicely package them into a tarball that can
  later be used by build/tools/build-toolchain.sh to rebuild the prebuilt
  binaries for your system.

- Updated build/tools/build-toolchain.sh to support the tarballs generated
  by download-toolchain-sources.sh with the --package=&lt;file&gt; option. This
  also builds both gcc 4.2.1 and 4.4.0, adding support for armeabi-v7a to
  gcc 4.4.0.

-------------------------------------------------------------------------------
android-ndk-1.6_r1

IMPORTANT BUG FIXES:

- Fix build/host-setup.sh to:
  * execute as a Bourne shell script
  * remove unused host gcc dependency
  * improve Windows host auto-detection
  * add GNU Make version check
  * add Nawk/Gawk check
  * ensure that the script is run from $NDKROOT as build/host-setup.sh
  * add --help, --verbose, --no-awk-check and --no-make-check options

- Properly add sysroot library search path at build time. This makes a line
  in Android.mk like:

     LOCAL_LDLIBS := -lz

  Actually work correctly, instead of having the linker complaining that it
  could not find the corresponding libz.so library. Also clear LOCAL_LDLIBS
  in $(CLEAR_VARS) script.


IMPORTANT CHANGES:

- The 'sources' directory is gone. The NDK build system now looks for
  $(APP_PROJECT_PATH)/jni/Android.mk by default. You can override this with
  the new APP_BUILD_SCRIPT variable in Application.mk

  For example, the 'hello-jni' sample uses the following files:

    apps/hello-jni/project/jni/Android.mk
    apps/hello-jni/project/jni/hello-jni.c

  The 'apps/&lt;name&gt;' directory is still needed in this release though.

- Change LOCAL_CFLAGS / LOCAL_CPPFLAGS to work as in the full Android build
  system. This means that:

    - LOCAL_CFLAGS   is now used for *both* C and C++ sources  (was only for C)
    - LOCAL_CPPFLAGS is now used for C++ sources only (was for both C and C++)
    - LOCAL_CXXFLAGS is used like LOCAL_CPPFLAGS but is considered obsolete.
      (will disappear in next release)

  Also fixed APP_CPPFLAGS / APP_CFLAGS / APP_CXXFLAGS correspondingly.

- Rename build/platforms/android-1.5 to build/platforms/android-3 to match
  the Android API level instead of the marketing speak.

  Also add a new build/platforms/android-4, and make the build system select
  which platform to use based on the content of the project file named
  $(APP_PROJECT_PATH)/default.properties.

- Add OpenGL ES 1.x headers and libraries to the android-4 stable APIs.
  (NOTE: they are *not* available for android-3)

  Also provide a small port of the "San Angeles Observation" demo to show
  how to make a simple Android application that uses them.


OTHER FIXES AND CHANGES

- Ensure that the __ANDROID__ macro is always defined when building code
  with the NDK. Normally, the macro must be defined by the toolchain
  automatically to indicate that you're targeting the Android runtime.

  This works for the new arm-linux-androideabi toolchain, but there is
  a bug in the way we built the arm-eabi one, so add the flag manually
  through the NDK build script for it.

  Note that the ANDROID macro, is now deprecated. While it is still defined
  by the NDK, you should modify your code to test against __ANDROID__ instead!

- Generate thumb binaries by default.

- Add support for LOCAL_ARM_MODE in Android.mk.

- Add support for the '.arm' suffix in source file names to force the
  compilation of a single source in ARM (32-bit) mode.

- Generate proper unoptimized versions of binaries when APP_OPTIM := debug

- Add support for LOCAL_C_INCLUDES in Android.mk

- Fix compilation of assembler files (e.g. foo.S)

-------------------------------------------------------------------------------
android-ndk-1.5_r1 released.
</pre></body></html>
