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.
Android NDK r26 LTS (September 2023)
Log perubahan- Download
-
- Download untuk rilis ini tersedia di sini.
- Pengumuman
-
- KitKat (API 19 dan 20) tidak lagi didukung.
Android NDK r25 LTS (Juli 2022)
Log perubahan- Download
-
- Download untuk rilis ini tersedia di sini.
- Pengumuman
-
- Menyertakan API Android 13.
- Mengupdate LLVM ke clang-r450784d, berdasarkan pengembangan LLVM 14.
Android NDK r24 (Maret 2022)
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.
-
GNU Assembler (GAS), telah dihapus. Jika Anda mem-build dengan
Android NDK r23 LTS (Agustus 2021)
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).
-
GNU binutils, kecuali GNU Assembler (GAS), telah dihapus. GAS
akan dihapus pada rilis berikutnya. Jika Anda mem-build dengan
Android NDK r22b (Maret 2021)
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 menggunakanas
secara langsung, gunakanclang
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.
-
Masalah
1258:
-
GNU binutils tidak lagi digunakan dan akan dihapus dalam rilis NDK
mendatang. Perlu diketahui bahwa GNU assembler (
Android NDK r21e LTS (Januari 2021)
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)
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.
-
Android NDK r20b (Juni 2019)
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.
-
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
Android NDK r19c (Januari 2019)
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/
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/bin/armv7a-linux-androideabi26-clang++ src.cpp 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.
-
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
Android NDK r18b (September 2018)
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.
Android NDK r17c (Juni 2018)
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.
Android NDK r16b (Desember 2017)
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 kelibc++
. 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.
Android NDK r15c (Juli 2017)
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.
- 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
). JikaAPP_PLATFORM
ditetapkan lebih rendah dariandroid-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.
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.
- 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.
Android NDK r14b (Maret 2017)
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.
- 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:
Untuk informasi tambahan tentang yang baru dan yang diubah dalam rilis ini, lihat log perubahan ini.
Android NDK r13b (Oktober 2016)
- 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
-
-
Perbaikan tambahan untuk
__cxa_bad_cast
yang tidak ada.
-
Perbaikan tambahan untuk
- 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.
Android NDK r12b (Juni 2016)
- 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. Pastikanmake_standalone_toolchain.py
sesuai dengan kebutuhan Anda. - Laporkan masalah ke GitHub.
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).
- Untuk informasi selengkapnya tentang perubahan ini, lihat daftar perubahan ini.
- 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 denganINFO_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
danclang++.exe
pada paket Windows 32-bit sebenarnya adalah 64-bit. File yang dapat dieksekusi 32-bit diberi namaclang_32.exe
.
- Executable
- 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.
__thread
kini dapat berjalan dengan baik.
Android NDK r12 (Juni 2016)
- 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 kemake_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 referensiCameraCharacteristics
. - Clang
- Clang telah diupdate ke 3.8svn (r256229, build 2812033). Executable
clang.exe
danclang++.exe
pada paket Windows 32-bit sebenarnya adalah 64-bit. File yang dapat dieksekusi 32-bit diberi namaclang_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 kameraACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP
tercantum secara tidak sengaja dan akan dihapus pada rilis berikutnya. Gunakan nilaiACAMERA_STATISTICS_LENS_SHADING_MAP
sebagai gantinya.
Android NDK r11c (Maret 2016)
- Perubahan
- Perbaikan tambahan untuk skrip
ndk-gdb.py
diterapkan. - Argumen nama paket opsional telah ditambahkan ke opsi
--attach
perintahndk-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)
Android NDK r11b (Maret 2016)
- 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
padamake-standalone-toolchain.sh
telah diperbaiki.
- Pengumuman penting
- 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.
Android NDK r11 (Maret 2016)
- 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.
- Kami sangat merekomendasikan peralihan ke Clang.
- 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.
- Sekarang compiler mendukung
- Clang kini memberikan dukungan untuk TLS teremulasi.
- Pengumuman penting
- 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.
- API pelacakan native ditambahkan ke
- 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.
- Dukungan untuk
- Perubahan lainnya
- Toolchain mandiri ARM diubah dan ditetapkan secara default ke arm7.
- Anda dapat memulihkan perilaku lama dengan menentukan opsi
-target
sebagaiarmv5te-linux-androideabi
.
- Anda dapat memulihkan perilaku lama dengan menentukan opsi
- 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.
- Toolchain mandiri ARM diubah dan ditetapkan secara default ke arm7.
- 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
, danuchar.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.
- Pengumuman penting
- Binutils
-
- Penambahan
- Opsi baru ditambahkan:
--pic-veneer
.
- Opsi baru ditambahkan:
- 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).
- Penambahan
- 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.
- Penghapusan
- YASM
-
- Perubahan
- YASM telah diupdate ke versi 1.3.0.
- Perubahan
- 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 dengandynamic_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.
Android NDK r10e (Mei 2015)
- 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
.
- Untuk mengompilasi dengan multithreading, gunakan opsi
- GDB/gdbserver diupgrade ke versi 7.7 untuk semua arsitektur.
- Paket NDK untuk Darwin 32-bit telah dihapus.
- Solusi untuk Cortex-A53 Erratum 843419 telah diintegrasikan ke dalam
linker
- 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 dimedia/NdkMediaDrm.h
.sys/ucontext.h
telah diperbaiki untukmips64
.- Pemeriksaan versi Clang untuk
__builtin_isnan
dan__builtin_isinf
telah dihentikan. android-21/arch-mips/usr/include/asm/reg.h
danandroid-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
danmips64
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 untukmips64
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
dan1
. 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 ABIx86_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 perintahndk-build.cmd
darigradle
telah diperbaiki. (Masalah 66937) - Library
libatomic.a
danlibgomp.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 untukaarch64
. Linker default tetapld.bfd
. Untuk mengaktifkanld.gold
secara eksplisit, tambahkan-fuse-ld=gold
ke variabelLOCAL_LDFLAGS
atauAPP_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 kendk-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
.
Android NDK r10d (Desember 2014)
- 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 menjalankanmake-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 menggunakanPIE
saat membuat build. Perubahan ini memiliki sejumlah implikasi, yang dibahas dalam Masalah 888 Pratinjau Developer. Implikasi ini tidak berlaku untuk library bersama.
- 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
- 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 lainnya terkait
A53 Errata #835769 telah dibuat pada linker aarch64-linux-android-4.9. Sebagai bagian dari ini, GCC memberikan opsi baru,
- Perbaikan bug lainnya:
-
- Perbaikan header dan library berikut telah dibuat:
posix_memalign
telah ditambahkan ke API level 16. Selain itu, prototipe distdlib.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
, dangl2ext.h
,dlext.h
,fts.h
,sgidefs.h
untuk API level 21. sys/user.h
telah dimodifikasi untuk mengganti namamxcsr_mask
menjadimxcr_mask
, dan untuk mengubah jenis data untuku_ar0
dari - Jenis nilai yang ditampilkan
sysconf()
telah diubah dariint
menjadilong
. - Penanganan ndk-build
thumb
untukLOCAL_ARM_MODE
telah diperbaiki: Dalam r10d, ndk-build menambahkanLOCAL_LDFLAGS+=-mthumb
secara default, kecuali jika salah satu dari kondisi berikut berlaku: - Anda telah menetapkan
LOCAL_ARM_MODE
setara denganarm
. - Anda men-debug build (dengan setelan seperti
APP_OPTIM=debug
danAndroidManifest.xml
yang berisiandroid: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)
unsigned long
menjadi struct user_regs_struct*.
Android NDK r10c (Oktober 2014)
- 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
- 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. - 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, lihatprebuilt/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 disamples/
. - Lihat panduan Intel untuk melakukan porting dari ARM NEON ke Intel SSE.
- Buka Panduan Programmer NDK (
- Dukungan untuk
_FORTIFY_SOURCE
diheaders/libs/android-21
telah didokumentasikan, yang muncul dalam r10 (saatandroid-21
masih disebutAndroid-L
), tetapi tidak disertai dokumentasi.
Untuk informasi selengkapnya, lihat Perbaikan bug penting di bawah.
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. - Perbaikan bug penting:
-
- Error compiler internal dengan GCC4.9/aarch64 yang menyebabkan pesan error berikut telah diperbaiki (Masalah 77564):
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- Pembuatan kode yang salah dari GCC4.9/arm telah diperbaiki. (Masalah 77567)
- Error compiler internal dengan GCC4.9/mips yang melibatkan inline-assembly telah diperbaiki. (Masalah 77568)
- Kode salah yang dihasilkan GCC4.9/arm untuk
x = (cond) ? y : x
telah diperbaiki. (Masalah 77569)- GCC4.9/aarch64 dan Clang3.5/aarch64 telah diperbaiki untuk mengatasi Cortex-A53 erratum (835769) secara default. Nonaktifkan solusi alternatif dengan menentukan
-mno-fix-cortex-a53-835769
. - 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
, danASensor_isWakeUpSensor
. stdatomic.h
telah diperbaiki untuk meningkatkan kompatibilitas dengan GCC 4.6, dan memberikan dukungan untuk header<atomic>
.sys/ucontext.h
dansys/user.h
telah ditambahkan ke semua level API. Headersignal.h
sekarang menyertakan<sys/ucontext.h>
. Anda dapat menghapus semua definisistruct 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
danclock_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
, dandlmalloc
. - 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
menjadiint
dalam fungsi berikut:strtoll_l
,strtoull_l
,wcstoll_l
, danwcstoull_l
. - Fungsi berikut telah dipulihkan ke arsitektur 64-bit:
arc4random
,arc4random_buf
, danarc4random_uniform
. cxa_*
serta operatornew
dandelete
telah dikembalikan kelibstdc++.so
. Perubahan ini mengembalikan perilaku r9d; versi r10 sebelumnya yang berisi file placeholder.
- Kode tombol TV lainnya telah ditambahkan:
- 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=
dalammake-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.
- Perbaikan header dan library berikut telah dibuat untuk
- 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
daninclude-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)
- Menentukan -Os (
Android NDK r10b (September 2014)
- 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:
- Perbaikan bug lainnya:
-
stdio.h
telah dihapus dari direktoriinclude-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/
dansources/third_party/googletest/README.NDK
telah diperbaiki. (Masalah 74069.) - Perbaikan berikut telah dibuat untuk header Android-L:
- Fungsi berikut telah ditambahkan ke
ctype.h
danwchar.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()
. cmsg_nxthdr
telah diganti namanya menjadi__cmsg_nxthdr
.__libc_malloc_dispatch
telah dihapus.- Prototipe
ptrace()
telah diubah menjadilong ptrace(int, ...);
. sha1.h
telah dihapus.android_dlextinfo
telah diperluas padaandroid/dlext.h
.__NDK_FPABI__
telah dianotasi untuk fungsi yang menerima atau menampilkan nilai jenis mengambang atau ganda distdlib.h
,time.h
,wchar.h
, dancomplex.h
.
- Perubahan lainnya:
-
mipsel-linux-android-4.9
danmips64el-linux-android-4.9
telah diupdate, mengimplementasikan tata letak direktori multilib baru, dan memberikan dukungan untuk gdb-7.7cpu-features
telah disempurnakan untuk mendeteksi lebih banyak fitur arm64. (Daftar perubahan 100339).
Android NDK r10 (Juli 2014)
- 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
danall64
untukAPP_ABI
.APP_ABI=all32
setara denganAPP_ABI=armeabi,armeabi-v7a,x86,mips
.APP_ABI=all64
setara denganAPP_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
keApplication.mk
, atau dengan mengekspornya sebagai variabel lingkungan dari command line. - Untuk toolchain mandiri, gunakan opsi
--toolchain=
dalam skripmake-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
atau4.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: - Error Clang 3.3/3.4 berikut telah diperbaiki:
llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* llvm::MDBuilder::createBranchWeights(llvm::ArrayRef
(Masalah 57381).): Assertion Weights.size() >= 2 && "Need at least two branch weights!" 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). - libc++ telah diperbaiki sehingga kini mengompilasi
- Perbaikan bug lainnya:
-
- Header telah diperbaiki:
ssize_t
32-bit telah diperbaiki menjadiint
, bukanlong int
.WCHAR_MIN
danWCHAR_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, danpread64
,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: 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 penggunaanstrrchr()
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.
include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int);
(Daftar perubahan 91185). - 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
.
Android NDK r9d (Maret 2014)
- 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 kelibs/armeabi-v7a
. Agar make berperilaku sesuai yang diharapkan, Anda tidak boleh menentukanarmeabi-v7a
danarmeabi-v7a-hard
sebagai target make (misalnya, pada APP_ABI= line). Melakukannya menyebabkan salah satu darinya diabaikan. Perhatikan bahwaAPP_ABI=all
masih setara denganarmeabi armeabi-v7a x86 mips
. - Skrip
make-standalone-toolchain.sh
menyalin library tambahan pada direktori/hard
. TambahkanCFLAGS
danLFLAGS
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
danEXPORT_ASMFLAGS
untuk target x86. Skripndk-build
menggunakanprebuilts/*/bin/yasm*
untuk membuatLOCAL_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
atauAPP_STL := c++_shared
diApplication.mk
. Anda dapat membuat ulang dari sumber melaluiLIBCXX_FORCE_REBUILD := true
- Jalankan
make-standalone-toolchain.sh --stl=libc++
untuk membuat toolchain mandiri dengan header/lib libc++.
CPLUSPLUS-SUPPORT.html
. (Masalah 36496) - Tambahkan
- Dukungan untuk compiler Clang 3.4 telah ditambahkan. Opsi
- 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
- Mac OS X:
- 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 diandroid/asset_manager.h
telah diperbaiki untuk Android API level 13 dan yang lebih tinggi. (Masalah 64988)#include
yang hilang diandroid/rect_manager.h
telah diperbaiki untuk Android API level 14 dan yang lebih baru.JNICALL
telah ditambahkan keJNI_OnLoad
danJNI_OnUnload
dijni.h
. Perhatikan bahwaJNICALL
ditentukan sebagai__NDK_FPABI__
Untuk informasi selengkapnya, lihatsys/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
, danscalblnl
telah ditambahkan ke x86libm.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 memanggilstd::terminate()
, sehingga pengendalistd::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 memicuonSystemUiVisibilityChange
, serta tidak memulihkan mode imersif.
- Skrip
ndk-build
telah diperbaiki untuk menambahkan-rpath-link=$SYSROOT/usr/lib
dan-rpath-link=$TARGET_OUT
agar dapat menggunakanld.bfd
untuk menautkan file yang dapat dieksekusi. (Masalah 64266)-Bsymbolic
telah dihapus dari semua build STL.ndk-gdb-py.cmd
telah diperbaiki dengan menetapkanSHELL
sebagai variabel lingkungan, bukan meneruskannya kepython.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. - Perbaikan Header:
- Perubahan lainnya:
-
- Izin eksekusi telah diterapkan ke semua skrip
*cmd
yang sebelumnya dimaksudkan untuk digunakan hanya dalam shellcmd.exe
, sebagai jaga-jaga jika developer lebih suka menggunakanndk-build.cmd
di cygwin, daripada skripndk-build
yang direkomendasikan. - Kecepatan skrip
make-standalone-toolchain.sh
telah ditingkatkan dengan memindahkannya, bukan menyalinnya, jika direktori tujuan yang ditentukan tidak ada.
- Izin eksekusi telah diterapkan ke semua skrip
Android NDK r9c (Desember 2013)
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
menjadipoll(struct pollfd *, nfds_t, int);
dalampoll.h
. utimensat
telah ditambahkan kelibc.so
untuk Android API level 12 dan 19. Library tersebut sekarang disertakan untuk semua Android API level 12 hingga 19.futimens
telah diperkenalkan ke dalamlibc.so
, untuk Android API level 19.clock_settime()
danclock_nanosleep()
yang hilang telah ditambahkan ketime.h
untuk Android API level 8 dan yang lebih baru.CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,
danCLOCK_BOOTTIME_ALARM
telah ditambahkan dalamtime.h.
CLOCK_REALTIME_HR
danCLOCK_MONOTONIC_HR.
yang tidak digunakan lagi telah dihapus
- Prototipe telah diubah dari
- 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 jendelacmd.exe
saatLOCAL_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 bagianstack:
yang tidak berisipc
,eip
, atauip
. 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.
- Perbaikan Header:
- 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 kendk-build
. Dengan setelan ini,ndk-build
tidak berusaha mencariNDK_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), danAPP_*
lainnya yang tercantum dalamApplication.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, skripndk-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 melaporkanAPP_ABI
pada saat kompilasi. - Alat
ar
telah digunakan dalam mode Deterministik (opsi-D
) untuk membuat library statis. (Masalah 60705)
Android NDK r9b (Oktober 2013)
- Perubahan penting:
-
include/android/*h
danmath.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, lihattests/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 eksporGCC_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)
- Masalah terkait
- Perbaikan bug lainnya:
-
- Perbaikan header
- ARM
WCHAR_MIN
danWCHAR_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 statusTCP_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
danimaxdiv
yang tidak ada telah dihapus dari headerinttypes.h
. - Masalah terkait nilai yang ditampilkan
pthread_exit()
danpthread_self()
telah diperbaiki. (Masalah 60686) - Fungsi
mkdtemp()
yang hilang telah ditambahkan, yang sudah ada dalam headerbionic
stdlib.h
.
- ARM
- 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 untukssax-instructions
danfenv
. - 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, lihatNDK-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)
- Perbaikan header
- 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, lihattests/device/test-openmp
- Ukuran
ld.mcld
telah dikurangi secara signifikan (1,5 MB dari sebelumnya 3,5 MB untukld.bfd
dan 7,5 MB untukld.gold
), menghasilkan peningkatan kecepatan sekitar 20%. LOCAL_CONLYFLAGS
danAPP_CONLYFLAGS
telah ditambahkan untuk menentukan opsi yang berlaku hanya untuk C tetapi tidak untuk C++.LOCAL_CFLAGS
danAPP_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.
- OpenMP telah diaktifkan untuk semua build GCC. Untuk menggunakan fitur ini, tambahkan flag berikut ke setelan build Anda:
Android NDK r9 (Juli 2013)
- Perubahan penting:
-
- Dukungan untuk Android 4.3 (API level 18) telah ditambahkan. Untuk informasi selengkapnya, lihat
STABLE-APIS.html
contoh kode baru disamples/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
, eksporNDK_TOOLCHAIN_VERSION=4.8
atau tambahkan dalamApplication.mk
. - Untuk build mandiri, gunakan opsi
--toolchain=
padamake-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 sepertisources/cxx-stl/stlport/stlport/stl/config/features.h
, baris #311. Untuk informasi selengkapnya, lihat Perubahan 55460Catatan: 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. - Untuk build
- 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
dalamLOCAL_LDFLAGS
atauAPP_LDFLAGS
untuk mengaktifkan MCLinker. - Alat
ndk-depends
yang mencetak dependensi library ELF telah ditambahkan. Untuk informasi selengkapnya, lihatNDK-DEPENDS.html
: (Masalah 53486)
- Dukungan untuk Android 4.3 (API level 18) telah ditambahkan. Untuk informasi selengkapnya, lihat
- 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
danlibc.a
telah diperbaiki untuk mendukung fungsiwait4()
. (Masalah 19854)- File x86 libc.so dan libc.a telah diupdate untuk menyertakan fungsi
clone()
. - Bug
LOCAL_SHORT_COMMANDS
telah diperbaiki, di manalinker.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 Thumbbx pc
ataublx pc
telah diperbaiki. (Masalah 56962, Masalah 36149) - MIPS
gdbserver
telah diperbaiki agar mencariDT_MIPS_RLD_MAP
, bukanDT_DEBUG
. (Masalah 56586) - Dependensi melingkar dalam skrip ndk-build telah diperbaiki, misalnya: Jika A->B dan B->B, maka B dihapus build. (Masalah 56690)
- Masalah penanganan peristiwa potensial pada
- 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 perintahndk-build clean
. (Perubahan 54461, Perubahan 54480) - Opsi
NDK_ANALYZE=1
telah dimodifikasi agar menjadi lebih sederhana. gnu-libstdc++/Android.mk
telah diperbaiki agar menyertakan jalurbackward/
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 urutanCPU_ABIS
, bukanAPP_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 tentangtypedef
_Unwind_Control_Block
yang tidak konsisten telah diperbaiki. (Masalah 54426) - Skrip
awk
telah diperbaiki untuk menangani fileAndroidManifest.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 direktoriprebuilts/
guna mendeteksi apakah host berjenis 32-bit atau 64-bit.- Opsi
-integrated-as
Clang 3.2 telah diperbaiki. - Data pengendali model ringkas
pr1
danpr2
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)
- Skrip
- Perubahan lainnya:
-
- Perbaikan Header
- Header telah dimodifikasi untuk menjadikan
__set_errno
sebagai fungsi inline, karena__set_errno
dalamerrno.h
sudah tidak digunakan lagi, danlibc.so
tidak lagi mengekspornya. elf.h
telah dimodifikasi untuk menyertakanstdint.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 mengambilconst AInputEvent* motion_event
. (Masalah 55873) malloc_usable_size
telah diperbaiki untuk mengambilconst void*
. (Masalah 55725)- stdint.h telah diperbaiki agar lebih kompatibel dengan C99. (Perubahan 46821)
wchar.h
telah dimodifikasi agar tidak menentukan ulangWCHAR_MAX
danWCHAR_MIN
- Deklarasi
<inttypes.h>
telah diperbaiki untuk makroPRI
danSCN
terkait pointer. (Masalah 57218) - Header
sys/cdefs.h
telah diubah, sehingga__WCHAR_TYPE__
adalah 32-bit untuk level API di bawah 9, yang berartiwchat_t
adalah 32-bit untuk semua level API. Untuk memulihkan perilaku sebelumnya, tentukan variabel boolean_WCHAR_IS_8BIT
. (Masalah 57267)
- Header telah dimodifikasi untuk menjadikan
- 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 librarystlport
dan jugagnustl
, saat Anda menentukan opsi--stl=stlport
. Untuk informasi selengkapnya, lihatSTANDALONE-TOOLCHAIN.html
. - Skrip
make-standalone-toolchain.sh
telah diupdate sehingga opsi--llvm-version=
membuat skrip$TOOLCHAIN_PREFIX-clang
dan$TOOLCHAIN_PREFIX-clang++
selainclang
danclang++
, 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 melakukanconst_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.
- Flag
-mldc1-sdc1
telah ditambahkan ke compiler Clang dan MIPS GCC. Secara default, compiler menyelaraskan objek 8 byte dengan benar dan menghasilkan instruksildc1
dansdc1
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 operasildc1
dansdc1
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 daripadaAPP_MIN_PLATFORM_LEVEL
.APP_PLATFORM_LEVEL
mungkin lebih rendah daripadaAPP_PLATFORM
dijni/Application.mk
karena NDK tidak memiliki header untuk semua level. Dalam kejadian ini, level aktualnya digeser ke bawah.APP_MIN_PLATFORM_LEVEL
ditetapkan olehandroid:minSdkVersion
dalam manifes aplikasi Anda. (Masalah 39752) - Metode
android_getCpuIdArm()
danandroid_setCpuArm()
telah ditambahkan kecpu-features.c
. Penambahan ini memudahkan pengambilan informasi ARM CPUID. (Masalah 53689) ndk-build
telah dimodifikasi agar menggunakanas/ld
GCC 4.7 untuk kompilasi Clang.Catatan: Di GCC 4.7,
monotonic_clock
danis_monotonic
masing-masing telah diubah namanya menjadisteady_clock
danis_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.
- Peringatan telah ditambahkan tentang apakah
- Skrip build telah diupdate, sehingga jika
APP_MODULES
tidak ditentukan dan hanya library statis yang tercantum diAndroid.mk
, skrip akan membangun semuanya secara paksa. (Masalah 53502) ndk-build
telah ditambahkan untuk mendukung jalur absolut diLOCAL_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 jalurlibraries/gdbserver
dari$PROJECT/libs
default. Untuk informasi selengkapnya, lihatOVERVIEW.html
: - Default skrip ndk-build telah diubah untuk mengompilasi kode dengan perlindungan string format
-Wformat -Werror=format-security
. Anda dapat menetapkanLOCAL_DISABLE_FORMAT_STRING_CHECKS=true
untuk menonaktifkannya. Untuk informasi selengkapnya, lihatANDROID-MK.html
- Dukungan pretty-print STL telah ditambahkan di
ndk-gdb-py
. Untuk informasi selengkapnya, lihatNDK-GDB.html
. - Pengujian berdasarkan framework googletest telah ditambahkan.
- Notifikasi telah ditambahkan ke skrip build toolchain yang memperingatkan Anda jika shell saat ini
bukan
bash
.
- Perbaikan Header
Android NDK r8e (Maret 2013)
- Perubahan penting:
-
- Set toolchain host 64-bit (akhiran nama paket
*-x86_64.*
) telah ditambahkan. Untuk informasi selengkapnya, lihatCHANGES.HTML
danNDK-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, lihatCHANGES.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
, danLOCAL_SHARED_LIBRARIES
. Untuk informasi selengkapnya, lihatCHANGES.HTML
. (Masalah 39378)
- Set toolchain host 64-bit (akhiran nama paket
- 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 dansteady_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
, fungsidistance_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
dalamuncaught_exception()
telah diperbaiki. (Perubahan 50236) - Error bus
STLport
dalam menangani pengecualian karena aksesDW_EH_PE_udata2
,DW_EH_PE_udata4
, danDW_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)
- Skrip build untuk membuat semua toolchain di
- Perbaikan bug lainnya:
-
- Header NDK telah diperbaiki:
- Definisi
size_t
,ssize_t
, danptrdiff_t
yang berlebihan telah dihapus. - Header
fenv.h
MIPS dan ARM telah diperbaiki. stddef.h
telah diperbaiki agar tidak menetapkan ulangoffsetof
karena sudah ada dalam toolchain.elf.h
telah diperbaiki untuk memuatElf32_auxv_t
danElf64_auxv_t
. (Masalah 38441)- Definisi C++
#ifdef
dalam file headerOpenSLES_AndroidConfiguration.h
telah diperbaiki. (Masalah 53163)
- Definisi
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 librarylibgcc_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
danclang++
dalam compiler NDK mandiri telah diperbaiki untuk mendeteksi-cc1
dan agar tidak menentukan-target
saat ditemukan. ndk-build
telah diperbaiki untuk mengamatiNDK_APP_OUT
yang ditetapkan dalamApplication.mk
.libc.so
danlib.a
X86 yang tidak menyertakan fungsisigsetjmp
dansiglongjmp
yang sebagaimana dinyatakan dalamsetjmp.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 definisiLOCAL_PATH
telah diperbaiki. (Masalah 42841)
- Header NDK telah diperbaiki:
- 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, lihatCHANGES.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 direktoriobj/local/<abi>/
project. (Masalah 40302)__ARM_ARCH_5*__
telah dihapus dari skriptoolchains/*/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 karenald.gold
tidak tersedia.--plugin
dan--plugin-opt
telah diaktifkan untukld.gold
di GCC 4.6/4.7.--text-reorder
telah diaktifkan untukld.gold
di GCC 4.7.- GNU libstdc++ telah dikonfigurasi dengan
_GLIBCXX_USE_C99_MATH
yang tidak menentukan skripisinf
pada header bionic. Untuk informasi selengkapnya, lihatCHANGES.html
. APP_LDFLAGS
telah ditambahkan ke skrip build. Untuk informasi selengkapnya, lihatANDROID-MK.html
.- Skrip build telah diupdate agar
NDK_LOG=0
dapat menonaktifkanNDK_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 daripentiumpro
dangeneric
menjadii686
danatom
. - Skrip build toolchain telah disempurnakan:
- Kondisi race dalam
build-gcc.sh
telah diperbaiki untuk jenis buildmingw
yang mencegah banyak pemrosesan build paralel. build-gabi++.sh
danbuild-stlport.sh
telah diupdate sehingga kini dapat dijalankan dari paket NDK. (Masalah 52835)run-tests.sh
telah diperbaiki di koleksi utilitasMSys
.- 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
danstlport_static.a
tanpa visibilitas tersembunyi.
- Kondisi race dalam
Android NDK r8d (Desember 2012)
- 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 variabelNDK_TOOLCHAIN_VERSION=4.7
atau tambahkan keApplication.mk
. - Untuk build mandiri, tambahkan opsi
--toolchain=
kemake-standalone-toolchain.sh
, misalnya:--toolchain=arm-linux-androideabi-4.7
Catatan: Fitur ini bersifat eksperimental. Silakan mencobanya dan laporkan masalah apa pun.
- Untuk
- Dukungan pengecualian
stlport
telah ditambahkan melalui gabi++. Ingat bahwa gabi++ baru bergantung padadlopen
dan kode terkait, artinya:- Anda tidak dapat lagi membuat file executable statis menggunakan opsi
-static
atau menyertakanlibstlport_static.a
menggunakanAPP_STL := stlport_static
. (Anda masih dapat menggunakan opsi-static
dengan toolchain mandiri.) Mengompilasi file executable dinamis menggunakaninclude $(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.
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.
- Anda tidak dapat lagi membuat file executable statis menggunakan opsi
- 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 kesources/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)
- 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:
- Perbaikan bug penting:
-
- Pembuatan ulang file objek yang tidak perlu saat menggunakan skrip
ndk-build
telah 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)
- Pembuatan ulang file objek yang tidak perlu saat menggunakan skrip
- Perbaikan bug lainnya:
-
- Perbaikan file header NDK:
__WINT_TYPE__
danwint_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__
dalamsys/cdefs.h
telah ditambahkan. (Masalah 14627) - Header pada
byteswap.h
dandirent.h
telah ditata ulang. limits.h
telah diperbaiki untuk menyertakanpage.h
yang menyediakan setelanPAGE_SIZE
. (Masalah 39983)- Jenis nilai yang ditampilkan
glGetAttribLocation()
danglGetUniformLocation()
telah diperbaiki dariint
keGLint
. - 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
, danHOST_MAKE
. - Masalah telah diperbaiki untuk
ld.gold
pada buildfsck_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.
- Perbaikan file header NDK:
- 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 dilib32/
.
Android NDK r8c (November 2012)
- 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
, eksporNDK_TOOLCHAIN_VERSION=clang3.1
atau tambahkan setelan variabel lingkungan ini keApplication.mk
. - Untuk build mandiri, tambahkan
--llvm-version=3.1
kemake-standalone-toolchain.sh
dan gantiCC
danCXX
di makefile Anda dengan<tool-path>/bin/clang
dan<tool-path>/bin/clang++
. Untuk detailnya, lihatSTANDALONE-TOOLCHAIN.html
.
Catatan: Fitur ini bersifat eksperimental. Silakan mencobanya dan laporkan masalah apa pun.
- Untuk
- 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 linkerld.bfd
dengan menambahkanLOCAL_LDFLAGS += -fuse-ld=bfd
keAndroid.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]
danndk-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
hinggaandroid-13
padaAPP_PLATFORM
,project.properties
ataudefault.properties
terhubung denganandroid-9
, bukanandroid-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). OpsiAPP_PIE
baru memungkinkan Anda untuk mengontrol perilaku ini. Untuk lebih detailnya, lihatAPPLICATION-MK.html
.Catatan: Semua API di atas level 14 tetap terhubung dengan
platforms/android-14
, dan tidak adaplatforms/android-N
baru yang ditambahkan. ndk-build
telah dimodifikasi untuk memberikan peringatan jika API level yang disesuaikan lebih besar daripadaandroid:minSdkVersion
dalamAndroidManifest.xml
project.
- Logika build telah dimodifikasi sehingga project yang menetapkan
- Library helper
cpu-features
telah diupdate untuk menyertakan lebih banyak fitur khusus ARM. Untuk lebih detailnya, lihatsources/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 dancrt*.o
ditautkan dengan benar. -mfpu=vfpv3-d16
telah ditambahkan kendk-build
, bukan ke opsi-mfpu=vfp
yang digunakan dalam rilis sebelumnya.
- Jenis build ini telah dimodifikasi untuk meneruskan parameter
- 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:
- 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 dariecho.exe
bawaan Windows.\r
berlebihan menyebabkangdb.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 namatypeinfo
secara default. Untuk detail selengkapnya, lihattoolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo
. (Masalah 22165)- Masalah pada konteks
null
padacp/mangle.c::write_unscoped_name
GCC 4.6, yakni GCC dapat mengalami error jika konteksnya adalahnull
dan dihilangkan referensinya dalamTREE_CODE
, telah diperbaiki. - Error GCC 4.4.3 pada definisi jenis khusus NEON ARM untuk float telah diperbaiki. (Masalah 34613)
- Kesalahan Implementasi
_IteWrapper::operator*()
internalSTLport
, 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
diLOCAL_SRC_FILES
juga menggunakanAPP_STL
telah diperbaiki. DenganAPP_STL
, skripndk-build
akan menelusuri file C++ diLOCAL_SRC_FILES
sebelum menambahkan jalurheader/lib
STL ke kompilasi.ndk-build
telah dimodifikasi untuk memfilter akhiran.arm
dan.neon
sebelum penelusuran; jika tidak, item dalamLOCAL_SRC_FILES
sepertimyfile.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 memilikitag_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 denganbinutils-2.21
yang lebih baru telah dihapus. - Masalah pada
-mthumb
dan-march=armv7-a
dalam kompilasistdc++
GNU telah diperbaiki, dengan memodifikasimake-standalone-toolchain.sh
agar mengisiheaders/libs
dalam subdirektoriarmv7-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 darichar
. (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 ABIndk-build
x86.- Perbaikan khusus MIPS:
- Endian-ness
STLport
telah diperbaiki dengan menetapkan_STLP_LITTLE_ENDIAN
ke 1 saat mengompilasilibstlport_*
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)
- Endian-ness
- 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 saatAPP_ABI
berisiall
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 peristiwasolib
. (Masalah 37677) - Perbaikan untuk membuat upaya berulang guna menemukan titik henti sementara
solib
telah ditambahkan. Sekarang, GDB akan mencoba kembalienable_break()
selama setiap panggilan kesvr4_current_sos()
sampai berhasil. (Perubahan 43563) - Masalah saat
gdb
tidak berhenti pada titik henti sementara yang ditempatkan di librarydlopen-ed
telah diperbaiki. (Masalah 34856) SIGILL
dalam linker dinamis saat memanggildlopen()
telah diperbaiki, dalam sistem yang menghilangkan/system/bin/linker
dari simbol dan menerapkanrtld_db_dlactivity()
sebagaiThumb
, karena tidak mempertahankanLSB
sym_addr
. (Masalah 37147)
- 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
- Masalah toolchain mandiri yang tidak dapat diakses oleh sebagian pengguna
karena menjalankan
- 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
dilinux/sysctl.h
danlinux/icmp.h
untuk menghindari konflik dengan#define __unused
disys/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
, danULONG_LONG_MAX
telah dipindahkan dari<pthread.h>
ke<limits.h>
.
- Kode
- 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 jikaSTLport
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 mengeksporatexit()
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 olehcrtbegin_*.o
.Jika project Anda ditautkan dengan opsi
-nostdlib -Wl,--no-undefined
, Anda harus memberikan__dso_handle
Anda sendiri karena dalam kasus inicrtbegin_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 entriplt
telah diperbaiki agar menghasilkan bentukfunction@plt
yang lebih mudah dibaca. - Simbol-simbil berikut, yang diperkenalkan di GCC 4.6
libgcc.a
, telah dihapus dari librarylibc.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 dalamcrt*_so.S
MIPS.ndk-gdb
telah diupdate sehingga hanya menerima baris terakhir output untukndk-build
DUMP_XXXX
. Perubahan ini memastikan jikaApplication.mk
atauAndroid.mk
mencetak sesuatu dengan sintaks$(info ...)
, itu tidak akan disertakan dalam hasilDUMP_XXXX
. (Info selengkapnya)
- Header NDK telah diperbaiki:
- Perubahan lainnya:
-
- Header
arch-x86
danarch-mips
telah dihapus dariplatforms/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 menggunakanLOCAL_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-7native-activity
dari Android-9 hingga Android-10native-audio
dari Android-9 hingga Android-10native-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 dicrtbegin_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 memanggilrun-tests.sh
danstandalone/run.sh
dengan berbagai kondisi telah ditambahkan. Skriprun-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.
- Header
Android NDK r8b (Juli 2012)
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, sehinggagdb
pada host dapat menetapkan titik henti sementara di__dl_rtld_db_dlactivity
dan mewaspadai aktivitas linker (misalnya, memindai ulang simbolsolib
saatdlopen()
dipanggil).
- Alat untuk meneruskan flag
ndk-build clean
pada Windows telah diperbaiki, yang sebelumnya gagal menghapus./libs/*/lib*.so
.ndk-build.cmd
telah diperbaiki untuk menampilkanERRORLEVEL
bukan nol saatmake
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.
- Masalah
- Perubahan penting:
-
- Toolchain GCC 4.6 (
binutils
2.21 dengangold
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
diApplication.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. TambahkanLOCAL_LDLIBS += -fuse-ld=gold
padaAndroid.mk
untuk mengaktifkannya. - Program yang dikompilasi dengan
-fPIE
memerlukanGDB
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 mempertahankanp_align
danp_flags
yang asli di bagianGNU_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.
- GCC 4.6 sekarang adalah toolchain default. Anda dapat menetapkan
- 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:
- Nonaktifkan perlindungan NX dengan menetapkan opsi
--execstack
untuk assembler dan-z execstack
untuk linker. - Nonaktifkan hardening data internal dengan menetapkan opsi
-z norelro
dan-z lazy
untuk linker. - 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. - Nonaktifkan perlindungan NX dengan menetapkan opsi
- Branding untuk file Android yang dapat dieksekusi telah ditambahkan pada bagian
.note.ABI-tag
(dalamcrtbegin_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 */ }
- Toolchain GCC 4.6 (
- Perbaikan bug lainnya:
-
- Relokasi
mips-linux-gnu
yang terpotong telah diperbaiki agar sesuai dengan masalahR_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
dantwo-libs
telah diperbaiki sehingga projecttests
di bawahnya dapat dikompilasi.
- Relokasi
- Perubahan Lainnya:
-
- Lokasi biner telah diubah:
gdbserver
telah dipindahkan daritoolchain/<arch-os-ver>/prebuilt/gdbserver
keprebuilt/android-<arch>/gdbserver/gdbserver
.- Nama awalan toolchain x86 telah diganti dari
i686-android-linux-
menjadii686-linux-android-
. sources/cxx-stl/gnu-libstdc++/include
danlib
telah dipindahkan kesources/cxx-stl/gnu-libstdc++/4.6
saat dikompilasi dengan GCC 4.6, atausources/cxx-stl/gnu-libstdc++/4.4.3
saat dikompilasi dengan GCC 4.4.3.libbfd.a
danlibintl.a
telah dipindahkan darilib/
kelib32/
.
- 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 perintahclone
dan hanya menggunakancheckout
untuk direktori yang diperlukan untuk membuat biner toolchain NDK. - Skrip
build-host-gcc.sh
danbuild-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. ElemenAF_LINK
dansockaddr_dl
yang dideskripsikannya berlaku khusus untuk BSD (artinya, elemen tersebut tidak ada di Linux).
- Lokasi biner telah diubah:
Android NDK r8 (Mei 2012)
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 definisiAPP_ABI
di fileApplication.mk
untuk membuat platform MIPS. Misalnya, baris berikut menginstruksikanndk-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 memanggilmake-standalone-toolchain.sh
. Lihatdocs/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.
- 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
- Perbaikan bug penting:
-
- Kesalahan ketik dalam penerapan GAbi++, yakni hasil
dynamic_cast<D>(b)
objek class dasarb
ke class turunanD
keliru disesuaikan dengan arah berlawanan dari class dasar, telah diperbaiki. (Masalah 28721) - Masalah
make-standalone-toolchain.sh
gagal menyalinlibsupc++.*
telah diperbaiki.
- Kesalahan ketik dalam penerapan GAbi++, yakni hasil
- Perbaikan bug lainnya:
-
ndk-build.cmd
telah diperbaiki untuk memastikan bahwandk-build.cmd
berfungsi dengan benar meskipun pengguna menentukan ulang variabel lingkunganSHELL
, yang dapat diubah saat menginstal berbagai alat pengembangan di lingkungan Windows.
Android NDK r7c (April 2012)
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
).
- 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,
- 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 olehndk-gdb
. - Dukungan telah ditambahkan untuk membuat modul dengan ratusan atau bahkan ribuan file sumber dengan menentukan
LOCAL_SHORT_COMMANDS
ketrue
dalamAndroid.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
.
- Dukungan telah ditambahkan untuk direktori output kustom melalui variabel lingkungan
- Perbaikan bug lainnya:
-
- Implementasi
android_getCpuCount()
pada library helpercpufeatures
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.
- Implementasi
Android NDK r7b (Februari 2012)
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, bacadocs/ANDROID-ATOMICS.html
.- Dikembalikan ke
binutils
2.19 untuk memperbaiki masalah debug yang muncul pada NDK r7 (yang dialihkan kebinutils
2.20.1). ndk-build
telah diperbaiki di Linux 32-bit. Error pengemasan menempatkan file executableawk
versi 64-bit padaprebuilt/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.
- Bug stack overflow/loop tanpa batas yang terjadi saat mencoba memanggil
- Toolchain mandiri telah diperbaiki untuk membuat biner yang tepat saat menggunakan
-lstdc++
(misalnya, menautkan ke waktu proses GNUlibstdc++
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 menemukanlibsupc++.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 diApplication.mk
. Untuk detail selengkapnya, lihatdocs/APPLICATION-MK.html
.
- Aktifkan pengecualian dan/atau RTTI secara eksplisit dalam modul atau
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 olehps
, 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-alihmemcpy
distring::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
danPOPCNT
). Lihatdocs/CPU-FEATURES.html
untuk detail selengkapnya. docs/NDK-BUILD.html
telah diupdate untuk menyebutkanNDK_APPLICATION_MK
, alih-alihNDK_APP_APPLICATION_MK
untuk memilih fileApplication.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
, bukanC:\Some\Dir
.
- Jika awalan drive Cygwin bukan
- Cygwin:
ndk-build
tidak mencoba menggunakan alat Windows native pada$NDK/prebuilt/windows/bin
dengan versi Cygwin dan/atau GNU Make tertentu.
- Saat aplikasi Anda menggunakan waktu proses GNU
Android NDK r7 (November 2011)
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, lihatdocs/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/.
- API multimedia native telah ditambahkan berdasarkan standar Khronos Group OpenMAX AL 1.0.1. Header
- Dukungan CCache telah ditambahkan. Untuk mempercepat proses rebuild skala besar, tetapkan variabel lingkungan
NDK_CCACHE
keccache
(atau jalur keccache
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
keall
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 diApplication.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 memanggilndk-build
dari command line, yang merupakan cara cepat untuk memastikan bahwa project Anda dibangun untuk semua ABI yang didukung tanpa mengubahApplication.mk file
project. Contoh:ndk-build APP_ABI=all
- Variabel
LOCAL_CPP_FEATURES
telah ditambahkan diAndroid.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. Lihatdocs/ANDROID-MK.html
dandocs/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 memanggilndk-build
dari subdirektori hierarki project Anda, atau jika Anda menetapkanNDK_PROJECT_PATH
untuk menunjuk ke direktori tertentu.
- NDK API resmi telah ditambahkan untuk Android 4.0 (API level 14), yang menambahkan fitur
native berikut ke platform:
- 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 skripndk-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>
) jikaAPP_MODULES
tidak ditentukan dalamApplication.mk
Anda. Misalnya, jika modul tingkat atasfoo
mengimpor modulbar
, lalu keduanyalibfoo.so
danlibbar.so
disalin ke lokasi penginstalan. Sebelumnya, hanyalibfoo.so
yang disalin, kecuali Anda juga mencantumkanbar
diAPP_MODULES
Anda. Jika Anda menentukanAPP_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 statisbar
yang mengimpor library statiszoo
,libfoo.so
sekarang akan ditautkan denganlibbar.a
danlibzoo.a
.
- Library bersama yang diimpor kini telah diinstal secara default ke lokasi penginstalan target (
- 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 didocs/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 didocs/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 mengompilasifoo.cpp
danbar.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()
atauglGetProcAddress()
. 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
Android NDK r6b (Agustus 2011)
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
dansize_t
dalam sistem khusus x86 saat keduanya digunakan dengan toolchain x86 mandiri telah diperbaiki.
- Build saat
Android NDK r6 (Juli 2011)
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 fileApplication.mk
guna membuat aplikasi untuk platform x86. Misalnya, baris berikut menginstruksikanndk-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 memanggilmake-standalone-toolchain.sh
. Lihatdocs/STANDALONE-TOOLCHAIN.html
untuk detail selengkapnya. - Alat
ndk-stack
baru memungkinkan Anda menerjemahkan pelacakan tumpukan dilogcat
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, lihatdocs/NDK-STACK.html
.
- 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
- Perubahan lainnya:
arm-eabi-4.4.0
, yang tidak digunakan lagi sejak NDK r5, telah dihapus dari distribusi NDK.
Android NDK r5c (Juni 2011)
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 didocs/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 parameterhistory_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 definisiNDK_MODULE_PATH
yang digunakan oleh sistem build sudah benar. - Jika
import-module
berhasil, maka direktori tempat modul ditemukan ke log (terlihat denganNDK_LOG=1
) akan dicetak. - Kecepatan build aplikasi yang dapat di-debug saat ada sejumlah besar direktori penyertaan dalam project telah ditingkatkan.
ndk-gdb
: Deteksi kegagalanadb shell
lebih baik dan pesan error yang dtingkatkan.<pthread.h>
: DefinisiPTHREAD_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 dibuild/core/build-binary.mk
) telah diperbaiki. - Bug yang mencegah kompilasi file assembly
.s
(file.S
tidak masalah) telah diperbaiki.
- Sekarang file objek selalu ditautkan sesuai urutan kemunculannya di
Android NDK r5b (Januari 2011)
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, tentukanNDK_USE_CYGPATH=1
di lingkungan Anda untuk menggunakancygpath -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
danIN6_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
.
Android NDK r5 (Desember 2010)
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
dannative-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.
Android NDK r4b (Juni 2010)
- 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 ABIarmeabi
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 librarycpufeatures
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.
- Menyediakan sistem build yang disederhanakan melalui perintah build
Android NDK r3 (Maret 2010)
- 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.
Android NDK r2 (September 2009)
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 objekGLSurfaceView
.
Android NDK r1 (Juni 2009)
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.