Histori Revisi NDK

Halaman ini memberikan informasi tentang perubahan dalam semua NDK versi stabil yang telah dirilis. Untuk mendownload NDK versi stabil terbaru atau versi beta yang tersedia saat ini, lihat halaman download NDK.

Lihat Grup Google android-ndk-announce untuk mengetahui informasi selengkapnya, dan berlanggananlah untuk mendapatkan pengumuman rilis.

Android NDK r27 LTS (Juli 2024)

Log perubahan
Download
  • Download untuk rilis ini tersedia di sini.
Log perubahan
Download
  • Download untuk rilis ini tersedia di sini.
Pengumuman
  • KitKat (API 19 dan 20) tidak lagi didukung.
Log perubahan
Download
  • Download untuk rilis ini tersedia di sini.
Pengumuman
  • Menyertakan API Android 13.
  • Mengupdate LLVM ke clang-r450784d, berdasarkan pengembangan LLVM 14.
Log perubahan
Download
  • Download untuk rilis ini tersedia di sini.
Pengumuman
  • GNU Assembler (GAS), telah dihapus. Jika Anda mem-build dengan -fno-integrated-as, Anda harus menghapus flag tersebut. Lihat Catatan Migrasi Clang untuk mengetahui saran tentang cara membuat assembly yang kompatibel dengan LLVM.
  • GDB telah dihapus. Sebagai gantinya, gunakan LLDB. Perlu diketahui bahwa ndk-gdb menggunakan LLDB secara default, dan Android Studio hanya mendukung LLDB.
  • Jelly Bean (API level 16, 17, dan 18) tidak lagi didukung. OS minimum yang didukung oleh NDK adalah KitKat (API level 19).
  • Perangkat non-Neon tidak lagi didukung. Sejumlah kecil perangkat yang sangat lama tidak mendukung Neon sehingga sebagian besar aplikasi tidak akan mendeteksinya selain dari segi peningkatan performa.
  • Dukungan build RenderScript telah dihapus. RenderScript tidak digunakan lagi di Android 12. Jika Anda belum selesai memigrasikan aplikasi dari RenderScript, NDK r23 LTS dapat digunakan.
Log perubahan
Download
  • Download untuk rilis ini tersedia di sini.
Pengumuman
  • GNU binutils, kecuali GNU Assembler (GAS), telah dihapus. GAS akan dihapus pada rilis berikutnya. Jika Anda mem-build dengan -fno-integrated-as, laporkan bug jika ada yang membuat Anda tidak dapat menghapus flag tersebut.
  • Dukungan untuk GDB telah berakhir. GDB akan dihapus dari rilis berikutnya. Sebagai gantinya, gunakan LLDB. Perlu diketahui bahwa ndk-gdb menggunakan LLDB secara default.
  • NDK r23 adalah rilis terakhir yang akan mendukung non-Neon. Dimulai dengan NDK r24, library armeabi-v7a di sysroot akan dibuat dengan Neon. Sejumlah kecil perangkat lama tidak mendukung Neon sehingga sebagian besar aplikasi tidak akan mendeteksinya selain peningkatan performa.
  • Jelly Bean (API level 16, 17, dan 18) tidak akan didukung di rilis NDK berikutnya. OS minimum yang didukung oleh NDK untuk r24 adalah KitKat (API level 19).
Log perubahan
Download
  • Download untuk rilis ini tersedia di sini.
Pengumuman
  • GNU binutils tidak lagi digunakan dan akan dihapus dalam rilis NDK mendatang. Perlu diketahui bahwa GNU assembler (as) adalah bagian dari ini. Jika Anda mem-build dengan -fno-integrated-as, laporkan bug jika ada yang membuat Anda tidak dapat menghapus flag tersebut. Jika Anda menggunakan as secara langsung, gunakan clang sebagai gantinya.
  • LLD kini merupakan linker default. File toolchain CMake dan ndk-build kami juga telah beralih menggunakan llvm-ar dan llvm-strip.
  • ndk-gdb kini menggunakan lldb sebagai debugger. gdb tidak digunakan lagi dan akan dihapus dalam rilis mendatang. Untuk kembali ke gdb, gunakan opsi --no-lldb. Namun, laporkan bug yang menjelaskan alasan Anda tidak dapat menggunakan lldb.
  • Dukungan std::filesystem kini disertakan. Ada dua masalah umum:
    • Masalah 1258: std::filesystem::perm_options::nofollow mungkin tidak berlaku di perangkat lama.
    • Masalah 1260: std::filesystem::canonical akan berhasil secara keliru jika melewati jalur yang tidak ada di perangkat lama.
Log perubahan
Download
  • Download untuk rilis ini tersedia di sini.
Pengumuman
  • Windows 32-bit tidak lagi didukung. Hal ini tidak memengaruhi sebagian besar pengguna. Jika Anda masih perlu mem-build aplikasi NDK dari Windows versi 32-bit, lanjutkan menggunakan NDK r20.

    Untuk informasi selengkapnya tentang perubahan dalam Android Developer Tools ini, lihat postingan blog tentang topik tersebut.

  • LLD kini tersedia untuk pengujian. AOSP telah beralih menggunakan LLD secara default dan NDK akan mengikuti (jadwal belum diketahui). Uji LLD di aplikasi dengan meneruskan -fuse-ld=lld saat menautkan. Perlu diketahui bahwa Masalah 843 akan memengaruhi build yang menggunakan LLD dengan strip dan objcopy binutils, bukan yang menggunakan llvm-strip dan llvm-objcopy.
  • Jalur penginstalan toolchain lama akan dihapus pada rilis yang akan datang. Jalur ini sudah tidak digunakan lagi sejak NDK r19 dan memakan cukup banyak ruang dalam NDK. Jalur yang dihapus adalah:
    • platform
    • sources/cxx-stl
    • sysroot
    • toolchain (dengan pengecualian toolchains/llvm)
    Secara umum, perubahan ini hanya akan memengaruhi pengelola sistem build, atau pengguna sistem build yang bukan versi terbaru. Pengguna toolchain ndk-build dan CMake tidak akan terpengaruh, begitu pula pengguna make_standalone_toolchain.py (meskipun skrip tersebut tidak diperlukan lagi sejak R19). Untuk informasi tentang bermigrasi dari tata letak toolchain lama, lihat Panduan Pengelola Sistem Build untuk versi NDK yang Anda gunakan.
  • Mulai Agustus 2019, Play Store akan mewajibkan dukungan untuk arsitektur 64-bit pada APK yang diupload. Mulai porting sekarang untuk menghindari hal yang tidak diinginkan. Untuk informasi selengkapnya, lihat postingan blog ini.
  • App bundle macOS yang ditandatangani dan disahkan kini dapat didownload dari wiki dan situs kami. Perlu diketahui bahwa karena hanya app bundle yang dapat menggunakan RPATH dan meneruskan pengesahan, paket NDK tradisional untuk macOS tidak dapat disahkan. SDK akan terus menggunakan paket tradisional karena app bundle memerlukan perubahan tata letak yang akan membuatnya tidak kompatibel dengan Android Studio. NDK tidak dikarantina saat didownload melalui SDK Manager, sehingga saat ini diizinkan oleh Gatekeeper. SDK Manager saat ini adalah cara paling andal guna mendapatkan NDK untuk macOS.
Log perubahan
Download
  • Download untuk rilis ini tersedia di sini.
Pengumuman
  • LLD kini tersedia untuk pengujian. AOSP sedang dalam proses beralih ke penggunaan LLD secara default dan NDK akan mengikuti (jadwal belum diketahui). Uji LLD di aplikasi dengan meneruskan -fuse-ld=lld saat menautkan.
  • Mulai Agustus 2019, Play Store akan mewajibkan dukungan untuk arsitektur 64-bit pada APK yang diupload. Mulai porting sekarang untuk menghindari hal yang tidak diinginkan. Untuk informasi selengkapnya, lihat postingan blog ini.
  • Menambahkan API Android Q.
Log perubahan
Download
  • Download untuk rilis ini tersedia di sini.
Pengumuman
  • Developer sebaiknya mulai menguji aplikasi dengan LLD. AOSP telah beralih ke penggunaan LLD secara default dan NDK akan menggunakannya secara default pada rilis berikutnya. BFD dan Gold akan dihapus setelah LLD menyelesaikan siklus rilis tanpa masalah besar yang tidak terselesaikan (diperkirakan r21). Uji LLD pada aplikasi Anda dengan meneruskan -fuse-ld=lld saat menautkan. Catatan: lld saat ini tidak mendukung simbol terkompresi pada Windows. Masalah 888. Clang juga tidak dapat menghasilkan simbol terkompresi pada Windows, tetapi ini dapat menjadi masalah saat menggunakan artefak yang dibuat dari Darwin atau Linux.
  • Mulai Agustus 2019, Play Store akan mewajibkan dukungan untuk arsitektur 64-bit pada APK yang diupload. Mulai porting sekarang untuk menghindari hal yang tidak diinginkan. Untuk informasi selengkapnya, lihat postingan blog ini.
  • Masalah 780: Toolchain mandiri kini tidak diperlukan. Clang, binutils, sysroot, dan toolchain lainnya kini semuanya diinstal ke $NDK/toolchains/llvm/prebuilt/<host-tag> dan Clang akan otomatis menemukannya. Daripada membuat toolchain mandiri untuk API 26 ARM, panggil compiler langsung dari NDK:
    $ $NDK/toolchains/llvm/prebuilt//bin/armv7a-linux-androideabi26-clang++ src.cpp
               
    Untuk r19, toolchain juga diinstal ke jalur lama agar sistem build memiliki kesempatan untuk beradaptasi dengan tata letak baru. Jalur lama akan dihapus di r20. Skrip make_standalone_toolchain.py tidak akan dihapus. Skrip ini sekarang tidak diperlukan dan akan mengeluarkan peringatan yang berisi informasi di atas, tetapi skrip tersebut akan tetap ada untuk mempertahankan alur kerja yang sudah ada. Jika menggunakan ndk-build, CMake, atau toolchain mandiri, Anda tidak perlu mengubah alur kerja. Perubahan ini diperlukan bagi pengelola sistem build pihak ketiga, yang tentunya sekarang dapat menghapus beberapa kode khusus Android. Untuk mengetahui informasi selengkapnya, lihat panduan Pengelola Sistem Build.
  • ndk-depends telah dihapus. Kami yakin bahwa ReLinker adalah solusi yang lebih baik untuk masalah pemuatan library native pada versi Android lama.
  • Masalah 862: Skrip wrapper GCC yang mengalihkan ke Clang telah dihapus, karena tidak berfungsi dengan cukup baik untuk bisa ditambahkan sebagai pengganti.
Log perubahan
Download
  • Download untuk rilis ini tersedia di sini.
Pengumuman
  • GCC telah dihapus.
  • LLD kini tersedia untuk pengujian. AOSP sedang dalam proses beralih ke penggunaan LLD secara default dan NDK akan mengikuti (jadwal belum diketahui). Uji LLD di aplikasi dengan meneruskan -fuse-ld=lld saat menautkan.
  • gnustl, gabi++, dan stlport telah dihapus.
  • Dukungan untuk ICS (android-14 dan android-15) telah dihapus. Aplikasi yang menggunakan file executable tidak perlu lagi menyediakan file executable PIE dan non-PIE.
  • Mulai Agustus 2019, Play Store akan mewajibkan dukungan untuk arsitektur 64-bit pada APK yang diupload. Mulai porting sekarang untuk menghindari hal yang tidak diinginkan. Untuk informasi selengkapnya, lihat postingan blog ini.
Log perubahan
Download
  • Download untuk rilis ini tersedia di sini.
Pengumuman
  • GCC tidak didukung lagi. GCC akan dihapus di NDK r18.
  • libc++ kini merupakan STL default untuk CMake dan toolchain mandiri. Jika Anda memilih STL yang berbeda secara manual, kami sangat menganjurkan Anda untuk berpindah ke libc++. Ingat bahwa ndk-build masih ditetapkan secara default ke tanpa STL. Untuk detail selengkapnya, lihat postingan blog ini.
  • gnustl dan stlport sudah tidak digunakan lagi dan akan dihapus di NDK r18.
  • Dukungan untuk ARMv5 (armeabi), MIPS, dan MIPS64 telah dihapus. Mencoba membuat ABI ini akan menghasilkan error.
  • Dukungan untuk ICS (android-14 dan android-15) akan dihapus dari r18.
  • Mulai Agustus 2019, Play Store akan mewajibkan dukungan untuk arsitektur 64-bit pada APK yang diupload. Mulai porting sekarang untuk menghindari hal yang tidak diinginkan. Untuk informasi selengkapnya, lihat postingan blog ini.
Log perubahan
Download
  • Download untuk rilis ini tersedia di sini.
Pengumuman
  • Header yang tidak digunakan lagi telah dihapus. Header Terpadu kini disebut "Header" saja. Untuk mendapatkan tips migrasi, lihat Catatan Migrasi Header Terpadu.
  • GCC tidak didukung lagi. GCC belum akan dihapus dari NDK, tetapi sudah tidak menerima backport. GCC tidak dapat dihapus sampai libc++ sudah cukup stabil untuk dijadikan default, karena beberapa bagian gnustl masih tidak kompatibel dengan Clang. GCC akan dihapus saat STL lainnya dihapus pada r18.
  • libc++ tidak lagi dalam versi beta dan kini merupakan STL pilihan dalam NDK. Mulai r17, libc++ adalah STL default untuk CMake dan toolchain mandiri. Jika memilih STL yang berbeda secara manual, sebaiknya Anda berpindah ke libc++. Untuk detail selengkapnya, lihat postingan blog ini.
  • Dukungan untuk ARM5 (armeabi), MIPS, dan MIPS64 sudah tidak digunakan lagi. Ketiganya tidak akan lagi dibuat secara default dengan ndk-build, tetapi masih dapat dibuat jika diberi nama secara jelas, dan akan disertakan oleh "all", "all32", dan "all64". Dukungan untuk ketiganya telah dihapus pada r17. CMake dan ndk-build akan mengeluarkan peringatan jika Anda menargetkan salah satu ABI ini.
API

API native untuk Android 8.1 telah ditambahkan. Untuk mempelajari API ini lebih lanjut, lihat Ringkasan API native.

Untuk informasi tambahan tentang yang baru dan yang diubah dalam rilis ini, lihat log perubahan ini.

Log perubahan
Download
  • Download untuk rilis ini tersedia di sini.
Pengumuman
  • Header terpadu diaktifkan secara default. Untuk mempelajari cara menggunakan header ini, lihat Header Terpadu.
  • Catatan: Header yang tidak digunakan lagi akan dihapus dalam rilis mendatang. Jika Anda mengalami masalah dengan header ini, laporkan bug.

    Untuk mendapatkan tips migrasi, lihat catatan migrasi header terpadu.

  • GCC tidak didukung lagi. GCC belum dihapus dari NDK, tetapi sudah tidak menerima backport. GCC tidak dapat dihapus sampai libc++ cukup stabil untuk dijadikan sebagai default, karena beberapa bagian gnustl masih tidak kompatibel dengan Clang.
  • Android 2.3 (android-9) tidak didukung lagi. Target API level minimum dalam NDK kini adalah Android 4.0 (android-14). Jika APP_PLATFORM ditetapkan lebih rendah dari android-14, android-14 akan digunakan sebagai gantinya.
  • CMake di NDK kini mendukung pembuatan kode assembly yang ditulis dalam YASM untuk dijalankan pada arsitektur x86 dan x86-64. Untuk mempelajarinya lebih lanjut, lihat Membuat kode assembly.
API

API native untuk Android 8.0 telah ditambahkan. Untuk mempelajari API ini lebih lanjut, lihat Ringkasan API native.

Untuk informasi tambahan tentang yang baru dan yang diubah dalam rilis ini, lihat log perubahan ini.

Log perubahan
Download
  • Download untuk rilis ini tersedia di sini.
Pengumuman
  • Header terpadu: Rilis ini memperkenalkan header platform yang disinkronkan dan selalu diupdate serta akurat dengan platform Android. Perbaikan bug khusus header sekarang memengaruhi semua level API. Pengenalan header terpadu ini memperbaiki inkonsistensi dalam rilis NDK sebelumnya, seperti:
    • Header di Android M dan N sebenarnya adalah header untuk Android L.
    • Deklarasi fungsi di header memiliki kecocokan yang tepat dengan level platformnya; header menyatakan fungsi nihil atau gagal menyatakan fungsi yang tersedia.
    • Beberapa level API lama tidak memiliki konstanta, atau memiliki konstanta tetapi salah, yang terdapat di level API lebih baru.

    Header terpadu baru ini tidak diaktifkan secara default. Untuk mempelajari cara mengaktifkan dan menggunakan header ini, lihat Header Terpadu.

  • Penghentian GCC: Rilis ini mengakhiri dukungan aktif untuk GCC. GCC belum dihapus dari NDK, tetapi sudah tidak menerima backport. Karena beberapa bagian gnustl masih tidak kompatibel dengan Clang, GCC tidak akan sepenuhnya dihapus hingga libc++ sudah cukup stabil untuk dijadikan default.

Untuk informasi tambahan tentang yang baru dan yang diubah dalam rilis ini, lihat log perubahan ini.

Download
  • Download untuk rilis ini diarsipkan di sini.
Pengumuman
  • GCC tidak didukung lagi. GCC belum dihapus dari NDK, tetapi sudah tidak menerima backport. GCC tidak dapat dihapus sampai libc++ sudah cukup stabil untuk dijadikan default, karena beberapa bagian gnustl masih tidak kompatibel dengan Clang. GCC mungkin akan dihapus setelah kondisi tersebut terpenuhi.
  • simpleperf, profiler CPU untuk Android, ditambahkan.
r13b
NDK
  • NDK_TOOLCHAIN_VERSION sekarang ditetapkan secara default ke Clang.
  • libc++ telah diupdate ke r263688.
  • Kami telah mereset ke upstream yang (hampir) bersih. Ini akan menghapus sejumlah bug, tetapi kami masih harus membersihkan libandroid_support sebelum merekomendasikannya sebagai default.
  • make-standalone-toolchain.sh kini hanya menjadi wrapper di sekitar alat versi Python. Ada beberapa perbedaan perilaku. Lihat pesan commit untuk informasi selengkapnya.
  • Beberapa library untuk ABI yang tidak didukung telah dihapus (mips64r2, mips32r6, mips32r2, dan x32). Mungkin masih ada beberapa hal yang mengganggu.
  • Masalah pada crtbegin_static.o yang mengakibatkan hilangnya atexit pada waktu penautan saat membuat file executable statis untuk ARM android-21+, telah terpecahkan: Masalah 132
  • File toolchain CMake telah ditambahkan di build/cmake/android.toolchain.cmake.
Masalah Umum
  • Log perubahan ini tidak dimaksudkan sebagai daftar lengkap semua bug yang belum diatasi.
  • Toolchain mandiri yang menggunakan libc++ dan GCC tidak berfungsi. Tampaknya ini merupakan bug di GCC. Lihat pesan commit untuk informasi selengkapnya.
  • Header dan library bionic untuk Android Marshmallow dan N belum terekspos meskipun sudah ada android-24. Platform tersebut masih memiliki header dan library Android Lollipop (bukan regresi dari r11).
  • Alat RenderScript tidak ada (bukan regresi dari r11): Masalah 7.
Download
  • Download untuk rilis ini diarsipkan di sini.
Pengumuman
  • Perintah ndk-build secara default akan menggunakan Clang pada r13. Kami akan menghapus GCC dalam rilis berikutnya.
  • Skrip make-standalone-toolchain.sh akan dihapus pada r13. Pastikan make_standalone_toolchain.py sesuai dengan kebutuhan Anda.
  • Laporkan masalah ke GitHub.
r12b
  • ndk-gdb.py telah diperbaiki. (Masalah 118)
  • NdkCameraMetadataTags.h telah diupdate, sehingga tidak lagi berisi nilai enum yang tidak valid.
  • Bug dalam ndk-build yang mengakibatkan peringatan palsu untuk library statis yang menggunakan libc++ telah diperbaiki. Untuk informasi selengkapnya tentang perubahan ini, lihat komentar di sini.
  • Header OpenSLES telah diupdate untuk android-24.
NDK
  • Dukungan untuk ABI armeabi-v7a-hard telah dihapus. Untuk informasi selengkapnya, lihat penjelasan ini.
  • Semua sysroot telah dihapus pada level platform sebelum Gingerbread. Kami menghentikan dukungan untuk sysroot tersebut pada r11, tetapi tidak benar-benar menghapusnya.
  • Penanganan pengecualian saat menggunakan c++_shared pada ARM32 sekarang sebagian besar dapat berfungsi. Sekarang unwinder akan dihubungkan ke setiap objek tertaut, bukan ke libc++. Untuk informasi selengkapnya tentang penanganan pengecualian ini, lihat Masalah Umum.
  • Flag compiler default telah dihilangkan. (Masalah 27).
  • Implementasi Python untuk toolchain mandiri telah ditambahkan: build/tools/make_standalone_toolchain.py.
    • Pengguna Windows tidak lagi memerlukan Cygwin untuk menggunakan fitur ini.
    • Kami akan menghapus bash flavor pada r13, jadi ujilah bash baru sekarang.
  • -fno-limit-debug-info telah diaktifkan secara default untuk build debug Clang. Perubahan ini akan meningkatkan kemampuan debug dengan LLDB.
  • --build-id sekarang diaktifkan secara default.
    • Kini ID build akan ditampilkan dalam laporan masalah pada native code, sehingga Anda dapat dengan mudah mengidentifikasi versi kode yang sedang berjalan.
  • NDK_USE_CYGPATH tidak akan lagi mengakibatkan masalah dengan libgcc. (Android Masalah 195486)
  • Opsi -Wl, --warn-shared-textrel, dan -Wl,--fatal-warnings sekarang diaktifkan secara default. Jika Anda telah membagikan relokasi teks, aplikasi Anda tidak dapat dimuat pada Android 6.0 (API level 23) atau yang lebih tinggi. Relokasi teks sama sekali tidak diizinkan untuk aplikasi 64-bit.
  • Header prakompilasi akan berfungsi dengan lebih baik. (Masalah 14 dan Masalah 16)
  • Library STL ARM (non-thumb) yang tidak dapat dijangkau telah dihapus.
  • Dukungan Vulkan telah ditambahkan ke android-24.
  • Choreographer API telah ditambahkan ke android-24.
  • libcamera2 API telah ditambahkan untuk perangkat dengan INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED atau yang lebih tinggi. Untuk informasi selengkapnya, lihat Karakteristik Kamera.
Clang
  • Clang telah diupdate ke 3.8svn (r256229, build 2812033).
    • Executable clang.exe dan clang++.exe pada paket Windows 32-bit sebenarnya adalah 64-bit. File yang dapat dieksekusi 32-bit diberi nama clang_32.exe.
  • __thread kini dapat berjalan dengan baik.
GCC
  • Telah disinkronkan dengan GCC ChromeOS pada google/gcc-4_9 r227810.
  • Patch sanitizer cakupan di-backport dari ToT (r231296).
  • Libatomic telah diperbaiki agar tidak menggunakan ifuncs. (Masalah 31)
Binutils
  • Pesan info “Erratum 843419 found and fixed” dinonaktifkan.
  • Opsi --long-plt diperkenalkan untuk memperbaiki error linker internal yang terjadi saat menautkan biner arm32 berukuran besar.
  • Stub waktu proses untuk AArch64 yang salah telah diperbaiki. Ini menyebabkan kesalahan penghitungan jump address untuk DSO yang sangat besar.
  • Opsi default --no-apply-dynamic diperkenalkan untuk mengatasi bug linker dinamis pada rilis Android sebelumnya.
  • NDK r11 KI untuk dynamic_cast tidak berfungsi dengan Clang. x86, stlport_static, dan pengoptimalan telah diperbaiki.
GDB
  • Diupdate ke GDB 7.11. Untuk informasi selengkapnya, lihat halaman Berita GDB.
  • Beberapa perbaikan bug untuk ndk-gdb.py.
Masalah Umum
  • x86 ASAN masih tidak berfungsi. Untuk informasi selengkapnya, lihat diskusi tentang daftar perubahan ini.
  • Pengecualian yang dilepaskan dengan c++_shared masih tidak berfungsi untuk ARM pada Android 2.3 (API level 9) atau Android 4.0 (API level 14).
  • Header dan library bionic untuk Android 6.0 (API level 23) dan Android 7.0 (API level 24) belum terekspos meskipun sudah ada android-24. Platform tersebut masih memiliki header dan library Android 5.0 (API level 21) (bukan regresi dari r11).
  • Fitur RenderScript tidak ada (bukan regresi dari r11). (Masalah 7)
  • Log perubahan ini tidak dimaksudkan sebagai daftar lengkap semua bug yang belum diatasi.
Download
  • Download untuk rilis ini diarsipkan di sini.
Pengumuman
  • Perintah ndk-build secara default akan menggunakan Clang pada rilis mendatang. GCC akan dihapus dalam rilis selanjutnya.
  • Skrip make-standalone-toolchain.sh akan dihapus dalam rilis mendatang. Jika Anda menggunakan skrip ini, harap pertimbangkan untuk bermigrasi ke make_standalone_toolchain.py sesegera mungkin.
NDK
  • Dukungan untuk ABI armeabi-v7a-hard dihapus. Lihat penjelasannya dalam dokumentasi.
  • Semua sysroot untuk level platform sebelum Android 2.3 (API level 9) telah dihapus. Kami menghentikan dukungan untuk sysroot tersebut pada NDK r11, tetapi tidak benar-benar menghapusnya.
  • Penanganan pengecualian saat menggunakan c++_shared pada ARM32 telah diupdate sehingga sebagian besar akan berfungsi (lihat Masalah Umum). Sekarang unwinder dihubungkan ke setiap objek tertaut, bukan ke libc++ itu sendiri.
  • Flag compiler default telah dipangkas (Masalah NDK 27). Anda dapat melihat detail update ini pada Perubahan 207721.
  • Implementasi Python untuk toolchain mandiri telah ditambahkan di build/tools/make_standalone_toolchain.py. Di Windows, Anda tidak lagi memerlukan Cygwin untuk menggunakan fitur ini. Perhatikan bahwa kami akan menghapus bash flavor dalam rilis mendatang, jadi ujilah bash baru sekarang.
  • Debug build Clang telah dikonfigurasi agar opsi -fno-limit-debug-info diaktifkan secara default. Perubahan ini memungkinkan proses debug yang lebih baik dengan LLDB.
  • --build-id telah diaktifkan sebagai opsi default. Opsi ini menyebabkan ID ditampilkan dalam laporan masalah pada native code sehingga Anda dapat dengan mudah mengidentifikasi versi kode yang sedang berjalan.
  • Masalah NDK_USE_CYGPATH telah diperbaiki sehingga tidak lagi menyebabkan masalah dengan libgcc (Masalah 195486).
  • Opsi berikut telah diaktifkan secara default: -Wl,--warn-shared-textrel dan -Wl,--fatal-warnings. Jika Anda telah membagikan relokasi teks, aplikasi Anda tidak akan dimuat pada Android 6.0 (API level 23) dan yang lebih tinggi. Perhatikan bahwa konfigurasi ini sama sekali tidak diizinkan untuk aplikasi 64-bit.
  • Beberapa masalah telah diperbaiki sehingga header prakompilasi berfungsi lebih optimal (Masalah NDK 14, Masalah NDK 16).
  • Library STL ARM (non-thumb) yang tidak dapat dijangkau telah dihapus.
  • Dukungan Vulkan telah ditambahkan ke android-24.
  • Choreographer API telah ditambahkan ke android-24.
  • Libcamera2 API telah ditambahkan untuk perangkat yang mendukung level fitur INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED atau yang lebih tinggi. Untuk informasi selengkapnya, lihat referensi CameraCharacteristics.
Clang
  • Clang telah diupdate ke 3.8svn (r256229, build 2812033). Executable clang.exe dan clang++.exe pada paket Windows 32-bit sebenarnya adalah 64-bit. File yang dapat dieksekusi 32-bit diberi nama clang_32.exe.
  • __thread telah diperbaiki sehingga dapat berfungsi dengan baik.
GCC
  • Compiler telah disinkronkan dengan ChromeOS GCC @ google/gcc-4_9 r227810.
  • Patch sanitizer cakupan di-backport dari ToT (r231296).
  • libatomic diperbaiki agar tidak menggunakan ifuncs (Masalah NDK 31).
Binutils
  • Pesan info "Erratum 843419 found and fixed" dinonaktifkan.
  • Opsi --long-plt diperkenalkan untuk memperbaiki error linker internal yang terjadi saat menautkan biner arm32 berukuran besar.
  • Stub waktu proses yang salah untuk AArch64 telah diperbaiki. Masalah ini menyebabkan kesalahan penghitungan jump address untuk objek bersama dinamis (DSO) yang sangat besar.
  • Opsi default --no-apply-dynamic diperkenalkan untuk mengatasi bug linker dinamis pada rilis Android sebelumnya.
  • Masalah umum terkait NDK r11 di mana dynamic_cast tidak berfungsi dengan Clang, x86, stlport_static, dan pengoptimalan telah diperbaiki.
GDB
  • Telah diupdate ke GDB versi 7.11. Untuk informasi selengkapnya tentang rilis ini, lihat Berita GDB.
  • Sejumlah bug dalam skrip ndk-gdb.py telah diperbaiki.
Masalah Umum
  • x86 Address Sanitizer (ASAN) saat ini tidak berfungsi. Untuk informasi selengkapnya, lihat Masalah 186276.
  • Pengecualian yang dilepaskan dengan c++_shared tidak berfungsi untuk ARM pada Android 2.3 (API level 9) atau Android 4.0 (API level 14).
  • Header dan library bionic untuk Android 6.0 (API level 23) dan yang lebih tinggi belum terekspos meskipun sudah ada android-24. Platform tersebut masih memiliki header dan library Android 5.0 (API level 21), yang sesuai dengan NDK r11.
  • Fitur RenderScript tidak ada, yang sesuai dengan NDK r11. (Masalah NDK 7)
  • Dalam file header NdkCameraMetadataTags.h, nilai enum tag metadata kamera ACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP tercantum secara tidak sengaja dan akan dihapus pada rilis berikutnya. Gunakan nilai ACAMERA_STATISTICS_LENS_SHADING_MAP sebagai gantinya.
Perubahan
  • Perbaikan tambahan untuk skrip ndk-gdb.py diterapkan.
  • Argumen nama paket opsional telah ditambahkan ke opsi --attach perintah ndk-gdb. (Masalah 13)
  • Lokasi toolchain yang tidak valid telah diperbaiki untuk platform Windows 32-bit. (Masalah 45)
  • Jalur relatif untuk perintah ndk-which telah diperbaiki. (Masalah 29)
  • Penggunaan cygpath untuk compiler libgcc telah diperbaiki. (Android Masalah 195486)
NDK
  • Pengumuman penting
    • Kami telah memindahkan pelacak bug ke GitHub.
  • Perubahan
    • ndk-gdb.py telah diperbaiki. Diregresikan sepenuhnya dalam r11.
    • ndk-gdb untuk Mac telah diperbaiki.
    • Pintasan tingkat atas lainnya telah ditambahkan untuk fitur command-line:
      • ndk-depends.
      • ndk-gdb.
      • ndk-stack.
      • ndk-which. Perintah ini sama sekali tidak ada dalam rilis sebelumnya.
    • Toolchain mandiri untuk libc++, yang tidak memiliki __cxxabi_config.h telah diperbaiki.
    • Dokumentasi bantuan untuk --toolchain pada make-standalone-toolchain.sh telah diperbaiki.
Clang
  • Errata
    • Tidak seperti yang dilaporkan dalam Catatan Rilis r11, __thread tidak berfungsi. Hal ini karena versi Clang yang kami kirimkan tidak menyertakan perbaikan bug untuk dukungan TLS teremulasi.
Clang
  • Pengumuman penting
    • Kami sangat merekomendasikan peralihan ke Clang.
      • Jika Anda mengalami masalah saat menggunakan Clang, laporkan bug di sini untuk masalah khusus Clang dalam NDK. Untuk masalah Clang yang lebih umum, laporkan bug dengan mengikuti petunjuk di halaman ini.
    • Clang telah diupdate ke 3.8svn (r243773, build 2481030).
      • Versi ini adalah Clang upstream yang hampir murni.
      • Paket NDK yang dapat didownload untuk Windows 64-bit berisi Clang versi 32-bit.
  • Penambahan
    • Clang kini memberikan dukungan untuk TLS teremulasi.
      • Sekarang compiler mendukung __thread dengan mengemulasi ELF TLS bersama data khusus thread pthread.
      • C++11 thread_local berfungsi dalam beberapa kasus, tetapi tidak untuk data dengan destruktor yang tidak umum, karena kasus tersebut memerlukan dukungan dari libc. Batasan ini tidak berlaku saat menggunakan Android 6.0 (API level 23) atau yang lebih baru.
      • TLS teremulasi belum berfungsi dengan Aarch64 saat variabel TLS diakses dari library bersama.
GCC
  • Pengumuman penting
    • GCC dalam NDK kini tidak digunakan lagi untuk Clang.
      • NDK tidak akan diupgrade ke 5.x, ataupun menerima backport yang tidak penting.
      • Pemeliharaan untuk kesalahan kompilasi dan error compiler internal pada 4.9 akan ditangani secara kasus per kasus.
  • Penghapusan
    • GCC 4.8 dihapus. Semua target sekarang menggunakan GCC 4.9.
  • Perubahan lainnya
    • Google/gcc-4_9 telah disinkronkan ke r224707. Sebelumnya, sinkronisasi dilakukan dengan r214835.
NDK
  • Pengumuman penting
    • Sampel tidak lagi disertakan dalam paket NDK. Sampel tersebut tersedia di GitHub.
    • Dokumentasi tidak lagi disertakan dalam paket NDK. Dokumentasi tersedia di situs developer Android.
  • Penambahan
    • API pelacakan native ditambahkan ke android-23.
    • API multijaringan native ditambahkan ke android-23.
    • libc, m, dan dl diaktifkan untuk memberikan simbol berversi, mulai dari API level 21.
    • Header dan library Vulkan ditambahkan ke API level N.
  • Penghapusan
    • Dukungan untuk _WCHAR_IS_8BIT dihapus.
    • Sed dihapus.
    • MCLinker dihapus.
    • Perl dihapus.
    • Semua simbol yang tidak didukung versi platform library dihapus dari semua versi libc, m, dan dl NDK.
    • Dukungan untuk mips64r2 dihapus sebagian. Sisanya akan dihapus di masa mendatang.
  • Perubahan lainnya
    • Toolchain mandiri ARM diubah dan ditetapkan secara default ke arm7.
      • Anda dapat memulihkan perilaku lama dengan menentukan opsi -target sebagai armv5te-linux-androideabi.
    • Sistem build telah diubah agar menggunakan -isystem yang dicakup platform.
      • Peringatan yang disebabkan bionic tidak lagi merusak build aplikasi.
    • Segfault yang terjadi saat biner melempar pengecualian melalui gabi++ telah diperbaiki. (Masalah 179410)
    • Namespace inline libc++ telah diubah menjadi std::__ndk1 untuk mencegah masalah ODR dengan libc++ platform.
    • Semua library libc++ sekarang dibuat dengan libc++abi.
    • APP_PLATFORM default telah ditempatkan ke Gingerbread.
      • Dukungan untuk Froyo dan versi yang lebih lama diharapkan akan diberikan dalam rilis mendatang.
  • Struct _Unwind_Exception gabi++ untuk 64-bit telah diupdate.
  • Kemampuan berikut telah ditambahkan ke cpufeatures:
    • Deteksi SSE4.1 dan SSE4.2.
    • Deteksi fitur cpu di x86_64.
  • libc++abi telah diupdate ke upstream r231075.
  • byteswap.h, endian.h, sys/procfs.h, sys/ucontext.h, sys/user.h, dan uchar.h telah diupdate dari ToT Bionic.
  • sys/cdefs.h telah disinkronkan di semua level API.
  • fegetenv and fesetenv telah diperbaiki untuk arm.
  • Ukuran/perataan end pointer crtend_* untuk mips64 dan x86_64 telah diperbaiki.
Binutils
  • Penambahan
    • Opsi baru ditambahkan: --pic-veneer.
  • Penghapusan
    • Paket Windows 32-bit tidak lagi berisi ld.gold. Sebagai gantinya, Anda bisa mendapatkan ld.gold dari paket Windows 64-bit.
  • Perubahan
    • Sumber binutils antara Android dan ChromiumOS telah dipadukan. Untuk informasi selengkapnya tentang perubahan ini, lihat komentar di sini.
    • Keandalan Gold telah ditingkatkan untuk aarch64. Gunakan -fuse-ld=gold pada waktu penautan untuk menggunakan gold sebagai pengganti bfd. Defaultnya kemungkinan akan dialihkan dalam rilis berikutnya.
    • Waktu penautan biner besar untuk backend ARM Gold telah ditingkatkan (waktu penautan berkurang hingga 50% untuk Browser Chrome yang dapat di-debug).
GDB
  • Penghapusan
    • Ndk-gdb telah dihapus dan diganti dengan ndk-gdb.py.
  • Perubahan
    • Gdb telah diupdate ke versi 7.10.
    • Performa telah ditingkatkan.
    • Pesan error telah ditingkatkan.
    • Jalur project relatif telah diperbaiki.
    • Ctr-C tak lagi mengakhiri gdbserver di latar belakang.
    • Dukungan Windows telah ditingkatkan.
YASM
  • Perubahan
    • YASM telah diupdate ke versi 1.3.0.
Masalah umum
  • x86 ASAN saat ini tidak berfungsi. Untuk informasi selengkapnya, lihat diskusi di sini.
  • Kombinasi Clang, x86, stlport_static, dan pengoptimalan pada level di atas -O0 menyebabkan kegagalan uji dengan dynamic_cast. Untuk informasi selengkapnya, lihat komentar di sini.
  • Penanganan pengecualian sering gagal dengan c++_shared pada ARM32. Penyebab utamanya adalah ketidakcocokan antara LLVM unwinder yang digunakan libc++abi untuk ARM32 dan libgcc. Perilaku ini bukan merupakan regresi dari r10e.
Download
  • Download untuk rilis ini diarsipkan di sini.
Perubahan penting:
  • Solusi untuk Cortex-A53 Erratum 843419 telah diintegrasikan ke dalam linker aarch64-linux-android-4.9. Untuk informasi selengkapnya tentang solusi ini, lihat Solusi untuk cortex-a53 erratum 843419.
  • Clang 3.6 ditambahkan; NDK_TOOLCHAIN_VERSION=clang sekarang memilih versi Clang tersebut secara default.
  • Clang 3.4 dihapus.
  • GCC 4.6 dihapus.
  • Dukungan multithreading telah diterapkan pada ld.gold untuk semua arsitektur. Sekarang ld.gold dapat terhubung dengan atau tanpa dukungan multithreading; defaultnya adalah terhubung tanpa dukungan.
    • Untuk mengompilasi dengan multithreading, gunakan opsi --threads.
    • Untuk mengompilasi tanpa multithreading, gunakan opsi --no-threads.
  • GDB/gdbserver diupgrade ke versi 7.7 untuk semua arsitektur.
  • Paket NDK untuk Darwin 32-bit telah dihapus.
Perbaikan bug penting:
  • Crash yang terjadi saat ada loop OpenMP di luar thread utama telah diperbaiki.
  • Error compiler internal (ICE) GCC 4.9, yang terjadi saat pengguna menyatakan #pragma GCC optimize ("O0") tetapi menetapkan level pengoptimalan yang berbeda di command line, telah diperbaiki. pragma lebih diprioritaskan.
  • Error yang digunakan untuk menghasilkan crash dengan pesan error berikut telah diperbaiki:
    in add_stores, at var-tracking.c:6000
    
  • Solusi untuk masalah Clang 3.5 ketika auto-vektorisasi LLVM menghasilkan llvm.cttz.v2i64(), sebuah petunjuk tanpa pasangan dalam kumpulan petunjuk ARM, telah diimplementasikan.
Perbaikan bug lainnya:
  • Perbaikan header dan library berikut telah dibuat:
    • PROPERTY_* telah diperbaiki di media/NdkMediaDrm.h.
    • sys/ucontext.h telah diperbaiki untuk mips64.
    • Pemeriksaan versi Clang untuk __builtin_isnan dan __builtin_isinf telah dihentikan.
    • android-21/arch-mips/usr/include/asm/reg.h dan android-21/arch-mips64/usr/include/asm/reg.h telah ditambahkan.
  • Peringatan batas array palsu yang dibuat GCC 4.9 untuk x86 telah diperbaiki, dan peringatan batas array yang dibuat oleh GCC 4.9 untuk ARM telah diaktifkan kembali. Peringatan untuk ARM sebelumnya dinonaktifkan tanpa syarat.
  • Clang 3.5 untuk mips dan mips64 untuk membuat bagian .gcc_except_table yang dapat ditulis telah diperbaiki, sehingga cocok dengan perilaku GCC. Perubahan ini memungkinkan Anda menghindari peringatan linker berikut:
    .../ld: warning: creating a DT_TEXTREL in a shared object
    
  • Perbaikan untuk masalah compiler-rt yang menyebabkan error saat Clang dikompilasi untuk mips64 telah di-backport. Untuk informasi selengkapnya, lihat Masalah LLVM 20098.
  • Crash Clang 3.5 yang terjadi pada komentar non-ASCII telah diperbaiki. (Masalah 81440)
  • stlport collate::compare telah diperbaiki untuk menampilkan -1 dan 1. Sebelumnya hanya menampilkan nomor yang ditandatangani secara arbitrer.
  • ndk-gdb untuk ABI 64-bit telah diperbaiki. (Masalah 118300)
  • Error yang dihasilkan sampel HelloComputeNDK untuk RenderScript pada Android 4.4 (Android API level 19) telah diperbaiki. Untuk informasi selengkapnya, lihat halaman ini.
  • libc++ __wrap_iter untuk GCC telah diperbaiki. Untuk informasi selengkapnya, lihat masalah LLVM 22355.
  • Dukungan .asm untuk ABI x86_64 telah diperbaiki.
  • Solusi untuk masalah stlport GCC 4.8 telah diimplementasikan. (Masalah 127773)
  • Pemisah direktori akhir \\ telah dihapus dari jalur project di Windows. (Masalah 160584)
  • Error no rule to make target yang terjadi saat mengompilasi file .c tunggal dengan menjalankan perintah ndk-build.cmd dari gradle telah diperbaiki. (Masalah 66937)
  • Library libatomic.a dan libgomp.a yang hilang dari toolchain host berikut telah ditambahkan:
    • aarch64-linux-android-4.9
    • mips64el-linux-android-4.9
    • mipsel-linux-android-4.9
    • x86_64-4.9
Perubahan lainnya:
  • ld.gold telah ditambahkan untuk aarch64. Linker default tetap ld.bfd. Untuk mengaktifkan ld.gold secara eksplisit, tambahkan -fuse-ld=gold ke variabel LOCAL_LDFLAGS atau APP_LDFLAGS.
  • Toolchain MIPS dan MIPS64 dengan binutils-2.25, yang menyediakan dukungan R6 yang lebih baik, telah dibuat.
  • -fstandalone-debug (info debug lengkap) sebagai opsi default untuk Clang telah dibuat.
  • -fstack-protector telah diganti dengan -fstack-protector-strong untuk toolchain ARM, AArch64, X86, dan X86_64 untuk GCC 4.9, Clang 3.5, dan Clang 3.6.
  • Tombol command line --package telah ditambahkan ke ndk-gdb agar sistem build dapat mengganti nama paket. (Masalah 56189)
  • -mno-ldc1-stc1 tidak digunakan lagi untuk MIPS. Opsi ini mungkin tidak berfungsi dengan opsi -fpxx dan -mno-odd-spreg yang baru, atau dengan FPXX ABI.
  • Menambahkan deteksi MSA dan R6 MIPS ke cpu-features.
Perubahan penting:
  • GCC 4.8 telah dibuat sebagai default untuk semua ABI 32-bit. GCC 4.6 tidak digunakan lagi, dan akan dihapus dalam rilis berikutnya. Untuk memulihkan perilaku sebelumnya, tambahkan NDK_TOOLCHAIN_VERSION=4.6 ke ndk-build, atau tambahkan --toolchain=arm-linux-androideabi-4.6 saat menjalankan make-standalone-toolchain.sh di command line. GCC 4.9 tetap menjadi default untuk ABI 64-bit.
  • Semua toolchain x86[_64] telah dihentikan agar tidak menambahkan -mstackrealign secara default. Toolchain NDK mengasumsikan penyelarasan tumpukan 16 byte. Fitur dan opsi yang digunakan secara default mengikuti aturan ini. Seorang pengguna yang menulis kode assembly harus memastikan bahwa dia mempertahankan keselarasan tumpukan, dan memastikan bahwa compiler lain juga mematuhi aturan ini. (Bug GCC 38496)
  • Fungsi Address Sanitizer untuk dukungan Clang 3.5 ditambahkan ke ARM dan ABI x86. Untuk informasi selengkapnya tentang perubahan ini, lihat project Address Sanitizer.
  • Persyaratan untuk menggunakan -fPIE -pie saat membuat build telah diperkenalkan, mulai dari API level 21. Pada API level 16 dan yang lebih tinggi, ndk-build menggunakan PIE saat membuat build. Perubahan ini memiliki sejumlah implikasi, yang dibahas dalam Masalah 888 Pratinjau Developer. Implikasi ini tidak berlaku untuk library bersama.
Perbaikan bug penting:
  • Perbaikan lainnya terkait A53 Errata #835769 telah dibuat pada linker aarch64-linux-android-4.9. Sebagai bagian dari ini, GCC memberikan opsi baru, --fix-cortex-a53-835769, jika -mfix-cortex-a53-835769 (yang diaktifkan secara default) ditentukan. Untuk informasi selengkapnya, lihat pesan binutils ini dan pesan binutils ini.
  • Perbaikan untuk hang libc++ sscanf/vsscanf yang terjadi pada API level 21 telah didokumentasikan. Perbaikan itu sendiri telah diterapkan dalam r10c. (Masalah 77988)
  • Error AutoFDO (-fauto-profile) yang terjadi dengan GCC 4.9 saat -Os ditentukan telah diperbaiki. (Masalah 77571)
Perbaikan bug lainnya:
  • Perbaikan header dan library berikut telah dibuat:
    • posix_memalign telah ditambahkan ke API level 16. Selain itu, prototipe di stdlib.h telah ditambahkan ke API level 16 hingga 19. (Masalah 77861)
    • stdatomic.h telah diperbaiki sehingga hanya menyertakan <atomic> untuk C++11.
    • Header berikut telah dimodifikasi untuk penggunaan mandiri: sys/user.h, dan gl2ext.h, dlext.h, fts.h, sgidefs.h untuk API level 21.
    • sys/user.h telah dimodifikasi untuk mengganti nama mxcsr_mask menjadi mxcr_mask, dan untuk mengubah jenis data untuk u_ar0
    • dari unsigned long menjadi struct user_regs_struct*.
    • Jenis nilai yang ditampilkan sysconf() telah diubah dari int menjadi long.
  • Penanganan ndk-build thumb untuk LOCAL_ARM_MODE telah diperbaiki: Dalam r10d, ndk-build menambahkan LOCAL_LDFLAGS+=-mthumb secara default, kecuali jika salah satu dari kondisi berikut berlaku:
    • Anda telah menetapkan LOCAL_ARM_MODE setara dengan arm.
    • Anda men-debug build (dengan setelan seperti APP_OPTIM=debug dan AndroidManifest.xml yang berisi android:debuggable="true"), dengan mode ARM sebagai default untuk mempertahankan kompatibilitas dengan toolchain sebelumnya. (Masalah 74040)
  • LOCAL_SRC_FILES pada ndk-build telah diperbaiki untuk menggunakan jalur absolut Windows. (Masalah 74333)
  • Kode khusus bash telah dihapus dari ndk-gdb. (Masalah 73338)
  • Kode khusus bash telah dihapus dari make-standalone-toolchain.sh. (Masalah 74145)
  • Dokumentasi tentang perbaikan untuk dependensi transitif System.loadLibrary() telah direvisi. (Masalah 41790)
  • Masalah yang membuat paket 64-bit gagal diekstrak pada Ubuntu 14.04 dan OS X 10.10 (Yosemite) telah diperbaiki. (Masalah 78148)
  • Masalah terkait LOCAL_PCH telah diperbaiki untuk meningkatkan dukungan Clang. (Masalah 77575)
  • Peringatan "requires executable stack" dari ld.gold telah diklarifikasi. (Masalah 79115)
Perubahan penting:
  • Perubahan berikut dibuat pada struktur download:
    • Setiap paket sekarang berisi header, library, serta fitur 32-bit dan 64-bit untuk masing-masing platformnya.
    • Library STL dengan info proses debug tidak lagi perlu didownload secara terpisah.
  • Semua yang sebelumnya disebut Android-L telah diubah menjadi sebutan rilis resmi: android-21.
  • GCC 4.9 telah diupdate dengan melakukan rebasing ke cabang google repositori GCC. Perbedaan utama dari versi upstream GCC 4.9 meliputi:
    • Opsi -O2 kini mengaktifkan vektorisasi, tanpa pengulangan loop, tetapi dengan unrolling yang lebih agresif.
    • FDO dan LIPO telah disempurnakan
    • Untuk informasi selengkapnya, lihat Perbaikan bug penting di bawah.

  • Dukungan Clang 3.5 telah ditambahkan ke semua host: NDK_TOOLCHAIN_VERSION=clang sekarang memilih Clang 3.5. Perhatikan bahwa:
    • ARM dan x86 secara default menggunakan assembler terintegrasi. Jika ini menyebabkan masalah, gunakan -fno-integrated-as sebagai solusinya.
    • Clang 3.5 mengeluarkan lebih banyak peringatan untuk flag yang tidak digunakan, seperti opsi -finline-functions yang didukung GCC.
    • Saat melakukan migrasi dari project yang menggunakan GCC, Anda dapat menggunakan -Wno-invalid-command-line-argument dan -Wno-unused-command-line-argument untuk mengabaikan flag yang tidak digunakan hingga Anda dapat memutuskan apa yang harus dilakukan untuk jangka waktu yang lebih lama.

  • Memungkinkan untuk masuk ke mode debug ART, saat menjalankan debug pada perangkat Android 5.0 menggunakan ART sebagai mesin virtualnya, dengan menentukan opsi art-on. Untuk informasi selengkapnya, lihat prebuilt/common/gdb/common.setup dalam direktori yang berisi NDK.
  • Dukungan untuk Clang 3.3 telah dihapus.
  • GCC 4.6 tidak digunakan lagi, dan mungkin dihapus dari rilis mendatang.
  • MCLinker telah diupdate ke 2.8 dengan dukungan Identical Code Folding ("ICF"). Tentukan ICF menggunakan opsi --icf.
  • Dukungan arm_neon.h pada x86 dan x86_64 telah diperluas, dengan cakupan ~93% dari intrinsik NEON. Untuk informasi selengkapnya tentang dukungan NEON:
    • Buka Panduan Programmer NDK (docs/Programmers_Guide/html/), lalu lihat Arsitektur dan CPU > Neon.
    • Periksa contoh hello-neon yang telah diupdate di samples/.
    • Lihat panduan Intel untuk melakukan porting dari ARM NEON ke Intel SSE.
  • Dukungan untuk _FORTIFY_SOURCE di headers/libs/android-21 telah didokumentasikan, yang muncul dalam r10 (saat android-21 masih disebut Android-L), tetapi tidak disertai dokumentasi.
Perbaikan bug penting:
Perbaikan bug lainnya:
  • Perbaikan header dan library berikut telah dibuat untuk android-21:
    • Kode tombol TV lainnya telah ditambahkan: android/keycodes.h
    • Konstanta lain dan enam fungsi sensor baru telah ditambahkan ke android/sensor.h: ASensorManager_getDefaultSensorEx, ASensor_getFifoMaxEventCount, ASensor_getFifoReservedEventCount, ASensor_getStringType, ASensor_getReportingMode, dan ASensor_isWakeUpSensor.
    • stdatomic.h telah diperbaiki untuk meningkatkan kompatibilitas dengan GCC 4.6, dan memberikan dukungan untuk header <atomic>.
    • sys/ucontext.h dan sys/user.h telah ditambahkan ke semua level API. Header signal.h sekarang menyertakan <sys/ucontext.h>. Anda dapat menghapus semua definisi struct ucontext yang ada.
    • posix_memalign telah ditambahkan ke API level 17, 18, dan 19.
    • Fungsi berikut telah ditambahkan ke semua arsitektur: android_set_abort_message, posix_fadvise, posix_fadvise64, pthread_gettid_np.
    • Izin wajib telah ditambahkan ke contoh native-media/AndroidManifest.xml. (Masalah 106640)
    • clock_nanosleep dan clock_settime telah ditambahkan ke API level 21. (Masalah 77372)
    • Simbol berikut telah dihapus dari semua arsitektur: 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, dan dlmalloc.
    • Fungsi berikut telah dihapus dari arsitektur 64-bit: basename_r, dirname_r, __isthreaded, _flush_cache (mips64).
    • Fungsi berikut telah dihapus dari arsitektur 32-bit: __signalfd4.
    • Jenis argumen ketiga telah diubah dari size_t menjadi int dalam fungsi berikut: strtoll_l, strtoull_l, wcstoll_l, dan wcstoull_l.
    • Fungsi berikut telah dipulihkan ke arsitektur 64-bit: arc4random, arc4random_buf, dan arc4random_uniform.
    • cxa_* serta operator new dan delete telah dikembalikan ke libstdc++.so. Perubahan ini mengembalikan perilaku r9d; versi r10 sebelumnya yang berisi file placeholder.
  • Dukungan MXU di GCC 4.8 dan 4.9 untuk mips telah dipulihkan. Dukungan ini tidak ada pada r10 dan r10b karena versi GCC tersebut dikompilasi dengan binutils-2.24, yang tidak mendukung MXU. Sekarang mendukung.
  • --toolchain= dalam make-standalone-toolchain.sh telah diperbaiki sehingga kini mendukung penggunaan akhiran yang menentukan versi Clang.
  • Fungsi libc++/armeabi strtod() telah diperbaiki.
  • Dokumentasi NDK dalam docs/ telah diperbaiki.
Perubahan lainnya:
  • cpu-features telah disempurnakan agar dapat mendeteksi dukungan ARMv8 untuk kumpulan petunjuk berikut: AES, CRC32, SHA2, SHA1, dan PMULL/PMULL2 64-bit. (Masalah 106360)
  • Ndk-build telah dimodifikasi agar menggunakan *-gcc-ar, yang tersedia di GCC 4.8, GCC 4.9, dan Clang. Clang menentukannya, dan bukan *-ar. Setelan ini menghadirkan dukungan LTO yang lebih baik.
  • Header include-fixed/linux/a.out.h dan include-fixed/linux/compiler.h telah dihapus dari compiler GCC. (Masalah 73728)
  • Masalah terkait -flto dengan GCC 4.8 di Mac OS X telah diperbaiki. Pesan error-nya berbunyi:
  • .../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so
    Symbol not found: _environ
    
  • Kesalahan ketik dalam build-binary.mk. telah diperbaiki (Masalah 76992)
Masalah umum penting:
  • Menentukan -Os (-fauto-profile) di GCC4.9 dapat menyebabkan error. (Masalah 77571)
Catatan penting:
  • Karena ada pembatasan ukuran maksimal 512 MB pada paket yang dapat didownload, item 32-bit berikut ini tidak disertakan dalam paket download NDK 32-bit. Sebagai gantinya, paket tersebut disertakan dalam 64-bit:
    • Header Android-L
    • GCC 4.9
  • Saat ini, satu-satunya dukungan Renderscript yang disediakan oleh NDK adalah untuk Renderscript 32-bit dengan Android 4.4 (API level 19). Anda tidak dapat membuat HelloComputeNDK (satu-satunya sampel Renderscript) dengan kombinasi Renderscript (32-bit atau 64-bit) dan versi Android lain apa pun.
  • Untuk mengompilasi native-codec, Anda harus menggunakan paket NDK 64-bit, yang menampung semua header Android L.
Perbaikan bug penting:
  • Gdb 7.6 di GCC 4.8/4.9 telah diperbaiki. (Masalah 74112 dan 74371.)
  • GCC 4.8/4.9 untuk x86 telah diperbaiki, sehingga tidak lagi mengaktifkan -msse4.2 dan -mpopcnt secara default. (Masalah 73843.)
Perbaikan bug lainnya:
  • stdio.h telah dihapus dari direktori include-fixed/ semua versi GCC. (Masalah 73728.)
  • File header duplikat telah dihapus dari paket Windows dalam direktori platforms/android-L/arch-*/usr/include/linux/netfilter*/. (Masalah 73704.)
  • Masalah yang mencegah Clang agar tidak membuat HelloComputeNDK telah diperbaiki.
  • Atexit telah diperbaiki. (Masalah 66595.)
  • Dokumen dalam docs/ dan sources/third_party/googletest/README.NDK telah diperbaiki. (Masalah 74069.)
  • Perbaikan berikut telah dibuat untuk header Android-L:
    1. Fungsi berikut telah ditambahkan ke ctype.h dan 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() (Masalah 73719), dan 42 fungsi *_l().
    2. cmsg_nxthdr telah diganti namanya menjadi __cmsg_nxthdr.
    3. __libc_malloc_dispatch telah dihapus.
    4. Prototipe ptrace() telah diubah menjadi long ptrace(int, ...);.
    5. sha1.h telah dihapus.
    6. android_dlextinfo telah diperluas pada android/dlext.h.
    7. __NDK_FPABI__ telah dianotasi untuk fungsi yang menerima atau menampilkan nilai jenis mengambang atau ganda di stdlib.h, time.h, wchar.h, dan complex.h.
Perubahan lainnya:
  • mipsel-linux-android-4.9 dan mips64el-linux-android-4.9 telah diupdate, mengimplementasikan tata letak direktori multilib baru, dan memberikan dukungan untuk gdb-7.7
  • cpu-features telah disempurnakan untuk mendeteksi lebih banyak fitur arm64. (Daftar perubahan 100339).
Perubahan penting:
  • 3 ABI baru telah ditambahkan, semuanya 64-bit: arm64-v8a, x86_64, mips64.
  • Perhatikan bahwa:
    • GCC 4.9 adalah compiler default untuk ABI 64-bit. Clang saat ini adalah versi 3.4. NDK_TOOLCHAIN_VERSION=clang mungkin tidak berfungsi untuk arm64-v8a dan mips64.
    • Android-L adalah level pertama yang memiliki dukungan 64-bit. Perhatikan bahwa level API ini bersifat sementara, dan hanya untuk pratinjau Android L. Nomor level API sebenarnya akan menggantikannya pada rilis Android L.
    • Rilis ini sekarang tidak menyertakan setelan all32 dan all64 untuk APP_ABI.
      • APP_ABI=all32 setara dengan APP_ABI=armeabi,armeabi-v7a,x86,mips.
      • APP_ABI=all64 setara dengan APP_ABI=arm64-v8a,x86_64,mips64.
      • APP_ABI=all memilih semua ABI.
    • GNU libstdc++ baru pada Android-L berisi semua <tr1/cmath> Sebelum menentukan fungsi math Anda sendiri, pastikan tidak ada fungsi dengan nama yang sama di _GLIBCXX_USE_C99_MATH_TR1 untuk menghindari error “definisi rangkap” dari linker.
    • Library cpu-features telah diupdate untuk kernel ARMv8. Library cpu-features yang ada mungkin gagal mendeteksi keberadaan NEON pada platform ARMv8. Kompilasi ulang kode Anda dengan versi baru.
  • Direktori API platforms/android-L/ baru telah ditambahkan. Direktori ini mencakup:
    • Header Bionic yang telah diupdate, yang belum berubah sejak Android API level 3 (Cupcake) sampai 19 (KitKat). Versi baru ini, untuk Android L, harus disinkronkan dengan AOSP.
    • Media API baru dan sampel native-codec.
    • Header Android.h yang telah diupdate untuk SLES/OpenSLES, yang memungkinkan dukungan untuk format audio titik mengambang presisi-tunggal di AudioPlayer.
    • GLES 3.1 dan ekstensi AEP ke libGLESv3.so.
    • Header GLES2 dan GLES3 diupdate ke versi resmi Khronos terbaru.
  • Compiler GCC 4.9 telah ditambahkan ke ABI 32/64-bit. GCC 4.9 adalah compiler default (satu-satunya) untuk ABI 64-bit, seperti yang disebutkan sebelumnya. Untuk ABI 32-bit, Anda harus mengaktifkan GCC 4.9 secara eksplisit, karena GCC 4.6 masih menjadi setelan defaultnya.
    • Untuk ndk-build, aktifkan pembuatan build GCC 4.9 32-bit dengan menambahkan NDK_TOOLCHAIN_VERSION=4.9 ke Application.mk, atau dengan mengekspornya sebagai variabel lingkungan dari command line.
    • Untuk toolchain mandiri, gunakan opsi --toolchain= dalam skrip make-standalone-toolchain.sh. Contoh: --toolchain=arm-linux-androideabi-4.9.
  • GDB telah diupgrade ke versi 7.6 di GCC 4.8/4.9 dan x86*. Karena GDB masih pada versi GDB-7.3.x dalam GCC 4.6 (default untuk ARM dan MIPS), Anda harus menetapkan NDK_TOOLCHAIN_VERSION=4.8 atau 4.9 untuk mengaktifkan ndk-gdb agar dapat memilih GDB 7.6.
  • Opsi build -mssse3 telah ditambahkan untuk memberikan dukungan SSSE3, dan menjadikannya default untuk ABI x86 (upgrade dari SSE3). Gambar yang dirilis oleh Google tidak menyertakan instruksi SSSE3.
  • GCC 4.8 telah diupdate ke 4.8.3.
  • Dukungan ARM libc++ EH telah ditingkatkan dengan beralih dari gabi++ ke libc++abi. Untuk penjelasan selengkapnya, lihat bagian "Dukungan C++" dalam dokumentasi ini. Perhatikan bahwa:
    • Semua pengujian kecuali lokal sekarang lulus untuk Clang 3.4 dan GCC 4.8. Untuk informasi selengkapnya, lihat bagian "Dukungan C++" dalam dokumentasi ini.
    • Library libc++ untuk X86 dan MIPS libc++ masih menggunakan gabi++.
    • GCC 4.7 dan yang lebih baru kini dapat menggunakan <atomic>.
    • Anda harus menambahkan -fno-strict-aliasing jika menggunakan <list>, karena __list_imp::_end_ melanggar aturan TBAA. (Masalah 61571.)
    • Mulai GCC 4.6, LIBCXX_FORCE_REBUILD:=true tidak lagi membuat kembali libc++. Untuk membuatnya kembali diperlukan penggunaan compiler berbeda. Perhatikan bahwa Clang 3.3 belum teruji.
  • mcLinker kini adalah versi 2.7, dan memiliki dukungan aarch64 Linux.
  • Dukungan header prakompilasi telah ditambahkan untuk header yang ditentukan oleh LOCAL_PCH. (Masalah 25412).
Perbaikan bug penting:
  • libc++ telah diperbaiki sehingga kini mengompilasi std::feof, dll. (Masalah 66668).
  • Panggilan library atomik Clang 3.3/3.4 yang menyebabkan error pada beberapa pengujian libc++ untuk ABI armeabi telah diperbaiki.
  • Error Clang 3.4 yang terjadi saat membaca header prakompilasi telah diperbaiki. (Masalah 66657).
  • Pernyataan Clang 3.3/3.4 -O3 telah diperbaiki pada:
  • 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!" (Masalah 57381).
  • Error Clang 3.3/3.4 berikut telah diperbaiki:
  • 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. (Masalah 66950).
Perbaikan bug lainnya:
  • Header telah diperbaiki:
    • ssize_t 32-bit telah diperbaiki menjadi int, bukan long int.
    • WCHAR_MIN dan WCHAR_MAX telah diperbaiki sehingga dapat mengambil tanda tangan yang sesuai dengan arsitektur yang sedang dijalankan:
      • X86/MIPS: ditandatangani.
      • ARM: tidak ditandatangani.
      • Untuk memaksa X86/MIPS agar ditetapkan secara default ke tidak ditandatangani, gunakan -D__WCHAR_UNSIGNED__.
      • Untuk memaksa wchar_t menjadi 16 bit, gunakan -fshort-wchar.
    • Simbol yang tidak ada telah dihapus dari libc.so 32-bit, dan pread64, pwrite64, ftruncate64 ditambahkan untuk Android API level 12 dan yang lebih tinggi. (Masalah 69319). Untuk informasi selengkapnya, lihat pesan commit yang menyertai daftar perubahan AOSP 94137.
  • Peringatan GCC tentang penentuan ulang putchar telah diperbaiki. Pesan peringatan berbunyi:
  • include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int); (Daftar perubahan 91185).
  • make-standalone-toolchain.sh --stl=libc++ telah diperbaiki sehingga:
    • Salinan cxxabi.h. (Masalah 68001).
    • Berjalan di direktori selain dari direktori penginstalan NDK. (Masalah 67690 dan 68647).
  • GCC/Windows telah diperbaiki untuk mengutip argumen hanya saat diperlukan untuk proses spawning dalam program eksternal. Perubahan ini mengurangi kemungkinan melebihi batas panjang 32K.
  • Masalah yang membuat variabel lingkungan APP_PLATFORM tidak dapat disesuaikan telah diperbaiki.
  • Implementasi IsSystemLibrary() dalam crazy_linker telah diperbaiki dengan penggunaan strrchr() bukanstrchr(), untuk menemukan basename asli jalur library path.
  • Ketidakmampuan untuk membuat audio native dalam mode debug telah diperbaiki.
  • Ketidakmampuan gdb untuk mencetak bilangan floating point yang ekstrem telah diperbaiki. (Masalah 69203).
  • Ketidakmampuan Clang 3.4 untuk dikompilasi dengan -Wl,-shared (sebagai lawan dari -shared, yang tidak memiliki masalah kompilasi) telah diperbaiki. Masalahnya adalah bahwa Clang menambahkan -pie untuk target Android jika -shared dan -static sama-sama tidak ada. Perilaku yang tidak benar ini menyebabkan linker melaporkan bahwa -shared dan -pie tidak dapat digunakan berdampingan.
Perubahan lainnya:
  • arm_neon.h telah ditambahkan ke toolchain x86 sehingga kini mengemulasikan ~47% dari Neon. Saat ini, tidak ada dukungan untuk jenis 64-bit. Untuk informasi selengkapnya, lihat bagian Dukungan intrinsik ARM Neon dalam dokumentasi x86.
  • Pengoptimalan ARM/GOT_PREL (tersedia dalam GCC 4.6 yang dibuat dari cabang Google GCC) telah di-porting ke ARM GCC 4.8/4.9. Pengoptimalan ini terkadang mengurangi jumlah instruksi saat mengakses variabel global. Contohnya, lihat skrip build.sh di $NDK/tests/build/b14811006-GOT_PREL-optimization/.
  • Versi ARM telah ditambahkan untuk STL gabi++, stlport, dan libc++. Kini mode tersebut dan juga mode Thumb tersedia di STL.
  • Sekarang Anda dapat memanggil skrip make-standalone-toolchain.sh dengan --toolchain=x86_64-linux-android-4.9, yang setara dengan --toolchain=x86_64-4.9.
Perubahan penting:
  • Dukungan untuk compiler Clang 3.4 telah ditambahkan. Opsi NDK_TOOLCHAIN_VERSION=clang sekarang memilih Clang 3.4. GCC 4.6 tetap menjadi compiler default.
  • APP_ABI=armeabi-v7a-hard telah ditambahkan, dengan opsi -mfloat-abi=hard multilib tambahan. Opsi ini dirancang untuk digunakan dengan ARM GCC 4.6/4.8 dan Clang 3.3/3.4 (yang menggunakan assembler, linker, dan lib 4.8). Saat menggunakan opsi ini, perhatikan perubahan berikut:
    • Saat menjalankan skrip ndk-build, tambahkan opsi berikut untuk target armeabi-v7a:
      TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1
      TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
      Library yang dibangun akan disalin ke libs/armeabi-v7a. Agar make berperilaku sesuai yang diharapkan, Anda tidak boleh menentukan armeabi-v7a dan armeabi-v7a-hard sebagai target make (misalnya, pada APP_ABI= line). Melakukannya menyebabkan salah satu darinya diabaikan. Perhatikan bahwa APP_ABI=all masih setara dengan armeabi armeabi-v7a x86 mips.
    • Skrip make-standalone-toolchain.sh menyalin library tambahan pada direktori /hard. Tambahkan CFLAGS dan LFLAGS di atas ke makefile Anda untuk mengaktifkan GCC atau Clang agar terhubung dengan library di /hard.
  • Yasm assembler telah ditambahkan, begitu juga flag LOCAL_ASMFLAGS dan EXPORT_ASMFLAGS untuk target x86. Skrip ndk-build menggunakan prebuilts/*/bin/yasm* untuk membuat LOCAL_SRC_FILES yang memiliki ekstensi .asm.
  • MCLinker telah diupdate ke 2.6.0, yang menambahkan dukungan -gc-sections.
  • Dukungan libc++ eksperimental (upstream r201101) telah ditambahkan. Gunakan fitur baru ini dengan mengikuti langkah-langkah berikut:
    • Tambahkan APP_STL := c++_static atau APP_STL := c++_shared di Application.mk. Anda dapat membuat ulang dari sumber melalui LIBCXX_FORCE_REBUILD := true
    • Jalankan make-standalone-toolchain.sh --stl=libc++ untuk membuat toolchain mandiri dengan header/lib libc++.
    Untuk informasi selengkapnya, lihat CPLUSPLUS-SUPPORT.html. (Masalah 36496)
Perbaikan bug penting:
  • Uncaught throw dari pengendali pengecualian yang tidak terduga untuk GCC 4.6/4.8 ARM EABI telah diperbaiki. (Masalah GCC 59392)
  • GCC 4.8 telah diperbaiki sehingga sekarang mengatasi spesialisasi parsial dari sebuah template dengan benar menggunakan argumen template non-jenis yang dependen. (Masalah GCC 59052)
  • Modul lainnya telah ditambahkan ke python bawaan (Masalah 59902):
    • Mac OS X: zlib, bz2, _curses, _curses_panel, _hashlib, _ssl
    • Linux: zlib, nis, crypt, _curses, dan _curses_panel
  • gdbserver x86 dan MIPS event_getmsg_helper telah diperbaiki.
  • Banyak masalah di toolchain RenderScript NDK telah diperbaiki, termasuk masalah kompatibilitas pada perangkat lama dan refleksi C++.

Perbaikan bug lainnya:
  • Perbaikan Header:
    • #include <sys/types.h> yang hilang di android/asset_manager.h telah diperbaiki untuk Android API level 13 dan yang lebih tinggi. (Masalah 64988)
    • #include yang hilang di android/rect_manager.h telah diperbaiki untuk Android API level 14 dan yang lebih baru.
    • JNICALL telah ditambahkan ke JNI_OnLoad dan JNI_OnUnload di jni.h. Perhatikan bahwa JNICALL ditentukan sebagai __NDK_FPABI__ Untuk informasi selengkapnya, lihat sys/cdefs.h.
    • Header berikut telah diupdate sehingga dapat disertakan tanpa perlu menyertakan dependensinya secara manual (Masalah 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
    • sys/cachectl.h telah ditambahkan untuk semua arsitektur. Developer MIPS kini dapat menyertakan header ini, alih-alih menulis #ifdef __mips__.
    • platforms/android-18/include/android/input.h telah diperbaiki dengan menambahkan __NDK_FPABI__ ke fungsi yang mengambil atau menampilkan nilai mengambang atau ganda.
    • struct stat MIPS telah diperbaiki, yang sebelumnya tidak ditetapkan dengan benar ke versi 64-bit-nya untuk Android API level 12 dan yang lebih baru. Setelan yang salah ini merupakan regresi yang diperkenalkan dalam rilis r9c.
    • __PTHREAD_MUTEX_INIT_VALUE, __PTHREAD_RECURSIVE_MUTEX_INIT_VALUE, dan __PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE telah ditetapkan untuk Android API level 9 dan yang lebih lama.
    • scalbln, scalblnf, dan scalblnl telah ditambahkan ke x86 libm.so untuk API 18 dan yang lebih baru.
    • Kesalahan ketik dalam sources/android/support/include/iconv.h telah diperbaiki. (Masalah 63806)
  • gabi++ std::unexpected() telah diperbaiki untuk memanggil std::terminate(), sehingga pengendali std::terminate() yang ditetapkan pengguna berpotensi untuk dijalankan.
  • gabi++ telah diperbaiki untuk menangkap std::nullptr.
  • Contoh Teapot dan MoreTeapots telah diperbaiki:
    • Masalah dengan chip Tegra 2 dan 3 telah diselesaikan dengan mengubah variabel specular agar menggunakan presisi sedang. Nilai untuk specular power sekarang bisa kurang dari 1.0.
    • Sampel telah diubah, sehingga menekan tombol volume akan memulihkan mode imersif dan menjadikan SYSTEM_UI_FLAG_IMMERSIVE_STICKY tidak valid. Rotasi layar tidak memicu onSystemUiVisibilityChange, serta tidak memulihkan mode imersif.
  • Skrip ndk-build telah diperbaiki untuk menambahkan -rpath-link=$SYSROOT/usr/lib dan -rpath-link=$TARGET_OUT agar dapat menggunakan ld.bfd untuk menautkan file yang dapat dieksekusi. (Masalah 64266)
  • -Bsymbolic telah dihapus dari semua build STL.
  • ndk-gdb-py.cmd telah diperbaiki dengan menetapkan SHELL sebagai variabel lingkungan, bukan meneruskannya ke python.exe, yang mengabaikan setelan. (Masalah 63054)
  • Skrip make-standalone-toolchain.sh telah diperbaiki, sehingga opsi --stl=stlport akan menyalin header gabi++, bukan membuat symlink; cmd.exe dan shell MinGW tidak dapat memahami symlink yang dibuat oleh cygwin.
Perubahan lainnya:
  • Izin eksekusi telah diterapkan ke semua skrip *cmd yang sebelumnya dimaksudkan untuk digunakan hanya dalam shell cmd.exe, sebagai jaga-jaga jika developer lebih suka menggunakan ndk-build.cmd di cygwin, daripada skrip ndk-build yang direkomendasikan.
  • Kecepatan skrip make-standalone-toolchain.sh telah ditingkatkan dengan memindahkannya, bukan menyalinnya, jika direktori tujuan yang ditentukan tidak ada.

Ini adalah rilis perbaikan bug saja.

Perbaikan bug penting:
  • Masalah dengan GCC 4.8 ARM telah diperbaiki, di mana stack pointer dipulihkan terlalu awal. Masalah ini mencegah frame pointer mengakses variabel dalam frame tumpukan secara andal. (Masalah GCC 58854)
  • Masalah dengan GCC 4.8 libstdc++ telah diperbaiki, di mana bug pada std::nth_element menyebabkan pembuatan kode yang menghasilkan segfault acak. (Masalah 62910)
  • GCC 4.8 ICE dalam cc1/cc1plus dengan -fuse-ld=mcld telah diperbaiki, sehingga error berikut tidak lagi terjadi:
    cc1: internal compiler error: in common_handle_option, at
    opts.c:1774
  • Dukungan -mhard-float untuk fungsi math __builtin telah diperbaiki. Untuk informasi berkelanjutan tentang perbaikan untuk -mhard-float dengan STL, silakan ikuti diskusi Masalah 61784.
Perbaikan bug lainnya:
  • Perbaikan Header:
    • Prototipe telah diubah dari poll menjadi poll(struct pollfd *, nfds_t, int); dalam poll.h.
    • utimensat telah ditambahkan ke libc.so untuk Android API level 12 dan 19. Library tersebut sekarang disertakan untuk semua Android API level 12 hingga 19.
    • futimens telah diperkenalkan ke dalam libc.so, untuk Android API level 19.
    • clock_settime() dan clock_nanosleep() yang hilang telah ditambahkan ke time.h untuk Android API level 8 dan yang lebih baru.
    • CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM, dan CLOCK_BOOTTIME_ALARM telah ditambahkan dalam time.h.
    • CLOCK_REALTIME_HR dan CLOCK_MONOTONIC_HR. yang tidak digunakan lagi telah dihapus
  • Dalam sampel Teapot, MoreTeapots, dan source/android/ndk_helper:
    • Sampel tersebut telah diubah sehingga sekarang menggunakan abi hard-float untuk armeabi-v7a.
    • Sampel telah diupdate untuk menggunakan mode imersif pada Android API level 19 dan yang lebih tinggi.
    • Masalah terkait Check_ReleaseStringUTFChars dalam /system/lib/libdvm.so yang menyebabkan error pada perangkat x86 telah diperbaiki.
  • Kegagalan ndk-build yang terjadi di cygwin saat paket NDK direferensikan melalui symlink telah diperbaiki.
  • Kegagalan ndk-build.cmd yang terjadi di jendela cmd.exe saat LOCAL_SRC_FILES berisi jalur absolut telah diperbaiki. (Masalah 69992)
  • Skrip ndk-stack telah diperbaiki untuk melanjutkan proses meskipun tidak dapat mengurai frame karena tidak bisa menemukan rutinitas, nama file, atau nomor baris. Dalam salah satu kasus ini, skrip akan mencetak ??.
  • Stack ndk-stack untuk target windows-x64_64 telah diperbaiki, sehingga tidak lagi keliru mencocokkan baris frame dengan baris di bagian stack: yang tidak berisi pc, eip, atau ip. Contoh:
    I/DEBUG   ( 1151):     #00  5f09db68  401f01c4
    /system/lib/libc.so
  • gabi++ telah diperbaiki sehingga:
    • Tidak menggunakan malloc() untuk mengalokasikan objek thread-local C++.
    • Menghindari deadlock di gabi++ pada kasus ketika libc.debug.malloc bernilai bukan nol pada build platform Android userdebug/eng.
Perubahan lainnya:
  • LOCAL_EXPORT_LDFLAGS ditambahkan.
  • Setelan NDK_PROJECT_PATH=null telah diperkenalkan untuk digunakan dalam sistem build terintegrasi di mana opsi diteruskan secara eksplisit ke ndk-build. Dengan setelan ini, ndk-build tidak berusaha mencari NDK_PROJECT_PATH. Selain itu, dengan setelan ini, variabel tidak akan mengambil setelan default dari NDK_PROJECT_PATH. Akibatnya, variabel berikut sekarang harus ditetapkan secara eksplisit (dengan nilai defaultnya, jika ada): NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG (opsional, default ke 0), dan APP_* lainnya yang tercantum dalam Application.mk.
  • APP_ABI sekarang dapat dienumerasi dalam daftar yang dibatasi koma. Contoh:
    APP_ABI := "armeabi,armeabi-v7a"
  • Kemampuan untuk membuat ulang semua STL telah diberikan dengan info proses debug dalam paket opsional terpisah yang disebut android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip, menggunakan opsi -g. Dengan opsi ini, skrip ndk-stack dapat memberikan stack dump yang lebih baik di STL. Perubahan ini tidak akan memengaruhi kode/ukuran file akhir yang dihilangkan.
  • Contoh hello-jni telah disempurnakan untuk melaporkan APP_ABI pada saat kompilasi.
  • Alat ar telah digunakan dalam mode Deterministik (opsi -D) untuk membuat library statis. (Masalah 60705)
Perubahan penting:
  • include/android/*h dan math.h telah diupdate untuk semua level API Android hingga 18, termasuk penambahan level 13, 15, 16, dan 17. Untuk informasi tentang API yang ditambahkan, lihat pesan commit untuk Perubahan 68012 dan 68014. (Masalah 47150, 58528, dan 38423)
  • Dukungan untuk Android API level 19 telah ditambahkan, termasuk binding Renderscript.
  • Dukungan untuk -mhard-float di armeabi-v7a ABI yang ada telah ditambahkan. Untuk informasi selengkapnya dan pembatasan saat ini di Clang, lihat tests/device/hard-float/jni/Android.mk.
  • GNU Compiler Collection (GCC) 4.8 telah dimigrasikan ke 4.8.2, dan dukungan warna diagnostik telah ditambahkan. Untuk mengaktifkan warna diagnostik, setel -fdiagnostics-color=auto, -fdiagnostics-color=always, atau ekspor GCC_COLORS sebagaimana ditunjukkan di bawah ini:
    GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
    
    Untuk mengetahui informasi selengkapnya, lihat Opsi Independen Bahasa GCC.
  • Dua sampel baru telah ditambahkan untuk mendemonstrasikan fitur OpenGL ES 3.0: Teapot dan MoreTeapots. Sampel ini berjalan pada perangkat dengan Android 4.1 (API level 16) dan lebih tinggi.
  • Dukungan GCC 4.7 dan Clang 3.2 tidak digunakan lagi dan akan dihapus pada rilis berikutnya.
Perbaikan bug penting:
  • Masalah terkait thumb2 ARM GCC 4.6 yang gagal menghasilkan tabel lompatan relatif 16-bit telah diperbaiki. (Masalah GCC)
  • Error compiler internal (ICE) GCC 4.8 pada g++.dg/cpp0x/lambda/lambda-defarg3.C telah diperbaiki. (Perubahan 62770, Masalah GCC)
  • Masalah terkait file *-gdb.exe yang dapat dieksekusi di Windows 32-bit yang gagal diluncurkan telah diperbaiki. (Masalah 58975)
  • GCC 4.8 ICE saat membangun library bullet telah diperbaiki. Berikut adalah pesan error-nya:
    internal compiler error: verify_flow_info failed
    (Masalah 58916, Masalah GCC)
  • Build GDB/ARM telah dimodifikasi agar melewati data ARM.exidx untuk dilepas dalam kode prolog dan perintah (set arm exidx-unwinding) telah ditambahkan untuk mengontrol pelepasan stack berbasis exidx. (Masalah 55826 )
  • Masalah compiler Clang 3.3 MIPS telah diperbaiki di mana register HI dan LO digunakan lagi secara keliru.
  • Masalah terkait MIPS 4.7 ICE di dbx_reg_number telah diperbaiki. Berikut adalah pesan error-nya:
    external/icu4c/i18n/decimfmt.cpp:1322:1:
    internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
    
    (Patch GCC)
Perbaikan bug lainnya:
  • Perbaikan header
    • ARM WCHAR_MIN dan WCHAR_MAX telah diperbaiki agar tidak ditandatangani sesuai dengan spesifikasi (versi X86/MIPS ditandatangani). Tentukan _WCHAR_IS_ALWAYS_SIGNED untuk memulihkan perilaku lama. (Masalah 57749)
    • include/netinet/tcp.h telah diperbaiki untuk memuat enum status TCP_INFO. (Masalah 38881)
    • Makro cdefs_elh.h _C_LABEL_STRING telah diperbaiki agar berhenti menampilkan peringatan di toolchain GCC 4.8 saat menggunakan mode c++11. (Masalah 58135, Masalah 58652)
    • Fungsi imaxabs dan imaxdiv yang tidak ada telah dihapus dari header inttypes.h.
    • Masalah terkait nilai yang ditampilkan pthread_exit() dan pthread_self() telah diperbaiki. (Masalah 60686)
    • Fungsi mkdtemp() yang hilang telah ditambahkan, yang sudah ada dalam header bionic stdlib.h.
  • Masalah pembuatan samples/gles3jni dengan Clang di Android API level 11 telah diperbaiki.
  • MCLinker telah diperbaiki agar memungkinkan beberapa kemunculan opsi berikut: -gc-sections dan --eh-frame-hdr.
  • MCLinker telah diperbaiki agar menerima opsi --no-warn-mismatch.
  • Opsi cpu-features telah dimodifikasi agar tidak menganggap semua perangkat VFPv4 mendukung IDIV. Sekarang opsi ini hanya menambahkan IDIV ke perangkat yang diberi akses, termasuk Nexus 4. (Masalah 57637)
  • Masalah terkait android_native_app_glue.c yang keliru mencatat log error pada operasi predispatch peristiwa telah diperbaiki.
  • Semua operasi telah diperbaiki pada penghentian gabi++ dan unexpected_handler agar aman terhadap thread.
  • Beberapa masalah terkait opsi -integrated-as Clang telah diperbaiki agar dapat lulus pengujian untuk ssax-instructions dan fenv.
  • Compiler GCC 4.6/4.7/4.8 telah diperbaiki agar meneruskan opsi linker --eh-frame-hdr termasuk untuk file status yang dapat dieksekusi. Untuk informasi selengkapnya, lihat GCC patch.
  • Apostrof tambahan dalam CPU-ARCH-ABIS.html telah diperbaiki. Untuk informasi selengkapnya, lihat NDK-DEPENDS.html. (Masalah 60142)
  • Tanda kutip tambahan dalam output ndk-build pada Windows telah diperbaiki. (Masalah 60649)
  • Clang 3.3 telah diperbaiki agar mengompilasi operasi atomik bawaan ARM, seperti __atomic_fetch_add, __atomic_fetch_sub, dan __atomic_fetch_or.
  • Clang 3.3 ICE telah diperbaiki dengan vfprintf yang disesuaikan. (Masalah Clang)
Perubahan lainnya:
  • OpenMP telah diaktifkan untuk semua build GCC. Untuk menggunakan fitur ini, tambahkan flag berikut ke setelan build Anda:
    LOCAL_CFLAGS += -fopenmp
    LOCAL_LDFLAGS += -fopenmp
    
    Untuk contoh kode, lihat tests/device/test-openmp
  • Ukuran ld.mcld telah dikurangi secara signifikan (1,5 MB dari sebelumnya 3,5 MB untuk ld.bfd dan 7,5 MB untuk ld.gold), menghasilkan peningkatan kecepatan sekitar 20%.
  • LOCAL_CONLYFLAGS dan APP_CONLYFLAGS telah ditambahkan untuk menentukan opsi yang berlaku hanya untuk C tetapi tidak untuk C++. LOCAL_CFLAGS dan APP_CFLAGS yang sudah ada juga digunakan untuk kompilasi C++ (agar tidak perlu menentukan sebagian besar opsi dua kali), sehingga opsi seperti -std=gnu99 mungkin gagal pada build g++ dengan peringatan dan pada build clang++ dengan error.
  • Fungsi helper array gabi++ telah ditambahkan.
  • Build GCC telah dimodifikasi sehingga semua file libgcc.a dibuat dengan -funwind-tables agar memungkinkan tumpukan untuk dilepas melewati titik yang sebelumnya diblokir, seperti __aeabi_idiv0.
  • Dukungan Ingenic MXU di MIPS GCC4.6/4.7/4.8 dengan opsi -mmxu baru telah ditambahkan.
  • MIPS GCC4.6/4.7/4.8 -mldc1-sdc1 telah diperluas untuk mengontrol ldxc1/sdxc1 juga.
  • Crazy linker telah ditambahkan. Untuk informasi selengkapnya, lihat sources/android/crazy_linker/README.TXT.
  • bitmap-plasma telah diperbaiki untuk menggambar ke layar penuh, bukan ke area berukuran 200x200 piksel.
  • Mengurangi ukuran toolchain linux dan darwin sebesar 25% dengan membuat symlink ke file yang identik.
Perubahan penting:
  • Dukungan untuk Android 4.3 (API level 18) telah ditambahkan. Untuk informasi selengkapnya, lihat STABLE-APIS.html contoh kode baru di samples/gles3jni/README.
  • Header dan library untuk OpenGL ES 3.0 telah ditambahkan, yang didukung oleh Android 4.3 (API level 18) dan yang lebih tinggi.
  • Compiler GNU Compiler Collection (GCC) 4.8 telah ditambahkan ke NDK. Karena GCC 4.6 masih menjadi default, Anda harus mengaktifkan opsi ini secara eksplisit:
    • Untuk build ndk-build, ekspor NDK_TOOLCHAIN_VERSION=4.8 atau tambahkan dalam Application.mk.
    • Untuk build mandiri, gunakan opsi --toolchain= pada make-standalone-toolchain.sh, misalnya:
      --toolchain=arm-linux-androideabi-4.8

    Catatan: Opsi -Wunused-local-typedefs diaktifkan oleh -Wall. Pastikan untuk menambahkan __attribute__((unused)) jika Anda menggunakan pernyataan waktu kompilasi seperti sources/cxx-stl/stlport/stlport/stl/config/features.h, baris #311. Untuk informasi selengkapnya, lihat Perubahan 55460

    Catatan: Dalam rilis GCC 4.7 dan yang lebih baru, compiler ARM menghasilkan kode akses yang tidak selaras secara default untuk ARMv6 dan target build yang lebih tinggi. Anda mungkin perlu menambahkan opsi build -mno-unaligned-access saat membuat kernel yang tidak mendukung fitur ini.

  • Dukungan Clang 3.3 telah ditambahkan. Opsi build NDK_TOOLCHAIN_VERSION=clang sekarang menggunakan Clang 3.3 secara default.

    Catatan: GCC 4.4.3 dan Clang 3.1 tidak digunakan lagi, dan akan dihapus dari rilis NDK berikutnya.

  • GNU Project Debugger (GDB) telah diupdate agar mendukung python 2.7.5.
  • MCLinker telah ditambahkan agar mendukung host Windows. Karena ld.gold adalah nilai default jika tersedia, Anda harus menambahkan -fuse-ld=mcld dalam LOCAL_LDFLAGS atau APP_LDFLAGS untuk mengaktifkan MCLinker.
  • Alat ndk-depends yang mencetak dependensi library ELF telah ditambahkan. Untuk informasi selengkapnya, lihat NDK-DEPENDS.html: (Masalah 53486)
Perbaikan bug penting:
  • Masalah penanganan peristiwa potensial pada android_native_app_glue telah diperbaiki. (Masalah 41755)
  • Build ARM/GCC-4.7 telah diperbaiki agar menghasilkan keselarasan yang memadai untuk pemuatan NEON dan instruksi penyimpanan VST dan VLD. (Masalah GCC 57271)
  • Error compiler internal (ICE) GCC 4.4.3/4.6/4.7 untuk nilai indeks negatif konstan pada string literal telah diperbaiki. (Masalah 54623)
  • Kesalahan segmentasi GCC 4.7 untuk inisialisasi konstan dengan alamat objek telah diperbaiki. (Masalah 56508)
  • Kesalahan segmentasi GCC 4.6 ARM untuk nilai -O saat menggunakan Boost 1.52.0 telah diperbaiki. (Masalah 42891)
  • libc.so dan libc.a telah diperbaiki untuk mendukung fungsi wait4(). (Masalah 19854)
  • File x86 libc.so dan libc.a telah diupdate untuk menyertakan fungsi clone().
  • Bug LOCAL_SHORT_COMMANDS telah diperbaiki, di mana linker.list file kosong atau tidak digunakan.
  • Build GCC MIPS di Mac OS telah diperbaiki agar menggunakan pedoman CFI, yang tanpanya ld.mcld --eh-frame-hdr akan sering gagal.
  • Error compiler internal Clang 3.2 X86/MIPS pada llvm/lib/VMCore/Value.cpp telah diperbaiki. (Perubahan 59021)
  • Crash assembler Windows 64-bit GCC 4.7 telah diperbaiki. (Error: out of memory allocating 4294967280 bytes).
  • Skrip ndk-gdb telah diupdate sehingga tindakan --start atau --launch kini menunggu Server Debug GNU, agar dapat lebih andal mencapai titik henti sementara yang disetel di awal di jalur eksekusi (seperti titik henti sementara dalam kode JNI). (Masalah 41278)

    Catatan: Fitur ini memerlukan jdb dan menghasilkan peringatan tentang titik henti sementara yang tertunda. Tentukan opsi --nowait untuk memulihkan perilaku sebelumnya.

  • Error GDB saat daftar library kosong telah diperbaiki.
  • Error GDB saat menggunakan perintah stepi setelah melewati instruksi Thumb bx pc atau blx pc telah diperbaiki. (Masalah 56962, Masalah 36149)
  • MIPS gdbserver telah diperbaiki agar mencari DT_MIPS_RLD_MAP, bukan DT_DEBUG. (Masalah 56586)
  • Dependensi melingkar dalam skrip ndk-build telah diperbaiki, misalnya: Jika A->B dan B->B, maka B dihapus build. (Masalah 56690)
Perbaikan bug lainnya:
  • Skrip ndk-build telah diperbaiki agar Anda dapat menentukan versi Clang sebagai opsi command-line (misalnya, NDK_TOOLCHAIN_VERSION=clang3.2). Sebelumnya, Anda hanya dapat menentukan versi tersebut sebagai variabel lingkungan.
  • Ukuran gabi++ _Unwind_Exception telah diperbaiki menjadi 24 untuk target build MIPS saat menggunakan compiler Clang. (Perubahan 54141)
  • Skrip ndk-build telah diperbaiki untuk memastikan bahwa library yang di-build benar-benar dihapus dari project yang menyertakan library statis bawaan saat menggunakan perintah ndk-build clean. (Perubahan 54461, Perubahan 54480)
  • Opsi NDK_ANALYZE=1 telah dimodifikasi agar menjadi lebih sederhana.
  • gnu-libstdc++/Android.mk telah diperbaiki agar menyertakan jalur backward/ untuk build yang menggunakan kompatibilitas mundur. (Masalah 53404)
  • Masalah saat stlport new terkadang menampilkan nilai acak telah diperbaiki.
  • ndk-gdb telah diperbaiki agar sesuai dengan urutan CPU_ABIS, bukan APP_ABIS. (Masalah 54033)
  • Masalah saat build NDK 64-bit di MacOSX memilih jalur yang salah untuk compiler telah diperbaiki. (Masalah 53769)
  • Skrip build untuk mendeteksi Windows Vista 64-bit telah diperbaiki. (Masalah 54485)
  • Error ntonl/swap32 x86: invalid 'asm': operand number out of range telah diperbaiki. (Masalah 54465, Masalah 57242)
  • ld.gold telah diperbaiki agar dapat menggabungkan literal string.
  • ld.gold telah diperbaiki agar menangani penyelarasan simbol besar.
  • ld.gold telah diupdate agar mengaktifkan opsi --sort-section=name.
  • GCC 4.4.3/4.6/4.7 telah diperbaiki agar menyembunyikan opsi -export-dynamic untuk program yang terhubung secara statis. GCC tidak lagi menambahkan bagian .interp untuk program yang terhubung secara statis.
  • Error kompilasi stlport GCC 4.4.3 tentang typedef _Unwind_Control_Block yang tidak konsisten telah diperbaiki. (Masalah 54426)
  • Skrip awk telah diperbaiki untuk menangani file AndroidManifest.xml yang dibuat di Windows yang mungkin berisi karakter \r di akhir dan menyebabkan error build. (Masalah 42548)
  • make-standalone-toolchain.sh telah diperbaiki untuk memeriksa direktori prebuilts/ guna mendeteksi apakah host berjenis 32-bit atau 64-bit.
  • Opsi -integrated-as Clang 3.2 telah diperbaiki.
  • Data pengendali model ringkas pr1 dan pr2 Clang 3.2 ARM EHABI telah diperbaiki.
  • Opsi -mllvm -arm-enable-ehabi Clang telah ditambahkan untuk memperbaiki error Clang berikut:
    clang: for the -arm-enable-ehabi option: may only occur zero or one times!
  • Build yang gagal saat tidak ada elemen uses-sdk dalam manifes aplikasi telah diperbaiki. (Masalah 57015)
Perubahan lainnya:
  • Perbaikan Header
    • Header telah dimodifikasi untuk menjadikan __set_errno sebagai fungsi inline, karena __set_errno dalam errno.h sudah tidak digunakan lagi, dan libc.so tidak lagi mengekspornya.
    • elf.h telah dimodifikasi untuk menyertakan stdint.h. (Masalah 55443)
    • sys/un.h telah diperbaiki untuk disertakan ke header lainnya secara independen. (Masalah 53646)
    • Semua keluarga API MotionEvent_getHistorical telah diperbaiki untuk mengambil const AInputEvent* motion_event. (Masalah 55873)
    • malloc_usable_size telah diperbaiki untuk mengambil const void*. (Masalah 55725)
    • stdint.h telah diperbaiki agar lebih kompatibel dengan C99. (Perubahan 46821)
    • wchar.h telah dimodifikasi agar tidak menentukan ulang WCHAR_MAX dan WCHAR_MIN
    • Deklarasi <inttypes.h> telah diperbaiki untuk makro PRI dan SCN terkait pointer. (Masalah 57218)
    • Header sys/cdefs.h telah diubah, sehingga __WCHAR_TYPE__ adalah 32-bit untuk level API di bawah 9, yang berarti wchat_t adalah 32-bit untuk semua level API. Untuk memulihkan perilaku sebelumnya, tentukan variabel boolean _WCHAR_IS_8BIT. (Masalah 57267)
  • Lebih banyak pemformatan ditambahkan dalam docs/ NDK dan beragam perbaikan dokumentasi.
  • Dukungan telah ditambahkan untuk teknik arsip tipis saat mem-build library statis. (Masalah 40303)
  • Skrip make-standalone-toolchain.sh telah diupdate agar mendukung library stlport dan juga gnustl, saat Anda menentukan opsi --stl=stlport. Untuk informasi selengkapnya, lihat STANDALONE-TOOLCHAIN.html.
  • Skrip make-standalone-toolchain.sh telah diupdate sehingga opsi --llvm-version= membuat skrip $TOOLCHAIN_PREFIX-clang dan $TOOLCHAIN_PREFIX-clang++ selain clang dan clang++, guna menghindari penggunaan definisi clang++ host tanpa sengaja.
  • Dua flag telah ditambahkan untuk mengaktifkan kembali dua pengoptimalan pada Clang upstream tetapi dinonaktifkan di NDK untuk kompatibilitas yang lebih baik dengan kode yang dikompilasi oleh GCC:
    • Flag -fcxx-missing-return-semantics telah ditambahkan untuk mengaktifkan kembali missing return semantics di Clang 3.2+. Biasanya, semua jalur harus diakhiri dengan return statement untuk fungsi yang menampilkan nilai. Jika ini tidak terjadi, clang akan memasukkan instruksi yang tidak ditetapkan (atau perangkap dalam mode debug) pada lokasi yang tidak memiliki return statement. Jika Anda yakin bahwa kode Anda sudah benar, gunakan flag ini untuk mengizinkan pengoptimal memanfaatkan perilaku yang tidak ditentukan. Jika Anda tidak yakin, jangan gunakan flag ini. Pemanggil tetap dapat menerima nilai salah secara acak, tetapi pengoptimal tidak akan mengeksploitasinya dan membuat kode Anda semakin sulit untuk di-debug.
    • Flag -fglobal-ctor-const-promotion telah ditambahkan untuk mengaktifkan kembali promosi variabel global dengan konstruktor statis menjadi konstanta. Dengan flag ini, penerusan pengoptimalan variabel global LLVM mencoba untuk mengevaluasi variabel global dengan konstruktor statis dan mempromosikannya ke konstanta global. Meskipun benar, pengoptimalan ini dapat menyebabkan ketidaksesuaian dengan kode yang dikompilasi oleh GCC. Misalnya, kode dapat melakukan const_cast agar konstanta dapat diubah dan dimodifikasi. Di GCC, variabelnya bersifat baca-tulis dan kode dijalankan secara tidak sengaja. Di Clang, variabel konstanta berada dalam memori hanya baca dan dapat mengakibatkan error pada aplikasi Anda.
  • -mldc1-sdc1 telah ditambahkan ke compiler Clang dan MIPS GCC. Secara default, compiler menyelaraskan objek 8 byte dengan benar dan menghasilkan instruksi ldc1 dan sdc1 untuk memindah-mindahkan objek. Jika aplikasi Anda menggunakan alokator kustom yang tidak selalu selaras dengan batas 8 byte objek baru dengan cara yang sama seperti alokator default, maka aplikasi Anda dapat mengalami error karena operasi ldc1 dan sdc1 yang berjalan pada memori yang tidak selaras. Dalam hal ini, gunakan flag -mno-ldc1-sdc1 untuk mengatasi masalah.
  • Tingkat keparahan peristiwa telah di-downgrade dari peringatan menjadi info jika APP_PLATFORM_LEVEL lebih besar daripada APP_MIN_PLATFORM_LEVEL. APP_PLATFORM_LEVEL mungkin lebih rendah daripada APP_PLATFORM di jni/Application.mk karena NDK tidak memiliki header untuk semua level. Dalam kejadian ini, level aktualnya digeser ke bawah. APP_MIN_PLATFORM_LEVEL ditetapkan oleh android:minSdkVersion dalam manifes aplikasi Anda. (Masalah 39752)
  • Metode android_getCpuIdArm() dan android_setCpuArm() telah ditambahkan ke cpu-features.c. Penambahan ini memudahkan pengambilan informasi ARM CPUID. (Masalah 53689)
  • ndk-build telah dimodifikasi agar menggunakan as/ld GCC 4.7 untuk kompilasi Clang.

    Catatan: Di GCC 4.7, monotonic_clock dan is_monotonic masing-masing telah diubah namanya menjadi steady_clock dan is_steady.

  • Peringatan baru berikut telah ditambahkan ke skrip ndk-build:
    • Peringatan telah ditambahkan tentang apakah LOCAL_LDLIBS/LDFLAGS digunakan dalam modul library statis atau tidak.
    • Peringatan telah ditambahkan tentang apakah konfigurasi tidak memiliki modul untuk dibuat.
    • Peringatan telah ditambahkan untuk library non-sistem yang digunakan dalam LOCAL_LDLIBS/LDFLAGS library bersama atau modul yang dapat dieksekusi.
  • Skrip build telah diupdate, sehingga jika APP_MODULES tidak ditentukan dan hanya library statis yang tercantum di Android.mk, skrip akan membangun semuanya secara paksa. (Masalah 53502)
  • ndk-build telah ditambahkan untuk mendukung jalur absolut di LOCAL_SRC_FILES.
  • File *-gdbtui yang dapat dieksekusi telah dihapus, yang merupakan duplikat dari file *-gdb yang dapat dieksekusi dengan opsi -tui diaktifkan.
  • Skrip build telah diupdate untuk memperingatkan Anda saat front-end compiler Edison Design Group (EDG) mengaktifkan kembali _STLP_HAS_INCLUDE_NEXT. (Masalah 53646)
  • Variabel lingkungan NDK_LIBS_OUT telah ditambahkan untuk memungkinkan penggantian jalur libraries/gdbserver dari $PROJECT/libs default. Untuk informasi selengkapnya, lihat OVERVIEW.html:
  • Default skrip ndk-build telah diubah untuk mengompilasi kode dengan perlindungan string format -Wformat -Werror=format-security. Anda dapat menetapkan LOCAL_DISABLE_FORMAT_STRING_CHECKS=true untuk menonaktifkannya. Untuk informasi selengkapnya, lihat ANDROID-MK.html
  • Dukungan pretty-print STL telah ditambahkan di ndk-gdb-py. Untuk informasi selengkapnya, lihat NDK-GDB.html.
  • Pengujian berdasarkan framework googletest telah ditambahkan.
  • Notifikasi telah ditambahkan ke skrip build toolchain yang memperingatkan Anda jika shell saat ini bukan bash.
Perubahan penting:
  • Set toolchain host 64-bit (akhiran nama paket *-x86_64.*) telah ditambahkan. Untuk informasi selengkapnya, lihat CHANGES.HTML dan NDK-BUILD.html.
  • Compiler Clang 3.2 telah ditambahkan. GCC 4.6 masih menjadi default. Untuk informasi penggunaan compiler Clang, lihat CHANGES.HTML.
  • Penganalisis kode statis telah ditambahkan untuk host Linux/MacOSX. Untuk informasi penggunaan analisis, lihat CHANGES.HTML.
  • MCLinker untuk host Linux/MacOSX telah ditambahkan sebagai fitur eksperimental. Linker ld.gold adalah default jika tersedia, jadi Anda harus mengaktifkannya secara eksplisit. Untuk informasi selengkapnya, lihat CHANGES.HTML.
  • ndk-build telah diupdate agar menggunakan pengurutan topologi untuk dependensi modul, yang berarti build otomatis mengurutkan library yang ditentukan dalam LOCAL_STATIC_LIBRARIES, LOCAL_WHOLE_STATIC_LIBRARIES, dan LOCAL_SHARED_LIBRARIES. Untuk informasi selengkapnya, lihat CHANGES.HTML. (Masalah 39378)
Perbaikan bug penting:
  • Skrip build untuk membuat semua toolchain di -O2 telah diperbaiki. Toolchain dalam rilis sebelumnya dibuat dengan salah tanpa pengoptimalan.
  • Skrip build telah diperbaiki yang secara tanpa syarat membuat Clang/llvm untuk MacOSX dalam 64-bit.
  • Error compiler internal GCC 4.6/4.7: gen_thumb_movhi_clobber at config/arm/arm.md:5832 telah diperbaiki. (Masalah 52732)
  • Masalah build di mana GCC/ARM 4.6/4.7 gagal menghubungkan kode menggunakan fungsi atomik bawaan 64-bit telah diperbaiki. (Masalah 41297)
  • Error ketidakcocokan penggunaan DIV linker GCC 4.7 telah diperbaiki. (Masalah Sourceware)
  • Error compiler internal GCC 4.7 build_data_member_initialization, at cp/semantics.c:5790 telah diperbaiki.
  • Error compiler internal GCC 4.7 redirect_eh_edge_1, at tree-eh.c:2214 telah diperbaiki. (Masalah 52909)
  • Segfault GCC 4.7 telah diperbaiki. (Masalah GCC)
  • Resolusi jam <chrono> telah diperbaiki dan steady_clock telah diaktifkan. (Masalah 39680)
  • Toolchain untuk mengaktifkan _GLIBCXX_HAS_GTHREADS untuk libstdc++ GCC 4.7 telah diperbaiki. (Masalah 41770, Masalah 41859)
  • Masalah terkait kode MXX/SSE X86 yang gagal dihubungkan karena posix_memalign tidak ada telah diperbaiki. (Perubahan 51872)
  • Kesalahan segmentasi GCC4.7/X86 pada i386.c, fungsi distance_non_agu_define_in_bb() telah diperbaiki. (Perubahan 50383)
  • GCC4.7/X86 telah diperbaiki untuk memulihkan perilaku cmov sebelumnya. (Masalah GCC)
  • Penanganan nilai NULL yang ditampilkan setlocale() pada libstdc++/GCC4.7 telah diperbaiki. (Masalah 46718)
  • Referensi runtime ld.gold yang tidak ditentukan untuk __exidx_start dan __exidx_start_end telah diperbaiki. (Perubahan 52134)
  • Error compiler internal Clang 3.1 saat menggunakan library Eigen telah diperbaiki. (Masalah 41246)
  • Error compiler internal Clang 3.1 yang menyertakan <chrono> dalam mode C++11 telah diperbaiki. (Masalah 39600)
  • Error compiler internal Clang 3.1 saat membuat kode objek untuk panggilan metode ke rvalue yang diinisialisasi secara seragam telah diperbaiki. (Masalah 41387)
  • Penyelarasan kembali tumpukan Clang 3.1/X86 telah diperbaiki. (Perubahan 52154)
  • Masalah dengan GNU Debugger (GDB) SIGILL saat melakukan debug pada Android 4.1.2 telah diperbaiki. (Masalah 40941)
  • Masalah GDB tidak dapat menetapkan titik henti sementara source:line saat simbol berisi jalur file panjang dan tidak langsung telah diperbaiki. (Masalah 42448)
  • read_program_header GDB untuk file MIPS PIE yang dapat dieksekusi telah diperbaiki. (Perubahan 49592)
  • Kesalahan segmentasi STLport dalam uncaught_exception() telah diperbaiki. (Perubahan 50236)
  • Error bus STLport dalam menangani pengecualian karena akses DW_EH_PE_udata2, DW_EH_PE_udata4, dan DW_EH_PE_udata8 yang tidak selaras telah diperbaiki.
  • Masalah rekursi tak terbatas Gabi++ dengan operator nothrow new[] telah diperbaiki. (Masalah 52833)
  • Kesalahan offset Gabi++ untuk pointer pengendali pengecualian telah diperbaiki. (Perubahan 53446)
  • Gabi++ bebas redundan pada objek pengecualian telah dihapus (Perubahan 53447)
Perbaikan bug lainnya:
  • Header NDK telah diperbaiki:
    • Definisi size_t, ssize_t, dan ptrdiff_t yang berlebihan telah dihapus.
    • Header fenv.h MIPS dan ARM telah diperbaiki.
    • stddef.h telah diperbaiki agar tidak menetapkan ulang offsetof karena sudah ada dalam toolchain.
    • elf.h telah diperbaiki untuk memuat Elf32_auxv_t dan Elf64_auxv_t. (Masalah 38441)
    • Definisi C++ #ifdef dalam file header OpenSLES_AndroidConfiguration.h telah diperbaiki. (Masalah 53163)
  • STLport telah diperbaiki untuk membatalkan proses setelah error kehabisan memori, daripada keluar secara otomatis.
  • Header sistem dan Gabi++ telah diperbaiki agar dapat dikompilasi dengan API level 8 dan yang lebih rendah.
  • cpufeatures telah diperbaiki agar tidak mengurai /proc/self/auxv. (Masalah 43055)
  • ld.gold telah diperbaiki agar tidak bergantung pada libstdc++ host, dan pada platform Windows, agar tidak bergantung pada library libgcc_sjlj_1.dll.
  • Clang 3.1 yang memberikan daftar register yang tidak konsisten dalam .vsave dan menyalahi assembler telah diperbaiki. (Perubahan 49930)
  • Clang 3.1 telah diperbaiki agar dapat mengompilasi libgabi++ dan lulus pengujian test-stlport untuk target build MIPS. (Perubahan 51961)
  • Clang 3.1 telah diperbaiki agar hanya mengaktifkan pengecualian secara default untuk C++, bukan untuk C.
  • Beberapa masalah di Clang 3.1 telah diperbaiki agar dapat lulus dalam sebagian besar uji pengecualian GNU.
  • Skrip clang dan clang++ dalam compiler NDK mandiri telah diperbaiki untuk mendeteksi -cc1 dan agar tidak menentukan -target saat ditemukan.
  • ndk-build telah diperbaiki untuk mengamati NDK_APP_OUT yang ditetapkan dalam Application.mk.
  • libc.so dan lib.a X86 yang tidak menyertakan fungsi sigsetjmp dan siglongjmp yang sebagaimana dinyatakan dalam setjmp.h telah diperbaiki. (Masalah 19851)
  • Libstdc++ GCC 4.4.3/4.6/4.7 telah di-patch agar berfungsi dengan Clang di C++ 11. (Masalah Clang)
  • Jalur cygwin dalam argumen yang diteruskan ke HOST_AWK telah diperbaiki.
  • Peringatan skrip ndk-build di Windows saat dijalankan dari direktori JNI project telah diperbaiki. (Masalah 40192)
  • Masalah skrip ndk-build yang tidak dibuat jika makefile memiliki spasi kosong di akhir definisi LOCAL_PATH telah diperbaiki. (Masalah 42841)
Perubahan lainnya:
  • Dukungan threading telah diaktifkan di toolchain GCC/MIPS.
  • Helper penanganan pengecualian GCC __cxa_begin_cleanup dan __cxa_type_match telah diupdate agar memiliki visibilitas default dari visibilitas yang sebelumnya tersembunyi di GNU libstdc++. Untuk informasi selengkapnya, lihat CHANGES.HTML.
  • Skrip build telah diupdate sehingga library statis Gabi++ dan STLport sekarang dibuat dengan visibilitas tersembunyi, kecuali untuk helper penanganan pengecualian.
  • Build telah diupdate sehingga STLport dibuat untuk ARM dalam mode Thumb.
  • Dukungan untuk std::set_new_handler dalam Gabi++ telah ditambahkan. (Masalah 52805)
  • Panggilan sistem FUTEX di GNU libstdc++ telah diaktifkan.
  • ndk-build telah diupdate sehingga tidak lagi menyalin library statis bawaan ke direktori obj/local/<abi>/ project. (Masalah 40302)
  • __ARM_ARCH_5*__ telah dihapus dari skrip toolchains/*/setup.mk ARM. (Masalah 21132)
  • Library GNU libstdc++ tambahan telah dibuat di thumb untuk ARM.
  • Petunjuk madd/msub/nmadd/nmsub/recip/rsqrt floating point MIPS telah diaktifkan dengan FPU 32-bit.
  • Pengoptimal loop grafit telah diaktifkan di GCC 4.6 dan 4.7 untuk memungkinkan lebih banyak pengoptimalan: -fgraphite, -fgraphite-identity, -floop-block, -floop-flatten, -floop-interchange, -floop-strip-mine, -floop-parallelize-all, dan -ftree-loop-linear. (info)
  • polly untuk Clang 3.1 telah diaktifkan di host Linux dan Max OS X 32-bit yang menganalisis dan mengoptimalkan akses memori. (info)
  • -flto telah diaktifkan di GCC 4.7, 4.6, Clang 3.2, dan Clang 3.1 di Linux (Clang LTO melalui LLVMgold.so). Target compiler MIPS tidak didukung karena ld.gold tidak tersedia.
  • --plugin dan --plugin-opt telah diaktifkan untuk ld.gold di GCC 4.6/4.7.
  • --text-reorder telah diaktifkan untuk ld.gold di GCC 4.7.
  • GNU libstdc++ telah dikonfigurasi dengan _GLIBCXX_USE_C99_MATH yang tidak menentukan skrip isinf pada header bionic. Untuk informasi selengkapnya, lihat CHANGES.html.
  • APP_LDFLAGS telah ditambahkan ke skrip build. Untuk informasi selengkapnya, lihat ANDROID-MK.html.
  • Skrip build telah diupdate agar NDK_LOG=0 dapat menonaktifkan NDK_LOG.
  • Skrip build telah diupdate agar NDK_HOST_32BIT=0 dapat menonaktifkan toolchain 32-bit lingkungan developer host.
  • Flag GCC/X86 default -march= dan -mtune= telah diubah dari pentiumpro dan generic menjadi i686 dan atom.
  • Skrip build toolchain telah disempurnakan:
    • Kondisi race dalam build-gcc.sh telah diperbaiki untuk jenis build mingw yang mencegah banyak pemrosesan build paralel.
    • build-gabi++.sh dan build-stlport.sh telah diupdate sehingga kini dapat dijalankan dari paket NDK. (Masalah 52835)
    • run-tests.sh telah diperbaiki di koleksi utilitas MSys.
    • Dukungan toolchain host 64-bit dan Canadian Cross build telah disempurnakan.
    • Skrip build-mingw64-toolchain.sh telah diupdate ke versi yang lebih baru.
    • Menambahkan opsi untuk membangun libgnustl_static.a dan stlport_static.a tanpa visibilitas tersembunyi.
Perubahan penting:
  • Compiler GNU Compiler Collection (GCC) 4.7 ditambahkan ke NDK. Compiler GCC 4.6 masih menjadi default, jadi Anda harus mengaktifkan versi baru secara eksplisit, sebagai berikut:
    • Untuk ndk-build, ekspor variabel NDK_TOOLCHAIN_VERSION=4.7 atau tambahkan ke Application.mk.
    • Untuk build mandiri, tambahkan opsi --toolchain= ke make-standalone-toolchain.sh, misalnya:
      --toolchain=arm-linux-androideabi-4.7

    Catatan: Fitur ini bersifat eksperimental. Silakan mencobanya dan laporkan masalah apa pun.

  • Dukungan pengecualian stlport telah ditambahkan melalui gabi++. Ingat bahwa gabi++ baru bergantung pada dlopen dan kode terkait, artinya:
    • Anda tidak dapat lagi membuat file executable statis menggunakan opsi -static atau menyertakan libstlport_static.a menggunakan APP_STL := stlport_static. (Anda masih dapat menggunakan opsi -static dengan toolchain mandiri.) Mengompilasi file executable dinamis menggunakan include $(BUILD_EXECUTABLE) tetap dapat dilakukan, karena compiler otomatis menambahkan opsi -ldl.
    • Jika project Anda ditautkan menggunakan -nostdlib dan {-Wl,--no-undefined}, Anda harus menyertakan opsi -ldl secara manual.
    Untuk informasi selengkapnya, lihat CPLUSPLUS-SUPPORT.html.

    Catatan: Fitur ini bersifat eksperimental dan berfungsi lebih baik dengan compiler GCC 4.6/4.7 daripada GCC 4.4.3 atau Clang 3.1. Silakan mencobanya dan laporkan masalah apa pun.

  • Opsi -mstack-protector-guard= untuk x86 telah ditambahkan untuk memilih antara jalur default global yang kompatibel dengan library Android C lama (bionik) dan jalur tls baru (%gs:20) untuk -fstack-protector, -fstack-protector-all, dan -fstack-protector-strong menggunakan compiler GCC 4.6 dan yang lebih baru.

    Catatan: Setelan -mstack-protector-guard saja tidak akan mengaktifkan opsi -fstack-protector* apa pun.

  • Fungsi android_setCpu() telah ditambahkan ke sources/android/cpufeatures/cpu-features.c untuk digunakan saat deteksi otomatis melalui /proc tidak dimungkinkan di Android 4.1 dan yang lebih tinggi. (Masalah Chromium 164154)
Perbaikan bug penting:
  • Pembuatan ulang file objek yang tidak perlu saat menggunakan skrip ndk-buildtelah diperbaiki. (Masalah 39810)
  • Kegagalan linker dengan rilis NDK 8c untuk Mac OS X 10.6.x yang menghasilkan error berikut telah diperbaiki:
    dyld: lazy symbol binding failed: Symbol not found: _memmem
    Referenced from: ...../arm-linux-androideabi/bin/ld
    Expected in: /usr/lib/libSystem.B.dylib
    Masalah ini terjadi karena membangun di Mac OS X 10.7, yang menghasilkan biner yang tidak kompatibel dengan Mac OS 10.6.x dan NDK.
  • Opsi -x c++ telah dihapus dari skrip build mandiri Clang++. (Masalah 39089)
  • Masalah penggunaan opsi NDK_TOOLCHAIN_VERSION=clang3.1 di Cygwin telah diperbaiki. (Masalah 39585)
  • Skrip make-standalone-toolchain.sh telah diperbaiki untuk memungkinkan pembuatan toolchain mandiri menggunakan lingkungan Cygwin atau MinGW. Toolchain yang dihasilkan dapat digunakan di lingkungan Cygwin, MingGW, atau CMD.exe. (Masalah 39915, Masalah 39585)
  • Opsi SL_IID_ANDROIDBUFFERQUEUESOURCE yang hilang pada build android-14 telah ditambahkan untuk ARM dan X86. (Masalah 40625)
  • Deteksi CPU x86 telah diperbaiki untuk fitur ANDROID_CPU_X86_FEATURE_MOVBE. (Masalah 39317)
  • Masalah yang mencegah Standard Template Library (STL) menggunakan sumber C++ yang tidak memiliki ekstensi file .cpp telah diperbaiki.
  • Error compiler internal GCC 4.6 ARM at reload1.c:1061 telah diperbaiki. (Masalah 20862)
  • Error compiler internal GCC 4.4.3 at emit-rtl.c:1954 telah diperbaiki. (Masalah 22336)
  • Error compiler internal GCC 4.4.3 at postreload.c:396 telah diperbaiki. (Masalah 22345)
  • Masalah dengan GCC 4.6/4.7 yang melewatkan fungsi lambda telah diperbaiki. (Masalah 35933)
Perbaikan bug lainnya:
  • Perbaikan file header NDK:
    • __WINT_TYPE__ dan wint_t telah diperbaiki agar menjadi jenis yang sama.
    • Kesalahan ketik pada android/bitmap.h telah diperbaiki. (Masalah 15134)
    • Kesalahan ketik dalam errno.h telah diperbaiki.
    • Pemeriksaan keberadaan __STDC_VERSION__ dalam sys/cdefs.h telah ditambahkan. (Masalah 14627)
    • Header pada byteswap.h dan dirent.h telah ditata ulang.
    • limits.h telah diperbaiki untuk menyertakan page.h yang menyediakan setelan PAGE_SIZE. (Masalah 39983)
    • Jenis nilai yang ditampilkan glGetAttribLocation() dan glGetUniformLocation() telah diperbaiki dari int ke GLint.
    • Konstanta __BYTE_ORDER untuk build x86 telah diperbaiki. (Masalah 39824)
  • Skrip ndk-build telah diperbaiki agar tidak menimpa -Os dengan -O2 untuk build ARM.
  • Skrip build telah diperbaiki untuk memungkinkan penimpaan setelan HOST_AWK, HOST_SED, dan HOST_MAKE.
  • Masalah telah diperbaiki untuk ld.gold pada build fsck_msdos yang menautkan objek yang dibuat dengan compiler Intel C/C++ (ICC).
  • Dukungan EHABI ARM telah diperbaiki di Clang agar sesuai dengan spesifikasi.
  • GNU Debugger (GDB) telah diperbaiki guna mempersingkat waktu yang dihabiskan untuk menjalankan peta link target selama peristiwa solib. (Masalah 38402)
  • File libgcc.a yang hilang saat menautkan library bersama telah diperbaiki.
Perubahan lainnya:
  • Fungsi atomik bawaan 64-bit telah di-backport untuk ARM ke GCC 4.6.
  • Dokumentasi telah ditambahkan untuk latensi output audio, bersama dengan dokumentasi dan perbaikan lainnya.
  • Build debug dengan Clang telah diperbaiki sehingga fungsi non-void sekarang memunculkan sinyal SIGILL untuk jalur yang tidak memiliki pernyataan return.
  • make-standalone-toolchain.sh telah diupdate untuk menerima akhiran -clang3.1 yang setara dengan menambahkan --llvm-version=3.1 ke toolchain GCC 4.6.
  • URL laporan bug GCC dan Clang telah diupdate ke: https://source.android.com/source/report-bug s.html
  • Dukungan ELF ARM telah ditambahkan ke llvm-objdump.
  • Peringatan treating c input as c++ telah disembunyikan untuk build Clang.
  • Build telah diupdate sehingga hanya libiberty.a versi 32-bit yang akan dibuat dan ditempatkan di lib32/.
Perubahan penting:
  • Compiler Clang 3.1 telah ditambahkan ke NDK. GNU Compiler Collection (GCC) 4.6 masih menjadi default; Anda harus mengaktifkan opsi compiler Clang secara eksplisit sebagai berikut:
    • Untuk ndk-build, ekspor NDK_TOOLCHAIN_VERSION=clang3.1 atau tambahkan setelan variabel lingkungan ini ke Application.mk.
    • Untuk build mandiri, tambahkan --llvm-version=3.1 ke make-standalone-toolchain.sh dan ganti CC dan CXX di makefile Anda dengan <tool-path>/bin/clang dan <tool-path>/bin/clang++. Untuk detailnya, lihat STANDALONE-TOOLCHAIN.html.

    Catatan: Fitur ini bersifat eksperimental. Silakan mencobanya dan laporkan masalah apa pun.

  • Gold linker ld.gold telah ditambahkan untuk toolchain Windows. Gold linker juga merupakan default untuk ARM dan X86 pada semua host. Anda dapat menggantinya untuk menggunakan linker ld.bfd dengan menambahkan LOCAL_LDFLAGS += -fuse-ld=bfd ke Android.mk, atau dengan meneruskan -fuse-ld=bfd ke command line g++/clang++ yang melakukan penautan.
  • Pemeriksaan spasi di jalur NDK telah ditambahkan ke skrip ndk-build[.cmd] dan ndk-gdb, untuk mencegah error build yang sulit didiagnosis.
  • Perubahan berikut dibuat untuk penanganan level API:
    • Logika build telah dimodifikasi sehingga project yang menetapkan android-10 hingga android-13 pada APP_PLATFORM, project.properties atau default.properties terhubung dengan android-9, bukan android-14.
    • Build telah diupdate sehingga file yang dapat dieksekusi yang menggunakan android-16 (Jelly Bean) atau yang lebih tinggi dikompilasi dengan opsi -fPIE untuk position-independent executables (PIE). Opsi APP_PIE baru memungkinkan Anda untuk mengontrol perilaku ini. Untuk lebih detailnya, lihat APPLICATION-MK.html.

      Catatan: Semua API di atas level 14 tetap terhubung dengan platforms/android-14, dan tidak ada platforms/android-N baru yang ditambahkan.

    • ndk-build telah dimodifikasi untuk memberikan peringatan jika API level yang disesuaikan lebih besar daripada android:minSdkVersion dalam AndroidManifest.xml project.
  • Library helper cpu-features telah diupdate untuk menyertakan lebih banyak fitur khusus ARM. Untuk lebih detailnya, lihat sources/android/cpufeatures/cpu-features.h.
  • Long double pada platform X86 telah dimodifikasi menjadi 8 byte. Jenis data ini sekarang berukuran sama dengan double, tetapi masih diperlakukan sebagai jenis berbeda.
  • Build telah diupdate untuk APP_ABI=armeabi-v7a:
    • Jenis build ini telah dimodifikasi untuk meneruskan parameter -march=armv7-a ke linker. Perubahan ini memastikan bahwa library khusus v7 dan crt*.o ditautkan dengan benar.
    • -mfpu=vfpv3-d16 telah ditambahkan ke ndk-build, bukan ke opsi -mfpu=vfp yang digunakan dalam rilis sebelumnya.
Perbaikan bug penting:
  • Masalah toolchain mandiri yang tidak dapat diakses oleh sebagian pengguna karena menjalankan make-standalone-toolchain.sh dengan hak istimewa root telah diperbaiki. (Masalah 35279)
    • Semua file dan executable dalam paket rilis NDK ini ditetapkan untuk memiliki izin baca dan jalankan untuk semua.
    • Kepemilikan/grup libstdc++.a kini dipertahankan saat disalin.
  • \r berlebihan telah dihapus dari echo.exe bawaan Windows. \r berlebihan menyebabkan gdb.setup gagal dalam GNU Debugger (GDB) karena salah menjadi bagian dari jalur tersebut. (Masalah 36054)
  • Build paralel Windows yang terkadang gagal akibat masalah pengaturan waktu dalam implementasi host-mkdir telah diperbaiki. (Masalah 25875)
  • libstdc++ GCC 4.4.3 GNU telah diperbaiki agar tidak menggabungkan nama typeinfo secara default. Untuk detail selengkapnya, lihat toolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo. (Masalah 22165)
  • Masalah pada konteks null pada cp/mangle.c::write_unscoped_name GCC 4.6, yakni GCC dapat mengalami error jika konteksnya adalah null dan dihilangkan referensinya dalam TREE_CODE, telah diperbaiki.
  • Error GCC 4.4.3 pada definisi jenis khusus NEON ARM untuk float telah diperbaiki. (Masalah 34613)
  • Kesalahan Implementasi _IteWrapper::operator*() internal STLport, yakni ditampilkannya lokasi stack usang yang menyimpan nilai yang dihilangkan referensinya sehingga menyebabkan error runtime, telah diperbaiki. (Masalah 38630)
  • Perbaikan khusus ARM:
    • g++ ARM GCC 4.4.3/4.6 telah diperbaiki agar tidak memberi peringatan kerusakan <va_list> diubah di GCC 4.4. Solusi dengan menggunakan tombol -Wno-psabi untuk menghindari peringatan ini tidak diperlukan lagi.
    • Masalah saat project dengan akhiran .arm atau .neon di LOCAL_SRC_FILES juga menggunakan APP_STL telah diperbaiki. Dengan APP_STL, skrip ndk-build akan menelusuri file C++ di LOCAL_SRC_FILES sebelum menambahkan jalur header/lib STL ke kompilasi. ndk-build telah dimodifikasi untuk memfilter akhiran .arm dan .neon sebelum penelusuran; jika tidak, item dalam LOCAL_SRC_FILES seperti myfile.cpp.arm.neon tidak akan dikompilasi sebagai kode C++.
    • binutils-2.21/ld.bfd telah diperbaiki agar dapat menautkan objek dari binutils lama yang tidak memiliki tag_FP_arch, yang menghasilkan pesan error pernyataan gagal dalam GNU Binutils. (Masalah 35209)
    • Peringatan Unknown EABI object attribute 44 saat binutils-2.19/ld menautkan objek bawaan dengan binutils-2.21 yang lebih baru telah dihapus.
    • Masalah pada -mthumb dan -march=armv7-a dalam kompilasi stdc++ GNU telah diperbaiki, dengan memodifikasi make-standalone-toolchain.sh agar mengisi headers/libs dalam subdirektori armv7-a/thumb. (Masalah 35616)
    • Error Relokasi R_ARM_THM_CALL tidak terselesaikan telah diperbaiki. (Masalah 35342)
    • Error compiler internal pada reload1.c:3633 telah diperbaiki, yang disebabkan oleh back-end ARM yang mengharapkan jenis operand yang salah saat sign-extend dari char. (Masalah GCC 50099)
    • Error compiler internal dengan jumlah shift negatif telah diperbaiki. (Masalah GCC)
  • -fstack-protector untuk X86 telah diperbaiki, yang juga merupakan default untuk target ABI ndk-build x86.
  • Perbaikan khusus MIPS:
    • Endian-ness STLport telah diperbaiki dengan menetapkan _STLP_LITTLE_ENDIAN ke 1 saat mengompilasi libstlport_* MIPS.
    • Masalah __builtin_unreachable GCC saat mengompilasi LLVM telah diperbaiki. (Masalah GCC 54369)
    • Perbaikan untuk proses kompilasi cc1 yang menggunakan CPU 100% telah di-backport. (Masalah GCC 50380)
  • Perbaikan khusus GNU Debugger:
    • Dukungan Python dalam gdb-7.x pada build telah dinonaktifkan; jika tidak, fungsi konfigurasi gdb-7.x dapat mengambil versi Python apa pun yang tersedia di host dan membangun gdb dengan dependensi yang terikat kuat pada versi Python tertentu. (Masalah 36120)
    • ndk-gdb telah diperbaiki saat APP_ABI berisi all dan tidak cocok dengan arsitektur mana pun yang dikenal. (Masalah 35392)
    • Dukungan nama jalur Windows telah diperbaiki, dengan mempertahankan karakter : jika sepertinya karakter tersebut dapat menjadi bagian dari jalur Windows yang dimulai dengan huruf drive. (Masalah GDB 12843)
    • Penambahan dukungan titik henti sementara hardware untuk ARM di gdbserver telah diperbaiki. (Masalah GDB)
    • Perbaikan untuk hanya membaca solibs terbaru jika linker-nya konsisten telah ditambahkan. Perubahan ini mempercepat penanganan peristiwa solib. (Masalah 37677)
    • Perbaikan untuk membuat upaya berulang guna menemukan titik henti sementara solib telah ditambahkan. Sekarang, GDB akan mencoba kembali enable_break() selama setiap panggilan ke svr4_current_sos() sampai berhasil. (Perubahan 43563)
    • Masalah saat gdb tidak berhenti pada titik henti sementara yang ditempatkan di library dlopen-ed telah diperbaiki. (Masalah 34856)
    • SIGILL dalam linker dinamis saat memanggil dlopen() telah diperbaiki, dalam sistem yang menghilangkan /system/bin/linker dari simbol dan menerapkan rtld_db_dlactivity() sebagai Thumb, karena tidak mempertahankan LSB sym_addr. (Masalah 37147)
Perbaikan bug lainnya:
  • Header NDK telah diperbaiki:
    • Kode arch-mips/include/asm/* yang sebelumnya keliru dihapus dari kernel asli telah diperbaiki. (Perubahan 43335)
    • Data anggota struktur __unused telah diganti dengan __linux_unused di linux/sysctl.h dan linux/icmp.h untuk menghindari konflik dengan #define __unused di sys/cdefs.h.
    • fenv.h telah diperbaiki untuk fungsi C tertutup dengan __BEGIN_DECLS dan __END_DECLS.
    • Fungsi yang tidak diterapkan di malloc.h telah dihapus.
    • Definisi stdint.h uint64_t untuk compiler ANSI telah diperbaiki. (Masalah 1952)
    • Makro preprosesor di <arch>/include/machine/* telah diperbaiki.
    • link.h untuk MIPS telah diganti dengan versi baru yang mendukung semua platform.
    • linux-unistd.h dihapus
    • Makro khusus GLibc LONG_LONG_MIN, LONG_LONG_MAX, dan ULONG_LONG_MAX telah dipindahkan dari <pthread.h> ke <limits.h>.
  • Buffer overflow di ndk-stack-parser telah diperbaiki.
  • _STLP_USE_EXCEPTIONS telah diperbaiki, jika tidak ditentukan, untuk menghilangkan semua pernyataan dan penggunaan __Named_exception. Kompilasi dan penggunaan setelan __Named_exception hanya terjadi jika STLport diizinkan untuk menggunakan pengecualian.
  • Pembuatan paket NDK khusus Linux yang tidak disertai pembuatan kode Windows telah diperbaiki. Gunakan setelan berikut untuk menjalankan jenis build ini:
    ./build/tools/make-release.sh --force --systems=linux-x86
  • libc.so telah diperbaiki agar tidak mengekspor atexit() dan __do_handler. Simbol-simbol ini diekspor untuk build ARM oleh versi sistem library C untuk mendukung library native lama. NDK yang dihasilkan tidak boleh mereferensikan simbol tersebut secara langsung. Sebagai gantinya, setiap library bersama atau executable harus menyematkan versinya sendiri dari simbol tersebut, yang disediakan oleh crtbegin_*.o.

    Jika project Anda ditautkan dengan opsi -nostdlib -Wl,--no-undefined, Anda harus memberikan __dso_handle Anda sendiri karena dalam kasus ini crtbegin_so.o tidak ditautkan. isi __dso_handle tidak masalah, seperti yang ditunjukkan pada kode contoh berikut:

    extern "C" {
     
    extern void *__dso_handle __attribute__((__visibility__ ("hidden")));
     
    void *__dso_handle;
    }
  • Dekoder simbol untuk ARM yang digunakan di objdump untuk entri plt telah diperbaiki agar menghasilkan bentuk function@plt yang lebih mudah dibaca.
  • Simbol-simbil berikut, yang diperkenalkan di GCC 4.6 libgcc.a, telah dihapus dari library libc.so platform X86: __aeabi_idiv0, __aeabi_ldiv0, __aeabi_unwind_cpp_pr1, dan __aeabi_unwind_cpp_pr2.
  • .ctors, .dtors, dan .eh_frame yang tidak digunakan telah dihapus dalam crt*_so.S MIPS.
  • ndk-gdb telah diupdate sehingga hanya menerima baris terakhir output untuk ndk-build DUMP_XXXX. Perubahan ini memastikan jika Application.mk atau Android.mk mencetak sesuatu dengan sintaks $(info ...), itu tidak akan disertakan dalam hasil DUMP_XXXX. (Info selengkapnya)
Perubahan lainnya:
  • Header arch-x86 dan arch-mips telah dihapus dari platforms/android-[3,4,5,8]. Header tersebut tidak lengkap, karena baik ABI X86 maupun MIPS hanya didukung di API 9 atau yang lebih tinggi.
  • C++ yang disederhanakan menyertakan lokasi dalam paket mandiri, seperti yang ditunjukkan di bawah ini. (Masalah 35279)
    <path>/arm-linux-androideabi/include/c++/4.6.x-google
      to:
    <path>/include/c++/4.6/
    
  • ndk-build telah diperbaiki agar mengenali lebih banyak ekstensi file C++ secara default: .cc .cp .cxx .cpp .CPP .c++ .C. Anda tetap dapat menggunakan LOCAL_CPP_EXTENSION untuk menimpa setelan ekstensi ini.
  • Masalah pada samples/san-angeles yang menyebabkan layar hitam atau frame macet saat diluncurkan kembali telah diperbaiki.
  • API yang tidak digunakan lagi dalam sampel NDK telah diganti. (Masalah 20017)
    • hello-gl2 dari Android-5 ke android-7
    • native-activity dari Android-9 hingga Android-10
    • native-audio dari Android-9 hingga Android-10
    • native-plasma dari Android-9 hingga Android-10
  • Branding baru untuk file Android yang dapat dieksekusi telah ditambahkan dengan skema yang lebih sederhana di bagian .note.android.ident (ditentukan di crtbegin_static/dynamic.o) sehingga alat proses debug dapat bertindak dengan sesuai. Anggota dan nilai struktur ditentukan sebagai berikut:
    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 */
    }

    Opsi branding sebelumnya di bagian .note.ABI-tag sudah tidak digunakan lagi.

  • Skrip baru run-tests-all.sh yang memanggil run-tests.sh dan standalone/run.sh dengan berbagai kondisi telah ditambahkan. Skrip run-tests.sh berjalan tanpa opsi --abi, dan ditingkatkan untuk mengompilasi sebagian besar pengujian untuk semua ABI yang didukung dan berjalan pada semua perangkat yang terpasang.

Fitur utama rilis ini adalah toolchain GNU Compiler Collection (GCC) 4.6 dan GNU Debugger (GDB) 7.3.x baru yang menambahkan dukungan proses debug untuk image sistem Android 4.1 (API Level 16).

Perbaikan bug penting:
  • Masalah LOCAL_SHORT_COMMANDS pada lingkungan Mac OS, Windows Cygwin untuk library statis telah diperbaiki. Pembuatan file daftar lebih cepat, dan tidak dibuat ulang untuk menghindari pembuatan kembali project berulang.
  • Beberapa masalah di ndk-gdb telah diperbaiki:
    • Alat untuk meneruskan flag -e, -d, dan -s ke adb secara lebih konsisten telah diupdate.
    • Fitur untuk menerima nama seri perangkat yang berisi spasi telah diupdate.
    • Alat untuk mengambil informasi /system/bin/link telah diupdate, sehingga gdb pada host dapat menetapkan titik henti sementara di __dl_rtld_db_dlactivity dan mewaspadai aktivitas linker (misalnya, memindai ulang simbol solib saat dlopen() dipanggil).
  • ndk-build clean pada Windows telah diperbaiki, yang sebelumnya gagal menghapus ./libs/*/lib*.so.
  • ndk-build.cmd telah diperbaiki untuk menampilkan ERRORLEVEL bukan nol saat make gagal.
  • libc.so telah diperbaiki untuk menghentikan salah ekspor simbol __exidx_start dan __exidx_end.
  • SEGV telah diperbaiki, saat melepaskan tumpukan melewati __libc_init untuk ARM dan MIPS.
Perubahan penting:
  • Toolchain GCC 4.6 (binutils 2.21 dengan gold dan GDB 7.3.x) telah ditambahkan untuk berdampingan dengan toolchain GCC 4.4.3 asli (binutils 2.19 dan GDB 6.6).
    • GCC 4.6 sekarang adalah toolchain default. Anda dapat menetapkan NDK_TOOLCHAIN_VERSION=4.4.3 di Application.mk untuk memilih toolchain asli.
    • Dukungan untuk linker gold hanya tersedia untuk arsitektur ARM dan x86 pada host Linux dan Mac OS. Dukungan ini dinonaktifkan secara default. Tambahkan LOCAL_LDLIBS += -fuse-ld=gold pada Android.mk untuk mengaktifkannya.
    • Program yang dikompilasi dengan -fPIE memerlukan GDB baru untuk proses debug, yang mencakup biner dalam image sistem Android 4.1 (API Level 16).
    • Alat ld binutils 2.21 berisi perbaikan yang di-backport dari versi 2.22:
      • ld --gc-sections yang salah mempertahankan referensi zombi ke library eksternal telah diperbaiki. (info selengkapnya).
      • Perintah ARM strip telah diperbaiki untuk mempertahankan p_align dan p_flags yang asli di bagian GNU_RELRO jika valid. Tanpa perbaikan ini, program yang dibuat dengan -fPIE tidak dapat di-debug. (info selengkapnya)
    • Pengoptimalan sincos() dinonaktifkan untuk kompatibilitas dengan platform lama.
  • Opsi build telah diupdate untuk mengaktifkan Never eXecute (NX) bit dan perlindungan relro/bind_now secara default:
    • --noexecstack ditambahkan ke assembler dan -z noexecstack ditambahkan ke linker yang memberikan perlindungan NX terhadap serangan buffer overflow dengan mengaktifkan NX bit pada stack dan heap.
    • -z relro dan -z now telah ditambahkan ke linker untuk hardening bagian data internal setelah menautkan untuk mencegah kerentanan keamanan yang disebabkan oleh kerusakan memori. (info selengkapnya: 1, 2)
    • Fitur-fitur ini dapat dinonaktifkan menggunakan opsi berikut:
      1. Nonaktifkan perlindungan NX dengan menetapkan opsi --execstack untuk assembler dan -z execstack untuk linker.
      2. Nonaktifkan hardening data internal dengan menetapkan opsi -z norelro dan -z lazy untuk linker.
      3. Nonaktifkan perlindungan ini pada jni/Android.mk NDK dengan menetapkan opsi berikut:
        LOCAL_DISABLE_NO_EXECUTE=true  # disable "--noexecstack" and "-z noexecstack"
        DISABLE_RELRO=true             # disable "-z relro" and "-z now"
        

      Lihat docs/ANDROID-MK.html untuk mengetahui detail selengkapnya.

  • Branding untuk file Android yang dapat dieksekusi telah ditambahkan pada bagian .note.ABI-tag (dalam crtbegin_static/dynamic.o) sehingga fitur proses debug dapat bertindak dengan sesuai. Anggota dan nilai struktur ditentukan sebagai berikut:
    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 */
    }
Perbaikan bug lainnya:
  • Relokasi mips-linux-gnu yang terpotong telah diperbaiki agar sesuai dengan masalah R_MIPS_TLS_LDM. (info selengkapnya)
  • Segfault alat ld saat menggunakan --gc-sections telah diperbaiki. (info selengkapnya)
  • Masalah penghitungan MIPS GOT_PAGE telah diperbaiki. (info selengkapnya)
  • Link simbol peringatan ikuti untuk mips_elf_count_got_symbols telah diperbaiki.
  • Link simbol peringatan ikuti untuk mips_elf_allocate_lazy_stub telah diperbaiki.
  • MIPS .dynamic telah dipindahkan ke segmen data, sehingga dapat ditulis.
  • Nilai hard code untuk simbol telah diganti dengan ukuran segmen yang benar untuk MIPS.
  • Opsi -mno-shared telah dihapus dari setelan default di toolchain MIPS. Setelan default untuk toolchain Android adalah -fPIC (atau -fpic jika didukung). Jika Anda tidak secara eksplisit menentukan -mshared, -fpic, -fPIC, -fpie, atau -fPIE, compiler MIPS menambahkan -mno-shared yang menonaktifkan PIC. Dalam kasus ini, compiler telah diperbaiki agar tidak menambahkan -mno-shared.
  • Nama paket yang salah dalam sampel hello-jni dan two-libs telah diperbaiki sehingga project tests di bawahnya dapat dikompilasi.
Perubahan Lainnya:
  • Lokasi biner telah diubah:
    • gdbserver telah dipindahkan dari toolchain/<arch-os-ver>/prebuilt/gdbserver ke prebuilt/android-<arch>/gdbserver/gdbserver.
    • Nama awalan toolchain x86 telah diganti dari i686-android-linux- menjadi i686-linux-android-.
    • sources/cxx-stl/gnu-libstdc++/include dan lib telah dipindahkan ke sources/cxx-stl/gnu-libstdc++/4.6 saat dikompilasi dengan GCC 4.6, atau sources/cxx-stl/gnu-libstdc++/4.4.3 saat dikompilasi dengan GCC 4.4.3.
    • libbfd.a dan libintl.a telah dipindahkan dari lib/ ke lib32/.
  • Berbagai skrip telah ditambahkan dan ditingkatkan di toolchain NDK rebuild dan pengujian:
    • build-mingw64-toolchain.sh telah ditambahkan untuk membuat toolchain yang di-host oleh Linux yang menghasilkan file executable Win32 dan Win64.
    • Kecepatan download-toolchain-sources.sh telah ditingkatkan menggunakan perintah clone dan hanya menggunakan checkout untuk direktori yang diperlukan untuk membuat biner toolchain NDK.
    • Skrip build-host-gcc.sh dan build-host-gdb.sh telah ditambahkan.
    • tests/check-release.sh telah ditambahkan untuk memeriksa konten direktori penginstalan NDK tertentu, atau paket NDK yang ada.
    • Pengujian mandiri tests/standalone/run.sh telah ditulis ulang.
  • Header if_dl.h dari semua platform dan arsitektur telah dihapus. Elemen AF_LINK dan sockaddr_dl yang dideskripsikannya berlaku khusus untuk BSD (artinya, elemen tersebut tidak ada di Linux).

Rilis NDK ini mencakup dukungan untuk MIPS ABI dan beberapa perbaikan tambahan.

Fitur baru:
  • Dukungan telah ditambahkan untuk MIPS ABI, yang memungkinkan Anda membuat kode mesin yang berjalan pada perangkat Android berbasis MIPS yang kompatibel. Fitur utama MIPS mencakup toolchain, header sistem, library, dan dukungan proses debug khusus untuk MIPS. Untuk detail selengkapnya terkait dukungan MIPS, lihat docs/CPU-MIPS.html di paket NDK.

    Secara default, kode dibuat untuk perangkat berbasis ARM. Anda dapat menambahkan mips ke definisi APP_ABI di file Application.mk untuk membuat platform MIPS. Misalnya, baris berikut menginstruksikan ndk-build untuk membuat kode untuk tiga ABI berbeda:

    APP_ABI := armeabi armeabi-v7a mips

    Kecuali Anda bergantung pada sumber assembly khusus arsitektur, seperti kode assembly ARM, Anda tidak perlu mengunakan file Android.mk untuk membuat kode mesin MIPS.

  • Anda dapat membuat toolchain MIPS mandiri menggunakan opsi --arch=mips saat memanggil make-standalone-toolchain.sh. Lihat docs/STANDALONE-TOOLCHAIN.html untuk detail selengkapnya.

Catatan: Untuk memastikan bahwa aplikasi Anda tersedia bagi pengguna hanya jika perangkat mereka mampu menjalankannya, Google Play memfilter aplikasi berdasarkan informasi kumpulan petunjuk yang disertakan dalam aplikasi. Anda tidak perlu melakukan apa pun untuk mengaktifkan pemfilteran. Selain itu, sistem Android itu sendiri juga memeriksa aplikasi Anda pada waktu penginstalan dan mengizinkan penginstalan untuk dilanjutkan hanya jika aplikasi menyediakan library yang dikompilasi untuk arsitektur CPU perangkat.

Perbaikan bug penting:
  • Kesalahan ketik dalam penerapan GAbi++, yakni hasil dynamic_cast<D>(b) objek class dasar b ke class turunan D keliru disesuaikan dengan arah berlawanan dari class dasar, telah diperbaiki. (Masalah 28721)
  • Masalah make-standalone-toolchain.sh gagal menyalin libsupc++.* telah diperbaiki.
Perbaikan bug lainnya:
  • ndk-build.cmd telah diperbaiki untuk memastikan bahwa ndk-build.cmd berfungsi dengan benar meskipun pengguna menentukan ulang variabel lingkungan SHELL, yang dapat diubah saat menginstal berbagai alat pengembangan di lingkungan Windows.

Rilis NDK ini mencakup perbaikan penting untuk perangkat berbasis Tegra2, dan beberapa perbaikan dan peningkatan tambahan:

Perbaikan bug penting:
  • Biner GNU STL armeabi-v7a telah diperbaiki agar tidak terjadi error pada perangkat non-NEON. File yang disediakan dalam NDK r7b tidak dikonfigurasi dengan benar, mengakibatkan error pada perangkat berbasis Tegra2 dan lainnya saat mencoba untuk menggunakan fungsi titik mengambang tertentu (misalnya, cosf, sinf, expf).
Perubahan penting:
  • Dukungan telah ditambahkan untuk direktori output kustom melalui variabel lingkungan NDK_OUT. Jika ditentukan, variabel ini digunakan untuk menyimpan semua file tingkat menengah yang dihasilkan, bukan $PROJECT_PATH/obj. Variabel ini juga dikenali oleh ndk-gdb.
  • Dukungan telah ditambahkan untuk membuat modul dengan ratusan atau bahkan ribuan file sumber dengan menentukan LOCAL_SHORT_COMMANDS ke true dalam Android.mk Anda.

    Perubahan ini memaksa sistem build NDK untuk menempatkan sebagian besar opsi linker atau archiver ke dalam file daftar, sebagai solusi untuk batasan panjang command line. Untuk lebih detailnya, lihat docs/ANDROID-MK.html.

Perbaikan bug lainnya:
  • Implementasi android_getCpuCount() pada library helper cpufeatures telah diperbaiki. Pada perangkat tertentu, yang core-nya diaktifkan secara dinamis oleh sistem, penerapan sebelumnya akan melaporkan jumlah total core aktif saat fungsi pertama kali dipanggil, bukan jumlah total core yang tersedia secara fisik.

Rilis NDK ini mencakup perbaikan untuk build Windows native, Cygwin, dan banyak peningkatan lainnya:

Perbaikan bug penting:
  • sys/atomics.h telah diupdate untuk menghindari masalah ketepatan pada beberapa perangkat berbasis ARM multi-core. Buat ulang sumber yang belum dimodifikasi dengan versi NDK ini, dan masalah akan teratasi sepenuhnya. Untuk detail selengkapnya, baca docs/ANDROID-ATOMICS.html.
  • Dikembalikan ke binutils 2.19 untuk memperbaiki masalah debug yang muncul pada NDK r7 (yang dialihkan ke binutils 2.20.1).
  • ndk-build telah diperbaiki di Linux 32-bit. Error pengemasan menempatkan file executable awk versi 64-bit pada prebuilt/linux-x86/bin di NDK r7.
  • Build Windows native (ndk-build.cmd) telah diperbaiki. Mode build lainnya tidak terpengaruh. Perbaikannya meliputi:
    • Bug stack overflow/loop tanpa batas yang terjadi saat mencoba memanggil ndk-build.cmd dari direktori yang tidakberada di bagian teratas jalur project Anda (misalnya di subdirektori) telah dihapus.
    • Masalah yang mengakibatkan file dependensi yang dibuat secara otomatis diabaikan telah diperbaiki. Ini berarti bahwa mengupdate header tidak memicu kompilasi ulang sumber yang menyertakan header tersebut.
    • Masalah yang mengakibatkan karakter khusus dalam file atau jalur, selain spasi dan tanda kutip, tidak ditangani dengan benar, telah diperbaiki.
  • Toolchain mandiri telah diperbaiki untuk membuat biner yang tepat saat menggunakan -lstdc++ (misalnya, menautkan ke waktu proses GNU libstdc++ C++). Sebaiknya gunakan -lgnustl_shared jika Anda ingin menautkan ke versi library bersama atau -lstdc++ untuk versi statis.

    Lihat docs/STANDALONE-TOOLCHAIN.html untuk detail selengkapnya tentang perbaikan ini.

  • gnustl_shared telah diperbaiki di Cygwin. Linker melaporkan tidak dapat menemukan libsupc++.a walaupun file tersebut berada di lokasi yang tepat.
  • Link Cygwin C++ saat tidak menggunakan runtime C++ khusus melalui APP_STL telah diperbaiki.
Perubahan lainnya:
  • Saat aplikasi Anda menggunakan waktu proses GNU libstdc++, compiler tidak akan lagi mengaktifkan pengecualian dan RTTI secara paksa. Perubahan ini menghasilkan kode yang lebih kecil.

    Jika Anda memerlukan fitur-fitur ini, Anda harus melakukan salah satu hal berikut:

    • Aktifkan pengecualian dan/atau RTTI secara eksplisit dalam modul atau Application.mk. (disarankan)
    • Tentukan APP_GNUSTL_FORCE_CPP_FEATURES ke 'exceptions', 'rtti' atau keduanya di Application.mk. Untuk detail selengkapnya, lihat docs/APPLICATION-MK.html.
  • ndk-gdb sekarang berfungsi dengan baik saat aplikasi Anda memiliki layanan pribadi yang berjalan dalam proses yang independen. ndk-gdb melakukan debug proses aplikasi utama, bukan proses pertama yang dicantumkan oleh ps, yang biasanya merupakan proses layanan.
  • Bug langka yang mengakibatkan NDK r7 akan gagal menerima nilai LOCAL_ARM_MODE dan selalu mengompilasi file sumber tertentu (tetapi tidak semua) ke instruksi 32-bit telah diperbaiki.
  • STLport: Memuat ulang source untuk mencocokkan versi platform Android. Update ini memperbaiki beberapa bug minor:
    • Pembuatan instance dari jenis yang tidak lengkap telah diperbaiki
    • Salah ketik "==" versus "=" minor telah diperbaiki
    • memmove digunakan, alih-alih memcpy di string::assign
    • Penanganan IsNANorINF, IsINF, IsNegNAN, dll yang lebih baik telah ditambahkan.

    Untuk detail selengkapnya, lihat log commit.

  • STLport: 5 penginisialisasi statis yang tidak diperlukan dari libary telah dihapus.
  • Library GNU libstdc++ untuk armeabi-v7a sebelumnya salah dikompilasi untuk armeabi. Perubahan ini tidak berdampak pada ketepatan, tetapi menggunakan ABI yang tepat akan memberikan performa yang sedikit lebih baik.
  • Library helper cpu-features telah diupdate untuk melaporkan tiga fitur CPU opsional x86 (SSSE3, MOVBE dan POPCNT). Lihat docs/CPU-FEATURES.html untuk detail selengkapnya.
  • docs/NDK-BUILD.html telah diupdate untuk menyebutkan NDK_APPLICATION_MK, alih-alih NDK_APP_APPLICATION_MK untuk memilih file Application.mk kustom.
  • Cygwin: ndk-build tidak lagi membuat file "NUL" kosong di direktori saat ini ketika dipanggil.
  • Cygwin: Deteksi dependensi otomatis yang lebih baik telah ditambahkan. Dalam versi sebelumnya, deteksi dependensi otomatis tidak berfungsi dengan baik pada kasus berikut:
    • Jika awalan drive Cygwin bukan /cygdrive.
    • Saat menggunakan pemasang tanpa drive, misalnya, jika Cygwin akan menerjemahkan /home menjadi \\server\subdir, bukan C:\Some\Dir.
  • Cygwin: ndk-build tidak mencoba menggunakan alat Windows native pada $NDK/prebuilt/windows/bin dengan versi Cygwin dan/atau GNU Make tertentu.

Rilis NDK ini mencakup fitur-fitur baru untuk mendukung platform Android 4.0 beserta sejumlah tambahan dan peningkatan lainnya:

Fitur baru
  • NDK API resmi telah ditambahkan untuk Android 4.0 (API level 14), yang menambahkan fitur native berikut ke platform:
    • API multimedia native telah ditambahkan berdasarkan standar Khronos Group OpenMAX AL 1.0.1. Header <OMXAL/OpenMAXAL.h> dan <OMXAL/OpenMAXAL_Android.h>baru memungkinkan aplikasi yang menargetkan API level 14 untuk menjalankan output multimedia langsung dari kode native menggunakan antarmuka antrean buffer khusus Android yang baru. Untuk detail selengkapnya, lihat docs/openmaxal/index.html dan http://www.khronos.org/openmax/.
    • API audio native telah diupdate berdasarkan standar Khronos Group OpenSL ES 1.0.1. Dengan API Level 14, kini Anda dapat mendekode audio yang terkompresi (misalnya MP3, AAC, Vorbis) ke PCM. Untuk detail selengkapnya, lihat docs/opensles/index.html dan http://www.khronos.org/opensles/.
  • Dukungan CCache telah ditambahkan. Untuk mempercepat proses rebuild skala besar, tetapkan variabel lingkungan NDK_CCACHE ke ccache (atau jalur ke ccache biner Anda). Jika dinyatakan, sistem build NDK akan otomatis menggunakan CCache saat mengompilasi file sumber apa pun. Contoh:
    export NDK_CCACHE=ccache
    

    Catatan: CCache tidak disertakan dalam rilis NDK sehingga Anda harus menginstal CCache sebelum menggunakannya. Untuk informasi CCache lebih lanjut, lihat http://ccache.samba.org.

  • Dukungan untuk menyetel APP_ABI ke all telah ditambahkan untuk menunjukkan bahwa Anda ingin membangun modul NDK untuk semua ABI yang didukung oleh rilis NDK tertentu. Ini berarti salah satu dari dua baris berikut di Application.mk Anda setara dengan rilis ini:
    APP_ABI := all
    APP_ABI := armeabi armeabi-v7a x86
    

    Dukungan ini juga berfungsi jika Anda menentukan APP_ABI saat memanggil ndk-build dari command line, yang merupakan cara cepat untuk memastikan bahwa project Anda dibangun untuk semua ABI yang didukung tanpa mengubah Application.mk file project. Contoh:

    ndk-build APP_ABI=all
    
  • Variabel LOCAL_CPP_FEATURES telah ditambahkan di Android.mk yang memungkinkan Anda untuk menyatakan fitur C++ (RTTI atau Pengecualian) mana yang digunakan modul Anda. Variabel ini memastikan bahwa penautan akhir berfungsi dengan benar jika Anda memiliki modul bawaan yang bergantung pada fitur-fitur ini. Lihat docs/ANDROID-MK.html dan docs/CPLUSPLUS-SUPPORT.html untuk detail selengkapnya.
  • Memperpendek jalur ke file sumber dan objek yang digunakan dalam perintah build. Saat memanggil $NDK/ndk-build dari jalur project Anda, jalur ke file sumber, objek, dan biner yang diteruskan ke perintah build kini jauh lebih pendek, karena diteruskan secara relatif ke direktori saat ini. Ini akan berguna saat membuat project dengan banyak file sumber, untuk menghindari batasan panjang command line maksimum yang didukung oleh sistem operasi host Anda. Perilaku tersebut tidak berubah jika Anda memanggil ndk-build dari subdirektori hierarki project Anda, atau jika Anda menetapkan NDK_PROJECT_PATH untuk menunjuk ke direktori tertentu.
Fitur eksperimental
Kini Anda dapat membuat file sumber NDK pada Windows tanpa Cygwin dengan memanggil skrip ndk-build.cmd melalui command line dari jalur project Anda. Skrip mengambil argumen yang sama persis dengan skrip ndk-build asli. Paket Windows NDK dilengkapi dengan biner bawaannya sendiri untuk GNU Make, Awk, dan alat lain yang diperlukan oleh build. Anda tidak perlu menginstal apa pun untuk mendapatkan sistem build yang berfungsi.

Penting: ndk-gdb tidak berfungsi di Windows, jadi Anda masih memerlukan Cygwin untuk melakukan debug.

Fitur ini masih bersifat eksperimental, jadi jangan ragu untuk mencobanya dan melaporkan masalah di database bug publik atau forum publik. Semua pengujian unit dan sampel yang dikirimkan dengan NDK berhasil dikompilasi dengan fitur ini.

Perbaikan bug penting
  • Library bersama yang diimpor kini telah diinstal secara default ke lokasi penginstalan target (libs/<abi>) jika APP_MODULES tidak ditentukan dalam Application.mk Anda. Misalnya, jika modul tingkat atas foo mengimpor modul bar, lalu keduanya libfoo.so dan libbar.so disalin ke lokasi penginstalan. Sebelumnya, hanya libfoo.so yang disalin, kecuali Anda juga mencantumkan bar di APP_MODULES Anda. Jika Anda menentukan APP_MODULES secara eksplisit, perilaku tersebut tidak akan berubah.
  • ndk-gdb kini berfungsi dengan benar untuk aktivitas dengan beberapa kategori dalam filter intent UTAMA miliknya.
  • Impor library statis sekarang bersifat transitif secara benar. Misalnya, jika modul level atas foo mengimpor library statis bar yang mengimpor library statis zoo, libfoo.so sekarang akan ditautkan dengan libbar.a dan libzoo.a.
Perubahan lainnya
  • docs/NATIVE-ACTIVITY.HTML: Kesalahan ketik telah diperbaiki. Level API minimum harus 9, bukan 8 untuk aktivitas native.
  • docs/STABLE-APIS.html: Dokumentasi yang tidak ada, yang mencantumkan EGL sebagai API stabil yang didukung mulai dari API level 9, telah ditambahkan.
  • download-toolchain-sources.sh: Telah diupdate agar mendownload sumber toolchain dari android.googlesource.com, yang merupakan lokasi baru untuk server AOSP.
  • Waktu proses dukungan C++ baru yang bernama gabi++ telah ditambahkan. Detail selengkapnya tentang ini tersedia di docs/CPLUSPLUS-SUPPORT.html yang telah diperbarui.
  • Waktu proses dukungan C++ baru bernama gnustl_shared yang sesuai dengan versi library bersama GNU libstdc++ v3 (lisensi GPLv3) telah ditambahkan. Lihat info selengkapnya di docs/CPLUSPLUS-SUPPORT.html
  • Dukungan untuk RTTI pada waktu proses STLport C++ telah ditambahkan (tidak ada dukungan untuk pengecualian).
  • Dukungan untuk beberapa ekstensi file telah ditambahkan di LOCAL_CPP_EXTENSION. Misalnya, untuk mengompilasi foo.cpp dan bar.cxx sebagai sumber C++, deklarasikan sebagai berikut:
    LOCAL_CPP_EXTENSION := .cpp .cxx
    
  • Banyak simbol yang tidak diinginkan telah dihapus, yang diekspor dari library sistem bersama waktu link yang disediakan oleh NDK. Hal ini memastikan bahwa kode yang dihasilkan dengan toolchain mandiri tidak berisiko untuk secara tidak sengaja bergantung pada simbol ABI yang tidak stabil (misalnya simbol libgcc.a yang berubah setiap kali toolchain yang digunakan untuk membangun platform berubah)
  • Header EGL dan OpenGLES Khronos untuk mendukung lebih banyak ekstensi telah dimuat ulang. Perhatikan bahwa ini tidak mengubah ABI NDK untuk library yang sesuai, karena setiap ekstensi harus diperiksa saat waktu proses oleh aplikasi klien.

    Ekstensi yang tersedia bergantung pada perangkat sebenarnya dan driver GPU Anda, bukan versi platform tempat perangkat berjalan. Perubahan header menambahan konstanta dan jenis baru untuk mempermudah penggunaan ekstensi saat diperiksa dengan eglGetProcAddress() atau glGetProcAddress(). Daftar berikut ini menjelaskan ekstensi yang baru didukung:

    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

Rilis NDK ini tidak menyertakan fitur baru jika dibandingkan dengan r6. Rilis r6b mengatasi masalah-masalah berikut dalam rilis r6:

Perbaikan bug penting
  • Build saat APP_ABI="armeabi x86" digunakan untuk build multi-arsitektur telah diperbaiki.
  • Lokasi biner STLport bawaan dalam paket rilis NDK telah diperbaiki. Bug dalam skrip pengemasan menempatkannya di lokasi yang salah.
  • Penggunaan atexit() di library bersama pada toolchain x86standalone telah diperbaiki.
  • make-standalone-toolchain.sh --arch=x86 telah diperbaiki. Sebelumnya, toolchain mandiri ini gagal menyalin biner GNU libstdc++ yang sesuai ke lokasi yang tepat.
  • Peringatan linker toolchain mandiri tentang tidak adanya definisi dan ukuran untuk simbol __dso_handle telah diperbaiki (khusus ARM).
  • Urutan penyertaan $(SYSROOT)/usr/include untuk build x86 telah diperbaiki. Lihat bug untuk informasi selengkapnya.
  • Definisi ptrdiff_t dan size_t dalam sistem khusus x86 saat keduanya digunakan dengan toolchain x86 mandiri telah diperbaiki.

Rilis NDK ini mencakup dukungan untuk x86 ABI dan perubahan kecil lainnya. Untuk informasi mendetail yang menjelaskan perubahan dalam rilis ini, baca dokumen CHANGES.HTML yang disertakan dalam paket NDK.

Catatan umum:
  • Menambahkan dukungan untuk ABI x86, yang memungkinkan Anda menghasilkan kode mesin yang berjalan pada perangkat Android berbasis x86 yang kompatibel. Fitur utama x86 meliputi toolchain, header sistem, library, dan dukungan proses debug khusus untuk x86. Untuk semua detail terkait dukungan x86, lihat docs/CPU-X86.html dalam paket NDK.

    Secara default, kode dihasilkan untuk perangkat berbasis ARM, tetapi Anda dapat menambahkan x86 ke definisi APP_ABI di file Application.mk guna membuat aplikasi untuk platform x86. Misalnya, baris berikut menginstruksikan ndk-build untuk membuat kode untuk tiga ABI berbeda:

    APP_ABI := armeabi armeabi-v7a x86

    Kecuali Anda bergantung pada sumber assembly berbasis ARM, Anda tidak perlu menyentuh file Android.mk untuk membuat kode mesin x86.

  • Anda dapat membuat toolchain x86 mandiri menggunakan opsi --toolchain=x86-4.4.3 saat memanggil make-standalone-toolchain.sh. Lihat docs/STANDALONE-TOOLCHAIN.html untuk detail selengkapnya.
  • Alat ndk-stack baru memungkinkan Anda menerjemahkan pelacakan tumpukan di logcat yang dihasilkan oleh kode native. Alat tersebut menerjemahkan alamat petunjuk ke dalam format dapat dibaca yang berisi hal-hal seperti fungsi, file sumber, dan nomor baris yang sesuai dengan setiap frame stack. Untuk informasi selengkapnya dan contoh penggunaan, lihat docs/NDK-STACK.html.
Perubahan lainnya:
arm-eabi-4.4.0, yang tidak digunakan lagi sejak NDK r5, telah dihapus dari distribusi NDK.

Rilis NDK ini tidak menyertakan fitur baru jika dibandingkan dengan r5b. Rilis r5c mengatasi masalah berikut dalam rilis r5b:

Perbaikan bug penting:
  • ndk-build: Bug langka yang muncul saat mencoba melakukan build paralel project yang dapat di-debug telah diperbaiki.
  • Kesalahan ketik yang mencegah LOCAL_WHOLE_STATIC_LIBRARIES agar berfungsi dengan benar dengan toolchain baru telah diperbaiki dan dokumentasi untuk ini telah ditambahkan di docs/ANDROID-MK.html.
  • Bug tempat kode yang ditautkan dengan gnustl_static error saat dijalankan di rilis platform sebelumnya dari API level 8 (Android 2.2) telah diperbaiki.
  • ndk-gdb: Bug yang menyebabkan kesalahan segmentasi saat proses debug pada Android 3.0 atau perangkat yang lebih baru telah diperbaiki.
  • <android/input.h>: Dua fungsi yang diperkenalkan di API level 9 (Android 2.3) sebelumnya salah dan telah diperbaiki. Meskipun ini memecah API sumber, antarmuka biner ke sistem tidak berubah. Fungsi yang salah tidak memiliki parameter history_index, dan definisi yang benar ditunjukkan di bawah ini:
    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
    );
  • Biner ARM library C untuk level API 9 (Android 2.3) telah diupdate untuk mengekspos dengan benar pada fungsi baru waktu link yang telah ditambahkan dalam level API tersebut (misalnya pthread_rwlock_init).
Peningkatan dan perbaikan minor:
  • Sekarang file objek selalu ditautkan sesuai urutan kemunculannya di LOCAL_SRC_FILES. Sebelumnya tidak seperti itu karena file dikelompokkan berdasarkan ekstensi sumber.
  • Jika import-module gagal, maka daftar direktori yang telah ditelusuri akan dicetak. Ini berguna untuk memeriksa apakah definisi NDK_MODULE_PATH yang digunakan oleh sistem build sudah benar.
  • Jika import-module berhasil, maka direktori tempat modul ditemukan ke log (terlihat dengan NDK_LOG=1) akan dicetak.
  • Kecepatan build aplikasi yang dapat di-debug saat ada sejumlah besar direktori penyertaan dalam project telah ditingkatkan.
  • ndk-gdb: Deteksi kegagalan adb shell lebih baik dan pesan error yang dtingkatkan.
  • <pthread.h>: Definisi PTHREAD_RWLOCK_INITIALIZER untuk API level 9 (Android 2.3) dan yang lebih tinggi telah diperbaiki.
  • Masalah saat modul dapat mengimpor sendiri sehingga menghasilkan loop tak terbatas di GNU Make telah diperbaiki.
  • Bug yang menyebabkan build gagal jika LOCAL_ARM_NEON ditetapkan ke true (salah ketik di build/core/build-binary.mk) telah diperbaiki.
  • Bug yang mencegah kompilasi file assembly .s (file .S tidak masalah) telah diperbaiki.

Rilis NDK ini tidak menyertakan fitur baru jika dibandingkan dengan r5. Rilis r5b mengatasi masalah berikut dalam rilis r5:

  • Biner r5 memerlukan glibc 2.11, tetapi biner r5b dibuat dengan toolchain khusus yang menargetkan glibc 2.7 atau yang lebih tinggi. Sekarang biner toolchain Linux berjalan di Ubuntu 8.04 atau yang lebih tinggi.
  • Memperbaiki bug compiler di toolchain arm-linux-androideabi-4.4.3. Biner sebelumnya menghasilkan urutan instruksi thumb yang tidak valid saat menangani karakter yang ditandatangani.
  • Menambahkan dokumentasi yang hilang untuk nilai "gnustl_static" untuk APP_STL, yang memungkinkan Anda untuk menautkan versi library statis GNU libstdc++.
  • -
  • Masalah ndk-build berikut telah diperbaiki:
    • Bug yang membuat file dependensi tidak konsisten saat error kompilasi terjadi pada Windows. Ini mencegah build yang tepat setelah error diperbaiki dalam kode sumber.
    • Bug khusus Cygwin yang menggunakan lokasi sangat pendek untuk penginstalan Android NDK atau lokasi project yang menyebabkan pembuatan file dependensi tidak valid. Ini membuat build tambahan menjadi tidak mungkin.
    • Salah ketik yang mencegah library cpufeature untuk berfungsi dengan benar pada toolchain NDK baru.
    • Build di Cygwin lebih cepat dengan menghindari panggilan ke cygpath -m dari GNU Make untuk setiap file objek atau sumber, yang menyebabkan masalah dengan hierarki sumber yang sangat besar. Jika ini tidak berfungsi dengan benar, tentukan NDK_USE_CYGPATH=1 di lingkungan Anda untuk menggunakan cygpath -m lagi.
    • Sekarang penginstalan Cygwin memberi tahu pengguna lokasi penginstalan tidak valid yang berisi spasi. Sebelumnya, lokasi yang tidak valid akan menghasilkan error yang melaporkan tentang versi GNU Make yang salah, meskipun versi yang benar telah diinstal.
  • Kesalahan ketik yang mencegah variabel lingkungan NDK_MODULE_PATH untuk tidak berfungsi dengan baik jika berisi beberapa direktori yang dipisahkan dengan titik dua telah diperbaiki.
  • Skrip prebuilt-common.sh berisi perbaikan untuk memeriksa compiler untuk kode mesin 64-bit yang dihasilkan, bukan mengandalkan tag host, yang memungkinkan toolchain 32-bit untuk dibuat kembali dengan tepat di Snow Leopard. Kini skrip rebuild toolchain juga mendukung menggunakan toolchain host 32-bit.
  • Deklarasi yang hilang untuk INET_ADDRSTRLEN telah ditambahkan ke <netinet/in.h>.
  • Deklarasi yang hilang untuk IN6_IS_ADDR_MC_NODELOCAL dan IN6_IS_ADDR_MC_GLOBAL telah ditambahkan ke <netinet/in6.h>.
  • 'asm' telah diganti dengan '__asm__' di <asm/byteorder.h> untuk memungkinkan kompilasi dengan -std=c99.

Rilis NDK ini mencakup banyak API baru, yang sebagian besar diperkenalkan untuk mendukung pengembangan game dan aplikasi sejenis yang banyak menggunakan kode native. Dengan menggunakan API, developer memiliki akses native langsung ke peristiwa, audio, pengelolaan grafik serta jendela, aset, dan penyimpanan. Developer juga dapat menerapkan siklus proses aplikasi Android dalam kode native dengan bantuan dari class NativeActivity yang baru. Untuk informasi mendetail yang menjelaskan perubahan dalam rilis ini, baca dokumen CHANGES.HTML yang disertakan dalam paket NDK yang didownload.

Catatan umum:
  • Menambahkan dukungan untuk aktivitas native, yang memungkinkan Anda mengimplementasikan siklus proses aplikasi Android dalam kode native.
  • Menambahkan dukungan native untuk:
    • Subsistem input (seperti keyboard dan layar sentuh)
    • Akses ke data sensor (akselerometer, kompas, giroskop, dll.).
    • API loop peristiwa untuk menunggu hal-hal seperti peristiwa input dan sensor.
    • Subsistem jendela dan permukaan
    • API Audio berdasarkan standar OpenSL ES yang mendukung pemutaran dan perekaman serta kontrol atas efek audio platform
    • Akses ke aset yang dikemas dalam file .apk.
  • Menyertakan toolchain baru (berdasarkan GCC 4.4.3), yang menghasilkan kode yang lebih baik, dan kini juga dapat digunakan sebagai compiler silang mandiri, untuk orang-orang yang ingin membuat aplikasi dengan ./configure && make. Lihat docs/STANDALONE-TOOLCHAIN.html untuk mengetahui detailnya. Biner untuk GCC 4.4.0 masih disediakan, tetapi biner 4.2.1 telah dihapus.
  • Menambahkan dukungan untuk library bersama dan statis bawaan (docs/PREBUILTS.html) serta impor dan ekspor modul untuk membuat aktivitas berbagi dan penggunaan kembali modul pihak ketiga jauh lebih mudah (docs/IMPORT-MODULE.html menjelaskan alasannya).
  • Menyediakan implementasi C++ STL default (berdasarkan STLport) sebagai modul helper. Ini dapat digunakan baik sebagai library statis atau bersama (detail dan contoh penggunaan ada di sources/android/stlport/README). Biner bawaan untuk STLport (statis atau bersama) dan GNU libstdc++ (khusus statis) juga disediakan jika Anda memilih untuk mengompilasi terhadap library tersebut bukan implementasi C++ STL default. Pengecualian C++ dan RTTI tidak didukung dalam implementasi STL default. Untuk informasi selengkapnya, lihat docs/CPLUSPLUS-SUPPORT.HTML.
  • Menyertakan peningkatan pada library helper cpufeatures yang menyempurnakan pelaporan jenis CPU (beberapa perangkat sebelumnya melaporkan CPU ARMv7 sedangkan perangkat tersebut adalah ARMv6). Kami menyarankan developer yang menggunakan library ini untuk melakukan rebuild aplikasinya kemudian mengupload ke Google Play agar mendapatkan manfaat dari peningkatan tersebut.
  • Menambahkan library EGL yang memungkinkan Anda membuat dan mengelola tekstur dan layanan OpenGL ES.
  • Menambahkan contoh aplikasi baru, native-plasma dan native-activity, untuk menunjukkan cara menulis aktivitas native.
  • Menyertakan banyak perbaikan bug dan peningkatan kecil lainnya; lihat docs/CHANGES.html untuk mengetahui daftar perubahan yang lebih mendetail.
Catatan NDK r4b:

Menyertakan perbaikan untuk beberapa masalah dalam skrip build NDK dan proses debug — jika Anda menggunakan NDK r4, kami menyarankan mendownload build NDK r4b. Untuk informasi detail yang menjelaskan perubahan dalam rilis ini, baca dokumen CHANGES.TXT yang disertakan dalam paket NDK yang didownload.

Catatan umum:
  • Menyediakan sistem build yang disederhanakan melalui perintah build ndk-build yang baru.
  • Menambahkan dukungan untuk memudahkan proses debug native dari kode mesin yang dibuat pada perangkat produksi melalui perintah ndk-gdb yang baru.
  • Menambahkan ABI khusus Android baru untuk arsitektur CPU berbasis ARM, armeabi-v7a. ABI baru memperluas ABI armeabi yang ada untuk menyertakan ekstensi set instruksi CPU berikut:
    • Instruksi Thumb-2
    • Instruksi VFP hardware FPU (VFPv3-D16)
    • Dukungan opsional untuk intrinsik GCC ARM Advanced SIMD (NEON) dan VFPv3-D32. Didukung oleh perangkat seperti Verizon Droid dari Motorola, Google Nexus One, dan lainnya.
  • Menambahkan library statis cpufeatures yang baru (dengan sumber) yang memungkinkan aplikasi Anda mendeteksi fitur CPU perangkat host saat waktu proses. Secara khusus, aplikasi dapat memeriksa dukungan ARMv7-A, serta dukungan VFPv3-D32 dan NEON, lalu menyediakan lokasi kode yang terpisah sesuai kebutuhan.
  • Menambahkan aplikasi contoh, hello-neon, yang menggambarkan cara menggunakan library cpufeatures untuk memeriksa fitur CPU, lalu menyediakan jalur kode yang dioptimalkan menggunakan instrinsik NEON, jika didukung oleh CPU.
  • Memungkinkan Anda menghasilkan kode mesin untuk salah satu atau kedua set instruksi yang didukung oleh NDK. Misalnya, Anda dapat membuat arsitektur ARMv5 dan ARMv7-A secara bersamaan dan menyimpan semuanya di .apk aplikasi Anda.
  • Untuk memastikan aplikasi Anda hanya tersedia bagi para pengguna yang perangkatnya mampu menjalankan aplikasi tersebut, Google Play kini memfilter aplikasi berdasarkan informasi kumpulan petunjuk yang disertakan dalam aplikasi Anda. Anda tidak perlu melakukan tindakan apa pun untuk mengaktifkan pemfilteran. Selain itu, sistem Android itu sendiri juga memeriksa aplikasi Anda pada waktu penginstalan dan memungkinkan penginstalan dilanjutkan hanya jika aplikasi menyediakan library yang dikompilasi untuk arsitektur CPU perangkat.
  • Menambahkan dukungan untuk Android 2.2, termasuk API stabil baru untuk mengakses buffering piksel objek Bitmap dari kode native.
Catatan umum:
  • Menambahkan dukungan library native OpenGL ES 2.0.
  • Menambahkan aplikasi contoh, hello-gl2, yang mengilustrasikan penggunaan OpenGL ES 2.0 vertex dan shader fragmen.
  • Biner toolchain telah diperbarui untuk rilis ini dengan GCC 4.4.0, yang akan menghasilkan kode mesin yang sedikit lebih ringkas dan efisien daripada versi sebelumnya (4.2.1). NDK ini juga masih menyediakan biner 4.2.1, yang dapat Anda gunakan untuk membuat kode mesin, jika ingin.

Awalnya dirilis sebagai "Android 1.6 NDK, Rilis 1".

Catatan umum:
  • Menambahkan dukungan library native OpenGL ES 1.1.
  • Menambahkan aplikasi contoh, san-angeles, yang merender grafik 3D melalui OpenGL ES API native, sekaligus mengelola siklus proses aktivitas dengan objek GLSurfaceView.

Awalnya dirilis sebagai "Android 1.5 NDK, Rilis 1".

Catatan umum:
  • Menyertakan dukungan compiler (GCC) untuk instruksi ARMv5TE, termasuk instruksi Thumb-1.
  • Menyertakan header sistem untuk API native stabil, dokumentasi, dan contoh aplikasi.