Changelog

Report issues to GitHub.

For Android Studio issues, follow the docs on the Android Studio site.

Announcements

  • The deprecated headers have been removed. Unified Headers are now simply The Headers.

    For migration tips, see Unified Headers Migration Notes.

  • GCC is no longer supported. It will not be removed from the NDK just yet, but is no longer receiving backports. It cannot be removed until after libc++ has become stable enough to be the default, as some parts of gnustl are still incompatible with Clang. It will be removed when the other STLs are removed in r18.

  • libc++ is out of beta and is now the preferred STL in the NDK. Starting in r17, libc++ is the default STL for CMake and standalone toolchains. If you manually selected a different STL, we strongly encourage you to move to libc++. For more details, see this blog post.

  • Support for ARMv5 (armeabi), MIPS, and MIPS64 are deprecated. They will no longer build by default with ndk-build, but are still buildable if they are explicitly named, and will be included by “all”, “all32”, and “all64”. Support for each of these has been removed in r17.

    Both CMake and ndk-build will issue a warning if you target any of these ABIs.

r16b

  • Issue 573: Revert the switch to -Oz by default.

NDK

  • ndk-build and CMake now link libatomic by default. Manually adding -latomic to your ldflags should no longer be necessary.
  • Clang static analyzer support for ndk-build has been fixed to work with Clang as a compiler. See https://github.com/android-ndk/ndk/issues/362.
  • Clang now defaults to -Oz instead of -Os. This should reduce generated code size increases compared to GCC.
  • GCC no longer uses -Bsymbolic by default. This allows symbol preemption as specified by the C++ standard and as required by ASAN. For libraries with large numbers of public symbols, this may increase the size of your binaries.
  • Updated binutils to version 2.27. This includes the fix for miscompiles for aarch64: https://sourceware.org/bugzilla/show_bug.cgi?id=21491.
  • Improved compatibility between our CMake toolchain file and newer CMake versions. The NDK‘s CMake toolchain file now completely supercedes CMake’s built-in NDK support.
  • ndk-stack now works for arm64 on Darwin.

libc++

APIs

Known Issues

  • This is not intended to be a comprehensive list of all outstanding bugs.
  • Issue 360: thread_local variables with non-trivial destructors will cause segfaults if the containing library is dlcloseed on devices running M or newer, or devices before M when using a static STL. The simple workaround is to not call dlclose.
  • Issue 374: gabi++ (and therefore stlport) binaries can segfault when built for armeabi.
  • Issue 399: MIPS64 must use the integrated assembler. Clang defaults to using binutils rather than the integrated assembler for this target. ndk-build and cmake handle this for you, but make sure to use -fintegrated-as for MIPS64 for custom build systems.
  • Issue 573: Clang miscompile when using -Oz and -fexceptions.