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 has been removed. Attempting to build any of these ABIs will result in an error.

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.