Bu sayfada, NDK'nın yayınlanan tüm kararlı sürümlerindeki değişiklikler hakkında bilgi verilmektedir. NDK'nın en yeni kararlı sürümünü veya şu anda kullanılabilen herhangi bir beta sürümünü indirmek için NDK indirmeleri sayfasına bakın.
Daha ayrıntılı bilgi için android-ndk-announce Google Grubu'na bakın ve sürüm duyurularını almak için abone olun.
Android NDK r29 (Ekim 2025)
Değişiklik günlüğü- İndirilenler
-
- Bu sürümün indirme bağlantılarını burada bulabilirsiniz.
Android NDK r28 (Şubat 2025)
Değişiklik günlüğü- İndirilenler
-
- Bu sürümün indirme bağlantılarını burada bulabilirsiniz.
Android NDK r27 LTS (Temmuz 2024)
Değişiklik günlüğü- İndirilenler
-
- Bu sürümün indirme bağlantılarını burada bulabilirsiniz.
Android NDK r26 LTS (Eylül 2023)
Değişiklik günlüğü- İndirilenler
-
- Bu sürümün indirme bağlantılarını burada bulabilirsiniz.
- Duyurular
-
- KitKat (API'ler 19 ve 20) artık desteklenmiyor.
Android NDK r25 LTS (Temmuz 2022)
Değişiklik günlüğü- İndirilenler
-
- Bu sürümün indirme bağlantılarını burada bulabilirsiniz.
- Duyurular
-
- Android 13 API'lerini içerir.
- LLVM 14 geliştirme sürümüne dayalı olarak LLVM, clang-r450784d sürümüne güncellendi.
Android NDK r24 (Mart 2022)
Değişiklik günlüğü- İndirilenler
-
- Bu sürümün indirme bağlantılarını burada bulabilirsiniz.
- Duyurular
-
-
GNU Assembler (GAS) kaldırıldı.
-fno-integrated-as
ile geliştirme yapıyorsanız bu işareti kaldırmanız gerekir. Derlemenin LLVM ile uyumlu hale getirilmesiyle ilgili tavsiyeler için Clang Taşıma Notları'na bakın. - GDB kaldırıldı. Bunun yerine LLDB'yi kullanın. ndk-gdb'nin varsayılan olarak LLDB'yi kullandığını ve Android Studio'nun yalnızca LLDB'yi desteklediğini unutmayın.
- Jelly Bean (API'ler 16, 17 ve 18) artık desteklenmiyor. NDK tarafından desteklenen minimum işletim sistemi KitKat'tır (API düzeyi 19).
- Neon olmayan cihazlar artık desteklenmemektedir. Çok az sayıda eski cihaz Neon'u desteklemez. Bu nedenle, performans artışı dışında çoğu uygulamada herhangi bir değişiklik fark edilmez.
- RenderScript derleme desteği kaldırıldı. RenderScript, Android 12'de kullanımdan kaldırıldı. Uygulamalarınızı RenderScript'ten taşımayı tamamlamadıysanız NDK r23 LTS'yi kullanabilirsiniz.
-
GNU Assembler (GAS) kaldırıldı.
Android NDK r23 LTS (Ağustos 2021)
Değişiklik günlüğü- İndirilenler
-
- Bu sürümün indirme bağlantılarını burada bulabilirsiniz.
- Duyurular
-
-
GNU Assembler (GAS) hariç olmak üzere GNU binutils kaldırıldı. GAS, sonraki sürümde kaldırılacak.
-fno-integrated-as
ile geliştirme yapıyorsanız bu işaretin kaldırılmasını engelleyen bir durum varsa hata bildirin. -
GDB desteği sona erdi. GDB, bir sonraki sürümde kaldırılacak.
Bunun yerine LLDB'yi kullanın.
ndk-gdb
'nın varsayılan olarak LLDB kullandığını unutmayın. - NDK r23, Neon olmayan sürümleri destekleyen son sürümdür. NDK r24'ten itibaren, sysroot'taki armeabi-v7a kitaplıkları Neon ile oluşturulacak. Çok az sayıda eski cihaz Neon'u desteklemez. Bu nedenle, performans iyileştirmesi dışında çoğu uygulamada herhangi bir değişiklik fark edilmez.
- Jelly Bean (API'ler 16, 17 ve 18), NDK'nın bir sonraki sürümünde desteklenmeyecek. r24 için NDK tarafından desteklenen minimum işletim sistemi KitKat (API düzeyi 19) olacaktır.
-
GNU Assembler (GAS) hariç olmak üzere GNU binutils kaldırıldı. GAS, sonraki sürümde kaldırılacak.
Android NDK r22b (Mart 2021)
Değişiklik günlüğü- İndirilenler
-
- Bu sürümün indirme bağlantılarını burada bulabilirsiniz.
- Duyurular
-
-
GNU binutils desteği sonlandırıldı ve yakında yayınlanacak bir NDK sürümünde kaldırılacak. GNU assembler'ın (
as
) bu paketin bir parçası olduğunu unutmayın.-fno-integrated-as
ile geliştirme yapıyorsanız bu işaretin kaldırılmasını engelleyen bir durum varsa hata bildirin.as
etiketini doğrudan kullanıyorsanız bunun yerineclang
etiketini kullanın. - Artık varsayılan bağlayıcı LLD'dir. ndk-build ve CMake araç zinciri dosyamız da llvm-ar ve llvm-strip kullanmaya geçiş yaptı.
- ndk-gdb artık hata ayıklayıcı olarak lldb'yi kullanıyor. gdb desteği sonlandırıldı ve gelecekteki bir sürümde kaldırılacak. gdb'ye geri dönmek için --no-lldb seçeneğini kullanın. Ancak lütfen lldb'yi neden kullanamadığınızı açıklayan bir hata bildirimi gönderin.
-
std::filesystem
desteği artık dahil. İki bilinen sorun vardır:-
Sorun
1258:
std::filesystem::perm_options::nofollow
, eski cihazlarda kullanılamayabilir. -
Sorun
1260:
std::filesystem::canonical
, eski cihazlarda mevcut olmayan bir yol iletildiğinde yanlışlıkla başarılı olur.
-
Sorun
1258:
-
GNU binutils desteği sonlandırıldı ve yakında yayınlanacak bir NDK sürümünde kaldırılacak. GNU assembler'ın (
Android NDK r21e LTS (Ocak 2021)
Değişiklik günlüğü- İndirilenler
-
- Bu sürümün indirme bağlantılarını burada bulabilirsiniz.
- Duyurular
-
-
32 bit Windows artık desteklenmemektedir. Bu durum, kullanıcıların büyük çoğunluğunu etkilemez. NDK uygulamalarını 32 bit Windows sürümlerinden oluşturmaya devam etmeniz gerekiyorsa NDK r20'yi kullanmaya devam edin.
Android geliştirici araçlarındaki bu değişiklik hakkında daha fazla bilgi için konuyla ilgili blog yayınına göz atın.
-
LLD artık test edilebilir.
AOSP, varsayılan olarak LLD kullanmaya geçti ve NDK da bunu takip edecek (zaman çizelgesi bilinmiyor). Bağlantı oluştururken
-fuse-ld=lld
parametresini ileterek uygulamanızda LLD'yi test edin. 843 numaralı sorunun, llvm-strip ve llvm-objcopy yerine binutils strip ve objcopy ile LLD kullanan derlemeleri etkileyeceğini unutmayın. -
Eski araç zinciri yükleme yolları, sonraki sürümlerde kaldırılacaktır. Bu yollar, NDK r19'dan beri kullanılmamaktadır ve NDK'da önemli miktarda yer kaplamaktadır. Kaldırılan yollar:
- platformlar
- sources/cxx-stl
- sysroot
- araç zincirleri (toolchains/llvm hariç)
make_standalone_toolchain.py
kullanıcıları da etkilenmez (ancak bu komut dosyası r19'dan beri gereksizdir). Eski araç zinciri düzeninden geçiş yapma hakkında bilgi edinmek için kullandığınız NDK sürümüne yönelik Build System Maintainers Guide'ı (Derleme Sistemi Bakımcıları Kılavuzu) inceleyin. - Play Store, Ağustos 2019'dan itibaren APK yüklerken 64 bit desteği isteyecek. Zamanı geldiğinde sürprizlerle karşılaşmamak için hemen taşımaya başlayın. Daha fazla bilgi için bu blog yayınını inceleyin.
- İmzalı ve noter onaylı bir macOS uygulama paketi artık wiki'mizden ve web sitemizden indirilebilir. Yalnızca paketlerin RPATH kullanabileceğini ve onay sürecini geçebileceğini unutmayın. Bu nedenle, macOS için geleneksel NDK paketi onaylanamaz. SDK, geleneksel paketi kullanmaya devam edecek. Uygulama paketi, Android Studio ile uyumsuzluğa neden olacak düzen değişiklikleri gerektiriyor. NDK, SDK Yöneticisi aracılığıyla indirildiğinde karantinaya alınmaz. Bu nedenle, şu anda Gatekeeper tarafından izin verilir. NDK'yı macOS için edinmenin en güvenilir yolu şu anda SDK yöneticisidir.
-
Android NDK r20b (Haziran 2019)
Değişiklik günlüğü- İndirilenler
-
- Bu sürümün indirme bağlantılarını burada bulabilirsiniz.
- Duyurular
-
-
LLD artık test edilebilir.
AOSP, varsayılan olarak LLD kullanmaya geçiş sürecindedir ve NDK da bu geçişi takip edecektir (zaman çizelgesi bilinmiyor). Bağlantı oluştururken
-fuse-ld=lld
parametresini ileterek uygulamanızda LLD'yi test edin. - Play Store, Ağustos 2019'dan itibaren APK yüklerken 64 bit desteği isteyecek. Zamanı geldiğinde sürprizlerle karşılaşmamak için hemen taşımaya başlayın. Daha fazla bilgi için bu blog yayınını inceleyin.
- Android Q API'leri eklendi.
-
LLD artık test edilebilir.
AOSP, varsayılan olarak LLD kullanmaya geçiş sürecindedir ve NDK da bu geçişi takip edecektir (zaman çizelgesi bilinmiyor). Bağlantı oluştururken
Android NDK r19c (Ocak 2019)
Değişiklik günlüğü- İndirilenler
-
- Bu sürümün indirme bağlantılarını burada bulabilirsiniz.
- Duyurular
-
-
Geliştiriciler, uygulamalarını LLD ile test etmeye başlamalıdır. AOSP, varsayılan olarak LLD'yi kullanmaya başladı ve NDK, bir sonraki sürümde varsayılan olarak LLD'yi kullanacak. LLD, büyük bir çözülmemiş sorun olmadan yayın döngüsünü tamamladığında BFD ve Gold kaldırılacak (tahmini olarak r21). Bağlantı oluştururken
-fuse-ld=lld
değerini ileterek uygulamanızda LLD'yi test edin. Not: lld, Windows'da sıkıştırılmış sembolleri şu anda desteklememektedir. 888. Sayı Clang, Windows'da sıkıştırılmış semboller de oluşturamaz. Ancak bu, Darwin veya Linux'tan oluşturulan yapılar kullanılırken sorun olabilir. - Play Store, Ağustos 2019'dan itibaren APK yüklerken 64 bit desteği isteyecek. Zamanı geldiğinde sürprizlerle karşılaşmamak için hemen taşımaya başlayın. Daha fazla bilgi için bu blog yayınını inceleyin.
-
780. sayı:
Bağımsız
araç zincirleri artık gereksiz. Clang, binutils, sysroot ve diğer araç zinciri parçaları artık
$NDK/toolchains/llvm/prebuilt/<host-tag>
konumuna yükleniyor ve Clang bunları otomatik olarak buluyor. API 26 ARM için bağımsız bir araç zinciri oluşturmak yerine derleyiciyi doğrudan NDK'dan çağırın: r19 için araç zinciri, derleme sistemlerine yeni düzene uyum sağlama fırsatı vermek amacıyla eski yola da yüklenir. Eski yollar r20'de kaldırılacak.$ $NDK/toolchains/llvm/prebuilt/
/bin/armv7a-linux-androideabi26-clang++ src.cpp make_standalone_toolchain.py
komut dosyası kaldırılmaz. Artık gereksizdir ve yukarıdaki bilgilerle uyarı verir ancak mevcut iş akışlarını korumak için komut dosyası kalır. ndk-build, CMake veya bağımsız bir araç zinciri kullanıyorsanız iş akışınızda herhangi bir değişiklik olmaz. Bu değişiklik, artık Android'e özgü bazı kodları silebilecek olan üçüncü taraf derleme sistemlerinin bakımını yapanlar için önemlidir. Daha fazla bilgi için Build System Maintainers rehberine bakın. - ndk-depends kaldırıldı. ReLinker'ın, eski Android sürümlerinde yerel kitaplık yükleme sorunları için daha iyi bir çözüm olduğuna inanıyoruz.
- 862 numaralı sorun: Clang'e yönlendiren GCC sarmalayıcı komut dosyaları, yeterince işlevsel olmadıkları için kaldırıldı.
-
Geliştiriciler, uygulamalarını LLD ile test etmeye başlamalıdır. AOSP, varsayılan olarak LLD'yi kullanmaya başladı ve NDK, bir sonraki sürümde varsayılan olarak LLD'yi kullanacak. LLD, büyük bir çözülmemiş sorun olmadan yayın döngüsünü tamamladığında BFD ve Gold kaldırılacak (tahmini olarak r21). Bağlantı oluştururken
Android NDK r18b (Eylül 2018)
Değişiklik günlüğü- İndirilenler
-
- Bu sürümün indirme bağlantılarını burada bulabilirsiniz.
- Duyurular
-
- GCC kaldırıldı.
-
LLD artık test edilebilir.
AOSP, varsayılan olarak LLD kullanmaya geçiş sürecindedir ve NDK da bu geçişi takip edecektir (zaman çizelgesi bilinmiyor). Bağlantı oluştururken
-fuse-ld=lld
parametresini ileterek uygulamanızda LLD'yi test edin. - gnustl, gabi++ ve stlport kaldırıldı.
- ICS (android-14 ve android-15) desteği kaldırıldı. Yürütülebilir dosyalar kullanan uygulamaların artık hem PIE hem de PIE olmayan yürütülebilir dosyalar sağlaması gerekmiyor.
- Play Store, Ağustos 2019'dan itibaren APK yüklerken 64 bit desteği isteyecek. Zamanı geldiğinde sürprizlerle karşılaşmamak için hemen taşımaya başlayın. Daha fazla bilgi için bu blog yayınını inceleyin.
Android NDK r17c (Haziran 2018)
Değişiklik günlüğü- İndirilenler
-
- Bu sürümün indirme bağlantılarını burada bulabilirsiniz.
- Duyurular
-
- GCC artık desteklenmiyor. NDK r18'de kaldırılacak.
-
libc++, artık CMake ve bağımsız araç zincirleri için varsayılan STL'dir. Farklı bir STL'yi manuel olarak seçtiyseniz
libc++
'ye geçmenizi önemle tavsiye ederiz. ndk-build'in varsayılan olarak STL'siz olduğunu unutmayın. Daha ayrıntılı bilgi için bu blog yayınını inceleyin. - gnustl ve stlport kullanımdan kaldırıldı ve NDK r18'de kaldırılacak.
- ARMv5 (armeabi), MIPS ve MIPS64 desteği kaldırıldı. Bu ABI'lerden herhangi birini oluşturmaya çalıştığınızda hata oluşur.
- ICS (android-14 ve android-15) desteği r18'den kaldırılacak.
- Play Store, Ağustos 2019'dan itibaren APK yüklerken 64 bit desteği isteyecek. Zamanı geldiğinde sürprizlerle karşılaşmamak için hemen taşımaya başlayın. Daha fazla bilgi için bu blog yayınını inceleyin.
Android NDK r16b (Aralık 2017)
Değişiklik günlüğü- İndirilenler
- Bu sürümün indirme bağlantılarını burada bulabilirsiniz.
- Duyurular
-
- Kullanımdan kaldırılan başlıklar kaldırıldı. Birleştirilmiş Başlıklar artık yalnızca "Başlıklar" olarak adlandırılıyor. Taşımayla ilgili ipuçları için Birleştirilmiş Başlıklar Taşıma Notları başlıklı makaleyi inceleyin.
- GCC artık desteklenmiyor. NDK'dan henüz kaldırılmayacak ancak artık geri bağlantı almayacak. gnustl'nin bazı bölümleri hâlâ Clang ile uyumlu olmadığından, libc++ varsayılan olacak kadar kararlı hale gelene kadar kaldırılamaz. Diğer STL'ler r18'de kaldırıldığında bu da kaldırılır.
libc++
beta sürümünden çıktı ve artık NDK'da tercih edilen STL oldu. r17'den itibaren, CMake ve bağımsız araç zincirleri için varsayılan STLlibc++
'dir. Farklı bir STL'yi manuel olarak seçtiysenizlibc++
'ya geçmenizi önemle tavsiye ederiz. Daha fazla bilgi için bu blog yayınını inceleyin.- ARM5 (armeabi), MIPS ve MIPS64 desteği sonlandırıldı. Bunlar artık varsayılan olarak ndk-build ile oluşturulmaz ancak açıkça adlandırılırsa oluşturulabilir ve "all", "all32" ve "all64" tarafından dahil edilir. Bunların her biri için destek r17'de kaldırıldı. CMake ve ndk-build, bu ABI'lerden herhangi birini hedeflediğinizde uyarı verir.
- API'ler
-
Android 8.1 için yerel API'ler eklendi. Bu API'ler hakkında daha fazla bilgi edinmek için Yerel API'lere genel bakış başlıklı makaleyi inceleyin.
Bu sürümdeki yenilikler ve değişiklikler hakkında daha fazla bilgi için bu değişiklik günlüğüne bakın.
Android NDK r15c (Temmuz 2017)
Değişiklik günlüğü- İndirilenler
- Bu sürümün indirme bağlantılarını burada bulabilirsiniz.
- Duyurular
-
- Birleştirilmiş başlıklar varsayılan olarak etkindir. Bu üstbilgileri nasıl kullanacağınızı öğrenmek için Birleştirilmiş Üstbilgiler başlıklı makaleye bakın.
- GCC artık desteklenmiyor. NDK'dan henüz kaldırılmamış olsa da artık geri bağlantı almıyor. gnustl'nin bazı bölümleri hâlâ Clang ile uyumlu olmadığından, libc++ varsayılan olacak kadar kararlı hale gelene kadar kaldırılamaz.
- Android 2.3 (
android-9
) artık desteklenmiyor. NDK'daki minimum hedef API düzeyi artık Android 4.0 (android-14
).APP_PLATFORM
,android-14
'dan daha düşük bir değere ayarlanmışsa bunun yerineandroid-14
kullanılır. - NDK'daki CMake artık x86 ve x86-64 mimarilerinde çalışacak şekilde YASM'de yazılmış derleme kodunun oluşturulmasını destekliyor. Daha fazla bilgi için Derleme kodu oluşturma başlıklı makaleyi inceleyin.
Not: Desteği sonlandırılan başlıklar, yakında yayınlanacak bir sürümde kaldırılacaktır. Bu başlıklarla ilgili herhangi bir sorunla karşılaşırsanız lütfen hata bildiriminde bulunun.
Taşıma ipuçları için birleştirilmiş üstbilgilerle ilgili taşıma notlarına bakın.
- API'ler
-
Android 8.0 için yerel API'ler eklendi. Bu API'ler hakkında daha fazla bilgi edinmek için Yerel API'lere genel bakış başlıklı makaleyi inceleyin.
Bu sürümdeki yenilikler ve değişiklikler hakkında daha fazla bilgi için bu değişiklik günlüğüne bakın.
Android NDK r14b (Mart 2017)
Değişiklik günlüğü- İndirilenler
- Bu sürümün indirme bağlantılarını burada bulabilirsiniz.
- Duyurular
-
- Birleştirilmiş başlıklar: Bu sürümde, Android platformuyla senkronize edilen ve her zaman güncel ve doğru tutulan platform başlıkları kullanıma sunuluyor. Yalnızca başlık içeren hata düzeltmeleri artık tüm API düzeylerini etkiliyor. Birleştirilmiş üstbilgilerin kullanıma sunulması, önceki NDK sürümlerindeki tutarsızlıkları düzeltir. Örneğin:
- M ve N'deki başlıklar aslında L'nin başlıklarıydı.
- Başlıklardaki işlev bildirimleri, platform düzeyleriyle doğru şekilde eşleşmiyordu; başlıklar, mevcut olmayan işlevleri bildiriyor veya mevcut işlevleri bildiremiyordu.
- Eski API düzeylerinin bazılarında, yeni API düzeylerinde bulunan sabitler eksik veya yanlış.
Bu yeni birleştirilmiş başlıklar varsayılan olarak etkinleştirilmez. Bu üstbilgileri nasıl etkinleştireceğinizi ve kullanacağınızı öğrenmek için Birleştirilmiş Üstbilgiler başlıklı makaleyi inceleyin.
- GCC desteğinin sonlandırılması: Bu sürümle birlikte GCC için aktif destek sonlandırılıyor. GCC henüz NDK'dan kaldırılmamıştır ancak artık geri bağlantı almayacaktır. gnustl'nin bazı bölümleri hâlâ Clang ile uyumlu olmadığından, libc++ varsayılan olacak kadar kararlı hale gelene kadar GCC tamamen kaldırılmayacak.
- Birleştirilmiş başlıklar: Bu sürümde, Android platformuyla senkronize edilen ve her zaman güncel ve doğru tutulan platform başlıkları kullanıma sunuluyor. Yalnızca başlık içeren hata düzeltmeleri artık tüm API düzeylerini etkiliyor. Birleştirilmiş üstbilgilerin kullanıma sunulması, önceki NDK sürümlerindeki tutarsızlıkları düzeltir. Örneğin:
Bu sürümdeki yenilikler ve değişiklikler hakkında daha fazla bilgi için bu değişiklik günlüğüne bakın.
Android NDK r13b (Ekim 2016)
- İndirilenler
- Bu sürümün indirme bağlantıları burada arşivlenmiştir.
- Duyurular
-
- GCC artık desteklenmiyor. Henüz NDK'dan kaldırılmayacak ancak artık geriye dönük bağlantı almayacak. gnustl'nin bazı bölümleri hâlâ Clang ile uyumlu olmadığından, libc++ varsayılan olacak kadar kararlı hale gelene kadar kaldırılamaz. Bu noktadan sonra büyük ihtimalle kaldırılır.
- Android için bir CPU profil aracı olan simpleperf eklendi.
- r13b
-
-
Eksik
__cxa_bad_cast
için ek düzeltmeler.
-
Eksik
- NDK
-
NDK_TOOLCHAIN_VERSION
artık varsayılan olarak Clang'i kullanıyor.- libc++ r263688 sürümüne güncellendi.
- (Neredeyse) temiz bir yukarı akışa sıfırladık. Bu işlem, bazı hataları giderecektir ancak varsayılan olarak önermeden önce libandroid_support'u temizlememiz gerekir.
-
make-standalone-toolchain.sh
artık yalnızca aracın Python sürümünün sarmalayıcısıdır. Davranış açısından birkaç farklılık vardır. Ayrıntılar için commit mesajına bakın. - Desteklenmeyen ABI'ler için bazı kitaplıklar kaldırıldı (mips64r2, mips32r6, mips32r2 ve x32). Hâlâ birkaç kişi geride kalmış olabilir.
- ARM android-21+ için statik bir yürütülebilir dosya oluşturulurken bağlantı zamanında atexit'in eksik olmasına neden olan crtbegin_static.o ile ilgili sorunlar çözüldü: 132. Sorun
- build/cmake/android.toolchain.cmake adresine CMake araç zinciri dosyası eklendi.
- Bilinen sorunlar
-
- Bu liste, tüm giderilmemiş hataların kapsamlı bir listesi olarak tasarlanmamıştır.
- libc++ ve GCC kullanan bağımsız araç zincirleri çalışmaz. Bu durum, GCC'deki bir hatadan kaynaklanıyor. Daha fazla bilgi için commit mesajına bakın.
- Android-24 mevcut olmasına rağmen Marshmallow ve N için Bionic başlıkları ve kitaplıkları henüz kullanıma sunulmamıştır. Bu platformlar hâlâ Lollipop üstbilgileri ve kitaplıklarıdır (r11'den gerileme değildir).
- RenderScript araçları mevcut değil (r11'den kaynaklanan bir gerileme değil): 7. sorun.
Android NDK r12b (Haziran 2016)
- İndirilenler
- Bu sürümün indirme bağlantıları burada arşivlenmiştir.
- Duyurular
ndk-build
komutu, r13'te varsayılan olarak Clang'i kullanır. GCC, sonraki bir sürümde kaldırılacaktır.make-standalone-toolchain.sh
komut dosyası r13'te kaldırılacak.make_standalone_toolchain.py
'nın ihtiyaçlarınıza uygun olduğundan emin olun.- Sorunları GitHub'a bildirin.
ndk-gdb.py
sorunu düzeltildi. (118. sayı)-
NdkCameraMetadataTags.h
, artık geçersiz bir enum değeri içermeyecek şekilde güncellendi. - libc++ kullanan statik kitaplıklar için yanlış uyarılara neden olan ndk-build'deki hata düzeltildi. Bu değişiklik hakkında daha fazla bilgi için buradaki yorumlara göz atın.
- OpenSLES başlıkları android-24 için güncellendi.
- NDK
- armeabi-v7a-hard ABI desteğini kaldırdık. Daha fazla bilgi için bu açıklamayı inceleyin.
- GB öncesi platform düzeyleri için tüm sysroot'lar kaldırıldı. r11'de bu özelliklere yönelik desteği sonlandırdık ancak bunları kaldırmayı unuttuk.
- ARM32'de c++_shared kullanılırken istisna işleme özelliği artık çoğunlukla çalışıyor. Çözücü artık libc++'ya değil, her bağlı nesneye bağlanacak. Bu istisna işleme hakkında daha fazla bilgi için Bilinen Sorunlar bölümünü inceleyin.
- Varsayılan derleyici işaretleri temizlendi.
(27. sayı)
- Bu değişiklikler hakkında eksiksiz bilgi için bu değişiklik listesine bakın.
- Bağımsız araç zincirlerinin Python uygulaması eklendi:
build/tools/make_standalone_toolchain.py
.- Windows kullanıcılarının bu özelliği kullanmak için artık Cygwin'e ihtiyacı yok.
- r13'te bash sürümünü kaldıracağımız için yeni sürümü hemen test edin.
-fno-limit-debug-info
, Clang hata ayıklama derlemeleri için varsayılan olarak etkinleştirildi. Bu değişiklik, LLDB ile hata ayıklama özelliğini iyileştirecektir.--build-id
artık varsayılan olarak etkindir.- Artık yerel kilitlenme raporlarında derleme kimliği gösterilecek. Böylece, kodunuzun hangi sürümünün çalıştığını kolayca belirleyebilirsiniz.
NDK_USE_CYGPATH
artık libgcc ile ilgili sorunlara neden olmamalıdır. (Android 195486 numaralı sorun)-Wl
,--warn-shared-textrel
ve-Wl,--fatal-warnings
seçenekleri artık varsayılan olarak etkindir. Paylaşılan metin yeniden konumlandırmalarınız varsa uygulamanız Android 6.0 (API düzeyi 23) veya sonraki sürümlerde yüklenemez. 64 bit uygulamalarda metin yeniden konumlandırmalarına hiçbir zaman izin verilmemiştir.- Önceden derlenmiş başlıklar daha iyi çalışır. (14. Sayı ve 16. Sayı)
- Ulaşılamayan ARM (non-thumb) STL kitaplıkları kaldırıldı.
- android-24'e Vulkan desteği eklendi.
- android-24'e Choreographer API eklendi.
libcamera2
veya sonraki sürümlerin yüklü olduğu cihazlar içinINFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
API'leri eklendi. Daha fazla bilgi için Kamera Özellikleri başlıklı makaleyi inceleyin.- Clang
- Clang, 3.8svn (r256229, build 2812033) sürümüne güncellendi.
- 32 bit Windows paketindeki
clang.exe
veclang++.exe
yürütülebilir dosyaları aslında 64 bit'tir. 32 bitlik yürütülebilir dosyanın adıclang_32.exe
.
- 32 bit Windows paketindeki
- GCC
- google/gcc-4_9 r227810 adresindeki ChromeOS GCC ile senkronize edildi.
- ToT'den (r231296) kapsam temizleyici yaması geri taşındı.
- libatomic,
ifuncs
kullanmayacak şekilde düzeltildi. (31. sayı) - Binutils
- "Erratum 843419 bulundu ve düzeltildi" bilgi mesajları sessize alındı.
- Büyük arm32 ikili dosyaları bağlanırken oluşan dahili bağlayıcı hatasını düzeltmek için
--long-plt
seçeneği eklendi. - AArch64 için yanlış çalışma zamanı sapları düzeltildi. Bu durum, çok büyük DSO'lar için atlama adreslerinin yanlış hesaplanmasına neden oluyordu.
- Eski Android sürümlerinde dinamik bağlayıcıyla ilgili bir hatayı gidermek için varsayılan seçenek
--no-apply-dynamic
kullanıma sunuldu. dynamic_cast
için NDK r11 KI, Clang ile çalışmaz. x86,stlport_static
ve optimizasyon sorunlarını düzelttik.- GDB
- GDB 7.11 olarak güncellendi. Daha fazla bilgi için GDB News sayfasını inceleyin.
ndk-gdb.py
ile ilgili bazı hata düzeltmeleri yapıldı.- Bilinen sorunlar
- x86 ASAN hâlâ çalışmıyor. Daha fazla bilgi için bu değişiklik listesi ile ilgili tartışmaya bakın.
c++_shared
ile istisna geri sarma, Android 2.3 (API düzeyi 9) veya Android 4.0 (API düzeyi 14) sürümlerinde ARM için hâlâ çalışmıyor.- Android 6.0 (API düzeyi 23) ve Android 7.0 (API düzeyi 24) için Bionic üstbilgileri ve kitaplıkları, android-24 mevcut olmasına rağmen henüz kullanıma sunulmamıştır. Bu platformlar hâlâ Android 5.0 (API düzeyi 21) başlıkları ve kitaplıklarıdır (r11'den gerileme değildir).
- RenderScript araçları mevcut değil (r11'den gerileme değil). (Sorun 7)
- Bu değişiklik günlüğü, çözülmemiş tüm hataların kapsamlı bir listesi olarak tasarlanmamıştır.
__thread
bu kez gerçekten işe yarayacak.
Android NDK r12 (Haziran 2016)
- İndirilenler
- Bu sürümün indirme bağlantıları burada arşivlenmiştir.
- Duyurular
ndk-build
komutu, yakında yayınlanacak bir sürümde varsayılan olarak Clang'i kullanacak. GCC, sonraki bir sürümde kaldırılacaktır.make-standalone-toolchain.sh
komut dosyası, gelecekteki bir sürümde kaldırılacaktır. Bu komut dosyasını kullanıyorsanız lütfen en kısa zamandamake_standalone_toolchain.py
'ya geçmeyi planlayın.- NDK
- armeabi-v7a-hard ABI desteği kaldırıldı. Açıklamayı belgelerde bulabilirsiniz.
- Android 2.3'ten (API düzeyi 9) önceki platform düzeyleri için tüm sysroot'lar kaldırıldı. NDK r11'de bu kitaplıklar için desteği sonlandırdık ancak bunları kaldırmayı unuttuk.
- ARM32'de c++_shared kullanılırken istisna işleme özelliği, çoğunlukla çalışacak şekilde güncellendi (Bilinen Sorunlar bölümüne bakın). Çözücü artık libc++'ya değil, her bağlı nesneye bağlanıyor.
- Varsayılan derleyici işaretleri temizlendi (NDK Sorunu 27). Bu güncellemenin ayrıntılarını 207721 numaralı değişiklikte görebilirsiniz.
build/tools/make_standalone_toolchain.py
'da bağımsız araç zincirlerinin Python uygulaması eklendi. Windows'da bu özelliği kullanmak için artık Cygwin'e ihtiyacınız yok. Bash sürümünün yakında yapılacak bir sürümde kaldırılacağını unutmayın. Bu nedenle, lütfen yeni sürümü şimdi test edin.- Yapılandırılmış Clang hata ayıklama derlemelerinde
-fno-limit-debug-info
seçeneği varsayılan olarak etkindir. Bu değişiklik, LLDB ile daha iyi hata ayıklama yapılmasını sağlar. --build-id
seçeneğini varsayılan olarak etkinleştirin. Bu seçenek, yerel kilitlenme raporlarında bir tanımlayıcının gösterilmesine neden olur. Böylece, kodunuzun hangi sürümünün çalıştığını kolayca belirleyebilirsiniz.NDK_USE_CYGPATH
ile ilgili sorun düzeltildi. Bu sayede artık libgcc ile ilgili sorunlara neden olmuyor (195486 numaralı sorun).- Aşağıdaki seçenekler varsayılan olarak etkinleştirildi:
-Wl,--warn-shared-textrel
ve-Wl,--fatal-warnings
. Metin yeniden konumlandırmalarını paylaştıysanız uygulamanız Android 6.0 (API düzeyi 23) ve sonraki sürümlerde yüklenmez. Bu yapılandırmaya 64 bit uygulamalarda hiçbir zaman izin verilmediğini unutmayın. - Önceden derlenmiş üstbilgilerin daha iyi çalışması için birkaç sorun düzeltildi (NDK Sorunu 14, NDK Sorunu 16).
- Ulaşılamayan ARM (non-thumb) STL kitaplıkları kaldırıldı.
- android-24'e Vulkan desteği eklendi.
- android-24'e Choreographer API eklendi.
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
özellik düzeyini veya daha üst düzeyleri destekleyen cihazlar için libcamera2 API'leri eklendi. Daha fazla bilgi içinCameraCharacteristics
referansına bakın.- Clang
- Clang, 3.8svn (r256229, build 2812033) sürümüne güncellendi. 32 bit Windows paketindeki
clang.exe
veclang++.exe
yürütülebilir dosyaları aslında 64 bit'tir. 32 bitlik yürütülebilir dosyanın adıclang_32.exe
. __thread
işlevinin bu kez gerçekten çalışması için düzeltildi.- GCC
- Derleyici, ChromeOS GCC @ google/gcc-4_9 r227810 ile senkronize edildi.
- ToT'den (r231296) kapsam temizleyici yaması geri taşındı.
- ifuncs'ın kullanılmaması için
libatomic
düzeltildi (NDK Sorunu 31). - Binutils
- "Erratum 843419 found and fixed" (Hata 843419 bulundu ve düzeltildi) bilgi mesajları kapatıldı.
- Büyük arm32 ikili dosyaları bağlanırken dahili bağlayıcı hatasını düzeltmek için
--long-plt
seçeneği eklendi. AArch64
için yanlış çalışma zamanı sapları düzeltildi. Bu sorun, çok büyük dinamik paylaşılan nesneler (DSO'lar) için atlama adreslerinin yanlış hesaplanmasına neden oluyordu.- Android'in eski sürümlerinde dinamik bağlayıcıyla ilgili bir hatayı gidermek için varsayılan seçenek
--no-apply-dynamic
kullanıma sunuldu. - NDK r11'deki bilinen bir sorun düzeltildi. Bu sorunda
dynamic_cast
, Clang, x86, stlport_static ve optimizasyon ile çalışmıyordu. - GDB
- GDB 7.11 sürümüne güncellendi. Bu sürüm hakkında daha fazla bilgi için GDB Haberleri'ne bakın.
ndk-gdb.py
komut dosyasındaki çeşitli hatalar düzeltildi.- Bilinen sorunlar
- x86 Address Sanitizer (ASAN) şu anda çalışmıyor. Daha fazla bilgi için 186276 numaralı sorunu inceleyin.
c++_shared
ile istisna geri sarma, Android 2.3 (API düzeyi 9) veya Android 4.0 (API düzeyi 14) sürümlerinde ARM için çalışmaz.- Android 6.0 (API düzeyi 23) ve sonraki sürümler için Bionic üstbilgileri ve kitaplıkları, android-24 mevcut olmasına rağmen henüz kullanıma sunulmamıştır. Bu platformlarda, NDK r11 ile tutarlı olan Android 5.0 (API düzeyi 21) başlıkları ve kitaplıkları bulunur.
- RenderScript araçları mevcut değil. Bu durum, NDK r11 ile tutarlıdır. (NDK Sorunu 7)
NdkCameraMetadataTags.h
üstbilgi dosyasında, kamera meta verileri etiket enum değeriACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP
yanlışlıkla listelenmiş olup bir sonraki sürümde kaldırılacaktır. Bunun yerineACAMERA_STATISTICS_LENS_SHADING_MAP
değerini kullanın.
Android NDK r11c (Mart 2016)
- Değişiklikler
ndk-gdb.py
komut dosyasına ek düzeltmeler uygulandı.ndk-gdb
komutuna--attach
seçeneği için isteğe bağlı bir paket adı bağımsız değişkeni eklendi. (13. Sorun)- 32 bit Windows platformu için geçersiz araç zinciri yolları düzeltildi. (45. sayı)
ndk-which
komutunun göreli yolu düzeltildi. (29. sayı)- libgcc derleyicisi için cygpath kullanımı düzeltildi. (Android 195486 numaralı sorun)
Android NDK r11b (Mart 2016)
- NDK
-
- Önemli duyurular
- Hata izleyicimizi GitHub'a taşıdık.
- Değişiklikler
ndk-gdb.py
düzeltildi. r11'de tamamen gerilemişti.- Mac için
ndk-gdb
düzeltildi. - Komut satırı araçları için daha fazla üst düzey kısayol eklendi:
ndk-depends
.ndk-gdb
.ndk-stack
.ndk-which
. Bu komut, önceki sürümlerde tamamen yoktu.
- Eksik olan libc++ için bağımsız araç zincirleri düzeltildi
__cxxabi_config.h
. --toolchain
ile ilgili yardım dokümanlarımake-standalone-toolchain.sh
içinde düzeltildi.
- Önemli duyurular
- Clang
-
- Hata düzeltmeleri
- r11 sürüm notlarında bildirdiğimizin aksine,
__thread
çalışmıyor. Bunun nedeni, Clang'in gönderdiğimiz sürümünde emüle edilmiş TLS desteğiyle ilgili bir hata düzeltmesinin olmamasıdır.
Android NDK r11 (Mart 2016)
- Clang
-
- Önemli duyurular
- Clang'e geçmenizi önemle tavsiye ederiz.
- Clang ile ilgili sorun yaşıyorsanız NDK'daki Clang'e özgü sorunlar için buradan hata kaydı oluşturun. Daha genel Clang sorunları için bu sayfadaki talimatları uygulayarak hata bildirin.
- Clang, 3.8svn (r243773, derleme 2481030) sürümüne güncellendi.
- Bu sürüm, neredeyse tamamen upstream Clang'dir.
- Windows 64 bit indirilebilir NDK paketi, Clang'in 32 bit sürümünü içerir.
- Clang'e geçmenizi önemle tavsiye ederiz.
- Eklemeler
- Clang artık emüle edilmiş TLS'yi destekliyor.
- Derleyici artık
__thread
özelliğini, pthread iş parçacığına özel verilerle ELF TLS'yi taklit ederek destekliyor. - C++11
thread_local
bazı durumlarda çalışır ancak libc desteği gerektirdiğinden, önemsiz olmayan yıkıcıları olan veriler için çalışmaz. Bu sınırlama, Android 6.0 (API düzeyi 23) veya sonraki sürümlerde çalışırken geçerli değildir. - Emüle edilmiş TLS, TLS değişkenlerine paylaşılan bir kitaplıktan erişildiğinde Aarch64 ile henüz çalışmamaktadır.
- Derleyici artık
- Clang artık emüle edilmiş TLS'yi destekliyor.
- Önemli duyurular
- GCC
-
- Önemli duyurular
- NDK'daki GCC'nin desteği sonlandırıldı ve Clang tercih edilmeye başlandı.
- NDK, 5.x sürümüne yükseltilmeyecek ve kritik olmayan geri bağlantı noktalarını kabul etmeyecek.
- 4.9'daki yanlış derlemeler ve dahili derleyici hatalarıyla ilgili bakım işlemleri, her bir durum ayrı ayrı değerlendirilerek gerçekleştirilecektir.
- Kaldırma
- GCC 4.8 kaldırıldı. Tüm hedefler artık GCC 4.9'u kullanıyor.
- Diğer değişiklikler
- google/gcc-4_9, r224707 ile senkronize edildi. Daha önce r214835 ile senkronize edilmişti.
- NDK
-
- Önemli duyurular
- Örnekler artık NDK paketine dahil edilmemektedir. Bunun yerine GitHub'da mevcuttur.
- Dokümanlar artık NDK paketine dahil edilmiyor. Bunun yerine Android geliştirici web sitesinde yer alır.
- Eklemeler
android-23
'ya yerel izleme API'si eklendi.android-23
için yerel çoklu ağ API'si eklendi.- API düzeyi 21'den itibaren, libc, m ve dl'yi etkinleştirerek sürüm oluşturulmuş semboller sağlandı.
- API düzeyi N'ye Vulkan üstbilgileri ve kitaplığı eklendi.
- Kaldırma
_WCHAR_IS_8BIT
için destek kaldırıldı.- Kaldırılan şarkılar
- mclinker kaldırıldı.
- Perl kaldırıldı.
- NDK libc, m ve dl'nin tüm sürümlerinden, bu kitaplıkların platform sürümlerinin desteklemediği tüm semboller kaldırıldı.
- mips64r2 desteği kısmen kaldırıldı. Diğerleri ise gelecekte kaldırılacaktır.
- Diğer değişiklikler
- Bağımsız ARM araç zincirleri varsayılan olarak arm7'ye ayarlandı.
-target
seçeneğiniarmv5te-linux-androideabi
olarak belirterek eski davranışı geri yükleyebilirsiniz.
- Platform eklemeleri için derleme sistemini
-isystem
kullanacak şekilde değiştirdi.- Bionic nedenli uyarılar artık uygulama derlemelerini bozmaz.
- Bir ikili dosya gabi++ üzerinden istisnalar oluşturduğunda meydana gelen segmentasyon hatası düzeltildi. (Sorun 179410)
- Platform libc++ ile ODR sorunlarını önlemek için libc++'ın satır içi ad alanı
std::__ndk1
olarak değiştirildi. - Tüm libc++ kitaplıkları artık libc++abi ile oluşturuluyor.
- Varsayılan
APP_PLATFORM
sürümü Gingerbread olarak güncellendi.- Froyo ve daha eski sürümler için desteğin gelecekteki bir sürümde kaldırılacağını unutmayın.
- Bağımsız ARM araç zincirleri varsayılan olarak arm7'ye ayarlandı.
- 64 bit için gabi++
_Unwind_Exception
yapısı güncellendi. - cpufeatures'a aşağıdaki özellikler eklendi:
- SSE4.1 ve SSE4.2'yi algılar.
- x86_64'te CPU özelliklerini algılar.
- libc++abi, yukarı akışa r231075 olarak güncellendi.
- ToT Bionic'ten
byteswap.h
,endian.h
,sys/procfs.h
,sys/ucontext.h
,sys/user.h
veuchar.h
güncellendi. - Tüm API düzeylerinde
sys/cdefs.h
senkronize edilir. - Kol için sabit
fegetenv and fesetenv
. - mips64
ve x86_64 için
crtend_*
öğesinin son işaretçi boyutunu/hizalamasını düzeltin.
- Önemli duyurular
- Binutils
-
- Eklemeler
- Yeni bir seçenek eklendi:
--pic-veneer
.
- Yeni bir seçenek eklendi:
- Kaldırma
- 32 bit Windows paketinde artık ld.gold bulunmuyor. Bunun yerine 64 bit Windows paketinden ld.gold dosyasını alabilirsiniz.
- Değişiklikler
- Android ve ChromiumOS arasında birleştirilmiş binutils kaynağı. Bu değişiklik hakkında daha fazla bilgi için buradaki yorumlara bakın.
- aarch64 için Gold'un güvenilirliği artırıldı. bfd yerine gold kullanmak için bağlantı zamanında
-fuse-ld=gold
kullanın. Varsayılan ayar, sonraki sürümde muhtemelen değişecektir. - Gold ARM arka ucu için büyük ikili dosyaların bağlantı süresi iyileştirildi (Hata ayıklanabilir Chrome Tarayıcı için bağlantı süresinde% 50'ye kadar azalma).
- Eklemeler
- GDB
-
- Kaldırma
- ndk-gdb.py lehine ndk-gdb kaldırıldı.
- Değişiklikler
- gdb, 7.10 sürümüne güncellendi.
- Gelişmiş performans.
- İyileştirilmiş hata mesajları.
- Göreceli proje yolları düzeltildi.
- Ctrl-C tuşlarının arka planda çalışan gdbserver'ı sonlandırması engellendi.
- Windows desteği iyileştirildi.
- Kaldırma
- YASM
-
- Değişiklikler
- YASM, 1.3.0 sürümüne güncellendi.
- Değişiklikler
- Bilinen sorunlar
-
- x86 ASAN şu anda çalışmamaktadır. Daha fazla bilgi için buradaki tartışmaya göz atın.
- Clang, x86, stlport_static ve
-O0
'dan yüksek optimizasyon seviyelerinin birleşimi,dynamic_cast
ile test hatalarına neden olur. Daha fazla bilgi için buradaki yorumlara göz atın. - İstisna işleme, ARM32'de c++_shared ile genellikle başarısız olur. Bunun temel nedeni, libc++abi'nin ARM32 için kullandığı LLVM unwinder ile libgcc arasındaki uyumsuzluktur. Bu davranış, r10e sürümünde gerilemeye neden olmaz.
Android NDK r10e (Mayıs 2015)
- İndirilenler
- Bu sürümün indirme bağlantıları burada arşivlenmiştir.
- Önemli değişiklikler:
-
- Cortex-A53 Erratum 843419 için geçici çözüm,
aarch64-linux-android-4.9
bağlayıcısına entegre edildi. Bu geçici çözüm hakkında daha fazla bilgi için Workaround for cortex-a53 erratum 843419 başlıklı makaleyi inceleyin. - Clang 3.6 eklendi.
NDK_TOOLCHAIN_VERSION=clang
artık varsayılan olarak bu Clang sürümünü seçiyor. - Clang 3.4 kaldırıldı.
- GCC 4.6 kaldırıldı.
ld.gold
'da tüm mimariler için çoklu iş parçacığı işleme desteği uygulandı. Artık çoklu iş parçacığı desteğiyle veya bu destek olmadan bağlantı oluşturabilir. Varsayılan olarak bu destek olmadan bağlantı oluşturulur.- Çoklu iş parçacığıyla derlemek için
--threads
seçeneğini kullanın. - Çoklu iş parçacığı kullanmadan derlemek için
--no-threads
seçeneğini kullanın.
- Çoklu iş parçacığıyla derlemek için
- Tüm mimariler için GDB/gdbserver 7.7 sürümüne yükseltildi.
- 32 bit Darwin için NDK paketi kaldırıldı.
- Cortex-A53 Erratum 843419 için geçici çözüm,
- Önemli hata düzeltmeleri:
-
- Ana ileti dizisinin dışında OpenMP döngüleri olduğunda meydana gelen kilitlenme sorunu düzeltildi.
- Kullanıcı
#pragma GCC optimize ("O0")
bildirdiğinde ancak komut satırında farklı bir optimizasyon düzeyi belirtildiğinde oluşan GCC 4.9 dahili derleyici hatası (ICE) düzeltildi.pragma
önceliklidir. - Aşağıdaki hata mesajıyla kilitlenmeye neden olan hata düzeltildi:
in add_stores, at var-tracking.c:6000
- LLVM otomatik vektörleştirmenin, ARM talimat setinde karşılığı olmayan bir talimat olan
llvm.cttz.v2i64()
oluşturduğu Clang 3.5'teki bir sorun için geçici çözüm uygulandı.
- Diğer hata düzeltmeleri:
-
- Aşağıdaki başlık ve kitaplık düzeltmeleri yapıldı:
media/NdkMediaDrm.h
sürümündePROPERTY_*
sorunu düzeltildi.mips64
içinsys/ucontext.h
düzeltildi.__builtin_isnan
ve__builtin_isinf
için Clang sürümü kontrolü kaldırıldı.android-21/arch-mips/usr/include/asm/reg.h
veandroid-21/arch-mips64/usr/include/asm/reg.h
eklendi.- GCC 4.9'un x86 için oluşturduğu sahte dizi sınırları uyarısı düzeltildi ve GCC 4.9'un ARM için oluşturduğu dizi sınırları uyarısı yeniden etkinleştirildi. ARM uyarısı daha önce koşulsuz olarak devre dışı bırakılmıştı.
- Yazılabilir bir
mips
vemips64
bölümü oluşturmak için Clang 3.5, GCC davranışıyla eşleşecek şekilde düzeltildi..gcc_except_table
Bu değişiklik, aşağıdaki bağlayıcı uyarısını almanızı önler:.../ld: warning: creating a DT_TEXTREL in a shared object
- Clang
mips64
için derlenirken kilitlenmelere neden olancompiler-rt
sorunlarına yönelik düzeltme geri taşındı. Daha fazla bilgi için LLVM Sorunu 20098'i inceleyin. - ASCII dışı yorumlarda meydana gelen Clang 3.5 kilitlenmeleri düzeltildi. (Sorun 81440)
stlport collate::compare
,-1
ve1
değerlerini döndürecek şekilde düzeltildi. Daha önce, rastgele işaretli sayılar döndürüyordu.- 64 bit ABI'ler için
ndk-gdb
düzeltildi. (Sorun 118300) - RenderScript için HelloComputeNDK örneğinin Android 4.4'te (Android API düzeyi 19) neden olduğu kilitlenme sorunu düzeltildi. Daha fazla bilgi için bu sayfayı inceleyin.
- GCC için
libc++ __wrap_iter
düzeltildi. Daha fazla bilgi için LLVM Sorunu 22355 başlıklı makaleyi inceleyin. - ABI
x86_64
için.asm
desteği düzeltildi. - GCC 4.8
stlport
sorunu için geçici çözüm uygulandı. (Sorun 127773) - Windows'da proje yolundaki sondaki dizin ayırıcı
\\
kaldırıldı. (Sorun 160584) gradle
'denndk-build.cmd
komutu yürütülerek tek bir.c
dosyası derlenirken oluşanno rule to make target
hatası düzeltildi. (Sorun 66937)- Aşağıdaki ana makine araç zincirlerinde eksik olan
libatomic.a
velibgomp.a
kitaplıkları eklendi:aarch64-linux-android-4.9
mips64el-linux-android-4.9
mipsel-linux-android-4.9
x86_64-4.9
- Diğer değişiklikler:
-
aarch64
içinld.gold
eklendi. Varsayılan bağlayıcıld.bfd
olarak kalır.ld.gold
'ı açıkça etkinleştirmek içinLOCAL_LDFLAGS
veyaAPP_LDFLAGS
değişkenine-fuse-ld=gold
ekleyin.- Gelişmiş R6 desteği sağlayan
binutils-2.25
ile MIPS ve MIPS64 araç zincirlerini oluşturdu. -fstandalone-debug
(tam hata ayıklama bilgileri) Clang için varsayılan seçenek haline getirildi.- GCC 4.9, Clang 3.5 ve Clang 3.6 için ARM, AArch64, X86 ve X86_64 araç zincirlerinde
-fstack-protector
yerine-fstack-protector-strong
kullanıldı. - Derleme sisteminin paket adını geçersiz kılmasına izin vermek için
ndk-gdb
'ye--package
komut satırı anahtarı eklendi. (Sorun 56189) - MIPS için
-mno-ldc1-stc1
desteği sonlandırıldı. Bu seçenek, yeni-fpxx
ve-mno-odd-spreg
seçenekleriyle veya FPXX ABI ile çalışmayabilir. cpu-features
'ya MIPS MSA ve R6 algılama özellikleri eklendi.
Android NDK r10d (Aralık 2014)
- Önemli değişiklikler:
-
- GCC 4.8, tüm 32 bit ABI'ler için varsayılan olarak ayarlandı. GCC 4.6 desteği sonlandırıldı ve bir sonraki sürümde kaldırılacak. Önceki davranışı geri yüklemek için ndk-build'e
NDK_TOOLCHAIN_VERSION=4.6
ekleyin veya komut satırındamake-standalone-toolchain.sh
'ı çalıştırırken--toolchain=arm-linux-androideabi-4.6
ekleyin. GCC 4.9, 64 bit ABI'ler için varsayılan olarak kalır. - Tüm x86[_64] araç zincirlerinin varsayılan olarak
-mstackrealign
eklemesi durduruldu. NDK araç zinciri, 16 baytlık bir yığın hizalaması olduğunu varsayar. Varsayılan olarak kullanılan araçlar ve seçenekler bu kuralı uygular. Derleme kodu yazan bir kullanıcı, yığın hizalamasını koruduğundan ve diğer derleyicilerin de bu kurala uyduğundan emin olmalıdır. (GCC hatası 38496) - ARM ve x86 ABI'lerine Clang 3.5 desteğine Address Sanitizer işlevi eklendi. Bu değişiklik hakkında daha fazla bilgi için Address Sanitizer projesine bakın.
- API düzeyi 21'den itibaren derleme sırasında
-fPIE -pie
kullanma zorunluluğu getirildi. API düzeyi 16 ve sonraki sürümlerde, ndk-build derleme sırasındaPIE
kullanır. Bu değişikliğin bir dizi sonucu vardır. Bunlar Developer Preview Issue 888'de ele alınmaktadır. Bu etkiler, paylaşılan kitaplıklar için geçerli değildir.
- GCC 4.8, tüm 32 bit ABI'ler için varsayılan olarak ayarlandı. GCC 4.6 desteği sonlandırıldı ve bir sonraki sürümde kaldırılacak. Önceki davranışı geri yüklemek için ndk-build'e
- Önemli hata düzeltmeleri:
-
- aarch64-linux-android-4.9 bağlayıcısında
A53 Errata #835769 ile ilgili daha fazla düzeltme yapıldı. Bu kapsamda,
-mfix-cortex-a53-835769
(varsayılan olarak etkin) belirtildiğinde GCC,--fix-cortex-a53-835769
adlı yeni bir seçeneği iletir. Daha fazla bilgi için bu binutils mesajını ve bu binutils mesajını inceleyin. - libc++
sscanf/vsscanf
askıda kalma sorununa yönelik düzeltme belgelendi. Bu sorun, API düzeyi 21'de meydana geliyordu. Düzeltme, r10c sürümünde uygulanmıştı. (Sorun 77988) - GCC 4.9 ile
-Os
belirtildiğinde meydana gelen bir AutoFDO (-fauto-profile
) kilitlenmesi düzeltildi. (Sorun 77571)
- aarch64-linux-android-4.9 bağlayıcısında
A53 Errata #835769 ile ilgili daha fazla düzeltme yapıldı. Bu kapsamda,
- Diğer hata düzeltmeleri:
-
- Aşağıdaki başlık ve kitaplık düzeltmeleri yapıldı:
- API düzeyi 16'ya
posix_memalign
eklendi. Ayrıca,stdlib.h
içinde API düzeyleri 16-19 için bir prototip eklendi. (Sorun 77861) stdatomic.h
, yalnızca C++11 için<atomic>
içerecek şekilde düzeltildi.- Bağımsız kullanım için şu başlıklar değiştirildi:
sys/user.h
ve API düzeyi 21 içingl2ext.h
,dlext.h
,fts.h
,sgidefs.h
. sys/user.h
değiştirilerekmxcsr_mask
,mxcr_mask
olarak yeniden adlandırıldı veu_ar0
için veri türü değiştirildi.sysconf()
dönüş değeri türüint
olarak değiştirildi.long
LOCAL_ARM_MODE
için ndk-build'inthumb
işleme şekli düzeltildi: r10d'de, aşağıdaki koşullardan biri geçerli olmadığı sürece ndk-build varsayılan olarakLOCAL_LDFLAGS+=-mthumb
ekler:LOCAL_ARM_MODE
değeriniarm
olarak ayarladınız.- Hata ayıklama derlemesi yapıyorsunuz (
APP_OPTIM=debug
veAndroidManifest.xml
gibi ayarlarandroid:debuggable="true"
içeriyor). Burada, önceki araç zincirleriyle uyumluluğu korumak için varsayılan olarak ARM modu kullanılır. (Sorun 74040) - ndk-build'de
LOCAL_SRC_FILES
, Windows mutlak yollarını kullanacak şekilde düzeltildi. (Sorun 74333) - ndk-gdb'den bash'e özgü kod kaldırıldı. (Sorun 73338)
make-standalone-toolchain.sh
dosyasından bash'e özgü kod kaldırıldı. (Sorun 74145)System.loadLibrary()
geçişli bağımlılıklarıyla ilgili düzeltme hakkında dokümanlar yeniden düzenlendi. (Sorun 41790)- 64 bit paketlerin Ubuntu 14.04 ve OS X 10.10 (Yosemite) üzerinde ayıklanmasını engelleyen sorun düzeltildi. (Sorun 78148)
- Clang desteğini iyileştirmek için
LOCAL_PCH
ile ilgili bir sorun düzeltildi. (Sorun 77575) - ld.gold'dan gelen "yürütülebilir yığın gerektirir" uyarısı netleştirildi. (Sorun 79115)
unsigned long
öğesinden struct user_regs_struct* öğesine.
Android NDK r10c (Ekim 2014)
- Önemli değişiklikler:
-
- İndirme yapısında aşağıdaki değişiklikler yapıldı:
- Her paket artık kendi platformu için hem 32 bit hem de 64 bit üstbilgileri, kitaplıkları ve araçları içeriyor.
- Hata ayıklama bilgileri içeren STL kitaplıklarının artık ayrı olarak indirilmesi gerekmiyor.
- Daha önce
Android-L
olarak adlandırılan her şey, resmi sürüm tanımlaması olanandroid-21
olarak değiştirildi. - GCC 4.9, GCC deposunun
google
dalına yeniden temel oluşturularak güncellendi. GCC 4.9'un yukarı akış sürümünden başlıca farklar: -O2
seçeneği artık vektörleştirme işlemini etkinleştiriyor. Bu işlemde, döngü soyma işlemi yapılmıyor ancak daha agresif bir açma işlemi uygulanıyor.- FDO ve LIPO'da iyileştirmeler
- Tüm ana makinelere Clang 3.5 desteği eklendi:
NDK_TOOLCHAIN_VERSION=clang
artık Clang 3.5'i seçiyor. Unutmayın: - ARM ve x86, varsayılan olarak entegre derleyiciyi kullanır. Bu durum sorunlara neden olursa geçici çözüm olarak
-fno-integrated-as
kullanın. - Clang 3.5, GCC'nin desteklediği
-finline-functions
seçeneği gibi kullanılmayan işaretler için daha fazla uyarı veriyor. art-on
seçeneği belirtilerek ART'yi sanal makine olarak kullanan bir Android 5.0 cihazda hata ayıklama yapılırken ART hata ayıklama moduna girme özelliği eklendi. Daha fazla bilgi için NDK'yı içeren dizindekiprebuilt/common/gdb/common.setup
dosyasına bakın.- Clang 3.3 desteği kaldırıldı.
- GCC 4.6'nın desteği sonlandırıldı ve gelecekteki sürümlerden kaldırılabilir.
- mclinker, Identical Code Folding ("ICF") desteğiyle 2.8 sürümüne güncellendi.
--icf
seçeneğini kullanarak ICF'yi belirtin. - x86 ve x86_64'te
arm_neon.h
desteği genişletildi. NEON intrinsiklerinin yaklaşık% 93'ü destekleniyor. NEON desteği hakkında daha fazla bilgi için:- NDK Programmer's Guide'a (
docs/Programmers_Guide/html/
) gidin ve Mimariler ve CPU'lar > Neon bölümüne bakın. hello-neon
içindeki güncellenmişsamples/
örneğini inceleyin.- ARM NEON'dan Intel SSE'ye taşıma ile ilgili Intel'in kılavuzuna bakın.
- NDK Programmer's Guide'a (
_FORTIFY_SOURCE
içinheaders/libs/android-21
içinde belgelenmiş destek, r10'da (android-21
henüzAndroid-L
olarak adlandırılırken) görünmüş, ancak belgelenmemişti.
Daha ayrıntılı bilgi için aşağıdaki Önemli hata düzeltmeleri bölümüne bakın.
GCC kullanan projelerden geçiş yaparken, uzun vadede ne yapacağınıza karar verene kadar kullanılmayan işaretleri yoksaymak için
-Wno-invalid-command-line-argument
ve-Wno-unused-command-line-argument
kullanabilirsiniz. - Önemli hata düzeltmeleri:
-
- GCC4.9/aarch64 ile ilgili ve aşağıdaki hata mesajına neden olan dahili derleyici hatası düzeltildi (Sorun 77564):
- GCC4.9/arm'den yanlış kod oluşturma sorunu düzeltildi. (Issue 77567)
- GCC4.9/mips ile ilgili, satır içi derlemeyi içeren dahili derleyici hatası düzeltildi. (Sorun 77568)
- GCC4.9/arm'ın
x = (cond) ? y : x
için oluşturduğu yanlış kod düzeltildi. (Sorun 77569) - Varsayılan olarak
Cortex-A53 erratum (835769)'u atlamak için GCC4.9/aarch64 ve Clang3.5/aarch64 düzeltildi.
-mno-fix-cortex-a53-835769
belirterek geçici çözümü devre dışı bırakın.
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- Diğer hata düzeltmeleri:
-
android-21
için aşağıdaki üstbilgi ve kitaplık düzeltmeleri yapıldı:- Daha fazla TV anahtar kodu eklendi:
android/keycodes.h
android/sensor.h
'ya daha fazla sabit ve altı yeni sensör işlevi eklendi:ASensorManager_getDefaultSensorEx
,ASensor_getFifoMaxEventCount
,ASensor_getFifoReservedEventCount
,ASensor_getStringType
,ASensor_getReportingMode
veASensor_isWakeUpSensor
.- GCC 4.6 ile uyumluluğu artırmak ve
<atomic>
üstbilgisi için destek sağlamak amacıylastdatomic.h
düzeltildi. - Tüm API düzeylerine
sys/ucontext.h
vesys/user.h
eklendi.signal.h
üstbilgisi artık<sys/ucontext.h>
içeriyor.struct ucontext
ile ilgili mevcut tanımları kaldırabilirsiniz. - API düzeyleri 17, 18 ve 19'a
posix_memalign
eklendi. - Tüm mimarilere şu işlevler eklendi:
android_set_abort_message
,posix_fadvise
,posix_fadvise64
,pthread_gettid_np
. native-media/AndroidManifest.xml
örneğine gerekli izinler eklendi. (Sorun 106640)- API düzeyi 21'e
clock_nanosleep
veclock_settime
eklendi. (Sorun 77372) - Aşağıdaki semboller tüm mimarilerden kaldırıldı:
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
vedlmalloc
. - 64 bit mimarilerden şu işlevler kaldırıldı:
basename_r
,dirname_r
,__isthreaded
,_flush_cache
(mips64). - Aşağıdaki işlev 32 bit mimarilerden kaldırıldı:
__signalfd4
. - Aşağıdaki işlevlerde üçüncü bağımsız değişkenin türü
size_t
olarak değiştirildi:strtoll_l
,strtoull_l
,wcstoll_l
vewcstoull_l
.int
- Şu işlevler 64 bit mimarisine geri yüklendi:
arc4random
,arc4random_buf
vearc4random_uniform
. cxa_*
,new
vedelete
operatörlerilibstdc++.so
'e geri taşındı. Bu değişiklik, r9d davranışını geri yükler. r10'un önceki sürümlerinde yer tutucu dosyalar vardı.
- Daha fazla TV anahtar kodu eklendi:
- GCC 4.8 ve 4.9'da mips için MXU desteği geri yüklendi. Bu destek, GCC'nin söz konusu sürümleri MXU'yu desteklemeyen binutils-2.24 ile derlendiği için r10 ve r10b'de yoktu. Artık bu mümkün.
make-standalone-toolchain.sh
içinde--toolchain=
düzeltildi. Böylece, artık Clang sürümünü belirten bir sonekin kullanımı düzgün şekilde destekleniyor.- libc++/armeabi
strtod()
işlevleri düzeltildi. docs/
sürümünde NDK dokümanlarında düzeltmeler yapıldı.
- Diğer değişiklikler:
-
- Aşağıdaki talimat kümeleri için ARMv8 desteğini algılamak üzere
cpu-features
geliştirildi: AES, CRC32, SHA2, SHA1 ve 64 bit PMULL/PMULL2. (Sorun 106360) - GCC 4.8, GCC 4.9 ve Clang'de kullanılabilen
*-gcc-ar
'yi kullanmak için ndk-build değiştirildi. Clang,*-ar
yerine bunu belirtir. Bu ayar, LTO desteğini iyileştirir. - GCC derleyicisinden
include-fixed/linux/a.out.h
veinclude-fixed/linux/compiler.h
üstbilgileri kaldırıldı. (Sorun 73728) - Mac OS X'te GCC 4.8 ile ilgili
-flto
sorununu düzeltildi. Hata mesajında şunlar yazıyordu: build-binary.mk.
içindeki yazım hatası düzeltildi (Sorun 76992)
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- Aşağıdaki talimat kümeleri için ARMv8 desteğini algılamak üzere
- Önemli bilinen sorunlar:
-
- GCC4.9'da -Os (
-fauto-profile
) belirtilmesi kilitlenmeye neden olabilir. (Sorun 77571)
- GCC4.9'da -Os (
Android NDK r10b (Eylül 2014)
- Önemli notlar:
-
- İndirilebilir paketlerdeki 512 MB boyut kısıtlaması nedeniyle aşağıdaki 32 bit öğeler, 32 bit NDK indirme paketlerinde yer almaz. Bunun yerine, 64 bitlik olanlarda bulunur:
- Android-L üstbilgileri
- GCC 4.9
- NDK tarafından sağlanan tek RenderScript desteği şu anda Android 4.4 (API düzeyi 19) ile 32 bit RenderScript içindir. HelloComputeNDK'yı (tek Renderscript örneği) Renderscript (32 bit veya 64 bit) ve Android sürümünün başka bir kombinasyonuyla oluşturamazsınız.
- Yerel codec'i derlemek için tüm Android-L üstbilgilerinin bulunduğu 64 bit NDK paketini kullanmanız gerekir.
- Önemli hata düzeltmeleri:
- Diğer hata düzeltmeleri:
-
stdio.h
, GCC'nin tüm sürümlerinininclude-fixed/
dizinlerinden kaldırıldı. (Sorun 73728.)platforms/android-L/arch-*/usr/include/linux/netfilter*/
dizinlerindeki Windows paketlerinden yinelenen üstbilgi dosyaları kaldırıldı. (Sorun 73704)- Clang'in HelloComputeNDK'yı oluşturmasını engelleyen sorun düzeltildi.
- Sabit atexit. (Sorun 66595.)
docs/
vesources/third_party/googletest/README.NDK
'daki dokümanlarda çeşitli düzeltmeler yapıldı. (Sorun 74069.)- Android-L başlıklarında aşağıdaki düzeltmeler yapıldı:
ctype.h
vewchar.h
'ye şu işlevler eklendi: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()
(73719 numaralı sorun) ve 42*_l()
işlevi.cmsg_nxthdr
,__cmsg_nxthdr
olarak yeniden adlandırıldı.__libc_malloc_dispatch
kaldırıldı.ptrace()
prototipinilong ptrace(int, ...);
olarak değiştirdi.sha1.h
kaldırıldı.android/dlext.h
içindeandroid_dlextinfo
uzatıldı.stdlib.h
,time.h
,wchar.h
vecomplex.h
'de kayan noktalı veya çift türünde değerler alan ya da döndüren işlevler için__NDK_FPABI__
ile açıklama eklenir.
- Diğer değişiklikler:
-
mipsel-linux-android-4.9
vemips64el-linux-android-4.9
güncellendi, yeni bir çoklu kitaplık dizin düzeni uygulandı ve gdb-7.7 için destek sağlandı.- Daha fazla arm64 özelliği algılamak için
cpu-features
geliştirildi. (Değişiklik listesi 100339.)
Android NDK r10 (Temmuz 2014)
- Önemli değişiklikler:
-
- 3 yeni ABI eklendi. Bunların tümü 64 bit: arm64-v8a, x86_64, mips64. Unutmayın:
- GCC 4.9, 64 bit ABI'ler için varsayılan derleyicidir. Clang'in mevcut sürümü 3.4'tür.
NDK_TOOLCHAIN_VERSION=clang
arm64-v8a ve mips64 için çalışmayabilir. - Android-L, 64 bit desteği sunan ilk seviyedir. Bu API düzeyinin geçici olduğunu ve yalnızca L önizlemesi için geçerli olduğunu unutmayın. L sürümünde bunun yerine gerçek bir API seviyesi numarası kullanılacak.
- Bu sürümde artık
APP_ABI
içinall32
veall64
ayarları yer alıyor.APP_ABI=all32
,APP_ABI=armeabi,armeabi-v7a,x86,mips
etiketine eş değerdir.APP_ABI=all64
,APP_ABI=arm64-v8a,x86_64,mips64
etiketine eş değerdir.APP_ABI=all
tüm ABI'leri seçer.
- Android-L'deki yeni GNU libstdc++, tüm
<tr1/cmath>
Kendi matematik işlevinizi tanımlamadan önce, bağlayıcıdan "multiple definition" hataları almamak için_GLIBCXX_USE_C99_MATH_TR1
'ı kontrol ederek bu ada sahip bir işlevin zaten mevcut olup olmadığını görün. - cpu-features kitaplığı, ARMv8 çekirdeği için güncellendi. Mevcut cpu-features kitaplığı, ARMv8 platformunda NEON'un varlığını algılayamayabilir. Kodunuzu yeni sürümle yeniden derleyin.
- Yeni bir
platforms/android-L/
API dizini eklendi. Şunları içermektedir: - Android API düzeyleri 3 (Cupcake) ile 19 (KitKat) arasında değişmeyen Bionic üstbilgileri güncellendi. L seviyesine yönelik bu yeni sürüm, AOSP ile senkronize edilmelidir.
- Yeni medya API'leri ve yerel codec örneği.
- SLES/OpenSLES için güncellenmiş bir
Android.h
başlığı. Bu başlık, AudioPlayer'da tek duyarlıklı kayan noktalı ses biçimi desteğini etkinleştirir. - GLES 3.1 ve AEP uzantıları
libGLESv3.so.
- GLES2 ve GLES3 başlıkları, en son resmi Khronos sürümlerine güncellendi.
- 32/64 bit ABI'lere GCC 4.9 derleyicileri eklendi. Daha önce de belirtildiği gibi, 64 bit ABI'ler için varsayılan (tek) derleyici GCC 4.9'dur. 32 bit ABI'ler için GCC 4.6 hâlâ varsayılan olduğundan GCC 4.9'u açıkça etkinleştirmeniz gerekir.
- ndk-build için 32 bit, GCC 4.9 derlemesini
NDK_TOOLCHAIN_VERSION=4.9
öğesiniApplication.mk
öğesine ekleyerek veya komut satırından ortam değişkeni olarak dışa aktararak etkinleştirin. - Bağımsız bir araç zinciri için
make-standalone-toolchain.sh
komut dosyasında--toolchain=
seçeneğini kullanın. Örneğin:--toolchain=arm-linux-androideabi-4.9.
- GCC 4.8/4.9 ve x86*'da GDB, 7.6 sürümüne yükseltildi. GDB, GCC 4.6'da (ARM ve MIPS için varsayılan) hâlâ GDB-7.3.x sürümünde olduğundan ndk-gdb'nin GDB 7.6'yı seçmesini sağlamak için
NDK_TOOLCHAIN_VERSION=4.8
veya4.9
değerini ayarlamanız gerekir. - SSSE3 desteği sağlamak için
-mssse3
derleme seçeneği eklendi ve bu seçenek, ABI x86 için varsayılan olarak ayarlandı (SSE3'ten yükseltme). Google tarafından yayınlanan görüntüde SSSE3 talimatları yok. - GCC 4.8, 4.8.3 sürümüne güncellendi.
- gabi++'dan libc++abi'ye geçilerek ARM libc++ EH desteği iyileştirildi. Ayrıntılar için dokümandaki "C++ Support" (C++ Desteği) bölümüne bakın. Unutmayın:
- Yerel ayar dışındaki tüm testler artık Clang 3.4 ve GCC 4.8 için geçiyor. Daha fazla bilgi için dokümantasyonun "C++ Desteği" bölümüne bakın.
- X86 ve MIPS libc++ için libc++ kitaplıkları hâlâ gabi++ kullanıyor.
- GCC 4.7 ve sonraki sürümler artık <atomic> kullanabilir.
<list>
kullanıyorsanız-fno-strict-aliasing
eklemeniz gerekir. Bunun nedeni,__list_imp::_end
_ breaks TBAA kurallarını ihlal etmesidir. (Sorun 61571.)- GCC 4.6'dan itibaren LIBCXX_FORCE_REBUILD:=true artık libc++'ı yeniden oluşturmaz. Yeniden oluşturmak için farklı bir derleyici kullanılması gerekir. Clang 3.3'ün test edilmediğini unutmayın.
- mclinker artık 2.7 sürümünde ve aarch64 Linux desteğine sahip.
LOCAL_PCH
tarafından belirtilen üstbilgiler için önceden derlenmiş üstbilgi desteği eklendi. (Sorun 25412).
- Önemli hata düzeltmeleri:
-
- libc++'nın artık
std::feof
vb. öğeleri derlemesi için düzeltildi (66668 numaralı sorun). - ABI armeabi için libc++ testlerinin bazılarında çökmelere neden olan Clang 3.3/3.4 atomik kitaplık çağrısı düzeltildi.
- Önceden derlenmiş başlıklar okunurken meydana gelen Clang 3.4 kilitlenmeleri düzeltildi. (Sorun 66657).
- Clang 3.3/3.4
-O3
onaylama hatası düzeltildi: - Aşağıdaki Clang 3.3/3.4 kilitlenmesi düzeltildi:
llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* llvm::MDBuilder::createBranchWeights(llvm::ArrayRef
(Sorun 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
. (Sorun 66950). - libc++'nın artık
- Diğer hata düzeltmeleri:
-
- Sabit üstbilgiler:
- 32 bit
ssize_t
,long int
yerineint
olarak düzeltildi. WCHAR_MIN
veWCHAR_MAX
, üzerinde çalıştıkları mimariye göre uygun işaretler alacak şekilde düzeltildi:- X86/MIPS: imzalı.
- ARM: unsigned.
- X86/MIPS'in varsayılan olarak imzalanmamış olmasını zorunlu kılmak için
-D__WCHAR_UNSIGNED__
kullanın. wchar_t
değerinin 16 bit olmasını zorunlu tutmak için-fshort-wchar
kullanın.- 32 bitlik
libc.so
sürümünden mevcut olmayan semboller kaldırıldı ve Android API düzeyi 12 ile sonraki sürümler içinpread64
,pwrite64
,ftruncate64
eklendi. (Sorun 69319). Daha fazla bilgi için AOSP değişiklik listesine eşlik eden commit mesajı 94137'yi inceleyin. putchar
'ın yeniden tanımlanmasıyla ilgili GCC uyarısı düzeltildi. Uyarı mesajında şunlar yazıyor:- Düzeltildi
make-standalone-toolchain.sh --stl=libc++
: - Kopya sayısı
cxxabi.h
. (Sorun 68001). - NDK yükleme dizini dışındaki dizinlerde çalıştırılır. (67690 ve 68647 numaralı sorunlar)
- GCC/Windows, harici programlarda süreç oluşturmak için yalnızca gerektiğinde bağımsız değişkenleri alıntılayacak şekilde düzeltildi. Bu değişiklik, 32.000 karakterlik uzunluk sınırının aşılma olasılığını azaltır.
APP_PLATFORM
ortam değişkeninin ayarlanamamasına neden olan sorun düzeltildi.- Kitaplık yolunun gerçek temel adını bulmak için
strchr()
yerinestrrchr()
kullanacak şekilde crazy_linker'daIsSystemLibrary()
uygulaması düzeltildi. - Yerel sesin hata ayıklama modunda oluşturulamaması sorunu düzeltildi.
- gdb'nin aşırı kayan nokta sayılarını yazdıramaması sorunu düzeltildi. (Sorun 69203).
-Wl,-shared
ile derleme yapılamaması (-shared
ile derleme yapılabiliyordu) sorunu düzeltildi. Sorun, Clang'in-shared
ve-static
mevcut değilse Android hedefleri için-pie
eklemesiydi. Bu yanlış davranış, bağlayıcının-shared
ve-pie
öğelerinin birlikte var olamayacağı konusunda hata vermesine neden oldu.
include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int);
(Liste değişikliği 91185). - Diğer değişiklikler:
-
- x86 araç zincirine
arm_neon.h
eklendi. Bu sayede artık Neon'un yaklaşık% 47'si taklit ediliyor. Şu anda 64 bit türler desteklenmemektedir. Daha fazla bilgi için x86 belgelerindeki ARM Neon intrinsics desteği bölümüne bakın. - ARM/GOT_PREL optimizasyonu (GCC google dalından oluşturulan GCC 4.6'da bulunur) ARM GCC 4.8/4.9'a taşındı. Bu optimizasyon, bazen genel değişkenlere erişirken talimat sayısını azaltır. Örneğin,
$NDK/tests/build/b14811006-GOT_PREL-optimization/
içindeki build.sh komut dosyasına bakın. - STL gabi++, stlport ve libc++ için ARM sürümü eklendi. Bu kitaplıklar artık hem ARM hem de Thumb moduna sahip.
- Artık make-standalone-toolchain.sh komut dosyasını
--toolchain=x86_64-linux-android-4.9
ile çağırmak mümkündür. Bu,--toolchain=x86_64-4.9
ile çağırmaya eş değerdir.
- x86 araç zincirine
Android NDK r9d (Mart 2014)
- Önemli değişiklikler:
-
- Clang 3.4 derleyicisi için destek eklendi.
NDK_TOOLCHAIN_VERSION=clang
seçeneği artık Clang 3.4'ü seçiyor. GCC 4.6, varsayılan derleyici olmaya devam ediyor. APP_ABI=armeabi-v7a-hard
eklendi.-mfloat-abi=hard
adlı ek çoklu kitaplık seçeneği de eklendi. Bu seçenekler, ARM GCC 4.6/4.8 ve Clang 3.3/3.4 (4.8'in derleyicisini, bağlayıcısını ve kitaplıklarını kullanır) ile birlikte kullanılmak içindir. Bu seçenekleri kullanırken aşağıdaki değişikliklere dikkat edin:-
ndk-build
komut dosyasını yürütürken armeabi-v7a hedefi için aşağıdaki seçenekleri ekleyin: Oluşturulan kitaplıkTARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
libs/armeabi-v7a
konumuna kopyalanır. Make'in beklendiği gibi çalışması için hemarmeabi-v7a
hem dearmeabi-v7a-hard
öğesini make hedefi olarak (ör. APP_ABI= satırında) belirtemezsiniz. Bu durumda, bunlardan biri yoksayılır.APP_ABI=all
değerininarmeabi armeabi-v7a x86 mips
değerine eşdeğer olduğunu unutmayın. make-standalone-toolchain.sh
komut dosyası,/hard
dizinlerindeki ek kitaplıkları kopyalar. GCC veya Clang'in/hard
içindeki kitaplıklarla bağlantı oluşturmasını sağlamak için yukarıdakiCFLAGS
veLFLAGS
öğelerini makefile'ınıza ekleyin.- Yasm assembler'ı ve x86 hedefleri için
LOCAL_ASMFLAGS
veEXPORT_ASMFLAGS
işaretlerini ekledi.ndk-build
komut dosyası,.asm
uzantılıLOCAL_SRC_FILES
oluşturmak içinprebuilts/*/bin/yasm*
kullanır. - MClinker,
-gc-sections
desteği ekleyen 2.6.0 sürümüne güncellendi. - Deneysel libc++ desteği eklendi (upstream r201101). Bu yeni özelliği kullanmak için aşağıdaki adımları uygulayın:
Application.mk
adlı ülkedeAPP_STL := c++_static
veyaAPP_STL := c++_shared
ekleyin.LIBCXX_FORCE_REBUILD := true
üzerinden kaynaktan yeniden oluşturabilirsiniz.- libc++ başlıkları/lib ile bağımsız bir araç zinciri oluşturmak için
make-standalone-toolchain.sh --stl=libc++
komutunu çalıştırın.
CPLUSPLUS-SUPPORT.html
sayfasına bakın. (Sorun 36496)
- Clang 3.4 derleyicisi için destek eklendi.
- Önemli hata düzeltmeleri:
-
- GCC 4.6/4.8 ARM EABI için beklenmeyen bir istisna işleyiciden yakalanmamış bir throw düzeltildi. (GCC sorunu 59392)
- GCC 4.8, artık bağımlı olan ve tür olmayan bir şablon bağımsız değişkeniyle şablonun kısmi uzmanlığını doğru şekilde çözebilecek şekilde düzeltildi. (GCC Sorunu 59052)
- Önceden oluşturulmuş Python'a daha fazla modül eklendi (59902 numaralı sorun):
- Mac OS X:
zlib
,bz2
,_curses
,_curses_panel
,_hashlib
,_ssl
- Linux:
zlib
,nis
,crypt
,_curses
ve_curses_panel
- Mac OS X:
- x86 ve MIPS gdbserver
event_getmsg_helper
düzeltildi. - Eski cihazlardaki uyumluluk ve C++ yansıtma ile ilgili sorunlar da dahil olmak üzere RenderScript NDK araç zincirindeki çok sayıda sorun düzeltildi.
- Diğer hata düzeltmeleri:
-
- Başlıkla ilgili düzeltmeler:
- Android API düzeyi 13 ve sonraki sürümlerde
#include <sys/types.h>
öğesininandroid/asset_manager.h
içinde eksik olması sorunu düzeltildi. (Sorun 64988) - Android API düzeyi 14 ve sonraki sürümlerde
#include
eksikliği düzeltildi.android/rect_manager.h
JNICALL
,JNI_OnLoad
veJNI_OnUnload
listelerinejni.h
içinde eklendi.JNICALL
değerinin__NDK_FPABI__
olarak tanımlandığını unutmayın. Daha fazla bilgi içinsys/cdefs.h
başlıklı makaleye bakın.- Aşağıdaki başlıklar, bağımlılıklarının manuel olarak eklenmesine gerek kalmadan dahil edilebilecek şekilde güncellendi (Sorun 64679):
- Tüm mimariler için
sys/cachectl.h
eklendi. MIPS geliştiricileri artık#ifdef __mips__
yazmak yerine bu başlığı ekleyebilir. - Kayan veya çift değer alan ya da döndüren işlevlere
__NDK_FPABI__
eklenerekplatforms/android-18/include/android/input.h
düzeltildi. - Android API düzeyi 12 ve sonraki sürümlerde yanlışlıkla 64 bit karşılığına ayarlanmış olan MIPS
struct stat
düzeltildi. Bu yanlış ayar, r9c sürümünde kullanıma sunulan bir regresyondu. - Android API düzeyi 9 ve önceki sürümler için
__PTHREAD_MUTEX_INIT_VALUE
,__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE
, ve__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE
tanımlandı. - API 18 ve sonraki sürümler için x86
libm.so
'yescalbln
,scalblnf
vescalblnl
eklendi. sources/android/support/include/iconv.h
yazımındaki hata düzeltildi. (Sorun 63806)
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
- Android API düzeyi 13 ve sonraki sürümlerde
- Kullanıcı tanımlı
std::terminate()
işleyicisinin çalışabilmesi için gabi++std::unexpected()
işlevininstd::terminate()
işlevini çağırması düzeltildi. std::nullptr
yakalamak için gabi++ düzeltildi.- Sabit örnekler Teapot ve MoreTeapots:
- Tegra 2 ve 3 çipleriyle ilgili bir sorun, yansıtıcı değişkenlerin orta hassasiyet kullanacak şekilde değiştirilmesiyle çözüldü. Yansıtıcı güç değerleri artık 1,0'dan küçük olabilir.
- Ses düğmesine basıldığında sürükleyici modun geri yüklenmesi ve
SYSTEM_UI_FLAG_IMMERSIVE_STICKY
öğesinin geçersiz kılınması için örnekler değiştirildi. Ekran döndürme işlemionSystemUiVisibilityChange
tetiklemediği için tam ekran modu geri yüklenmez.
- Yürütülebilir dosyaları bağlamak için
ld.bfd
'ı kullanmak üzerendk-build
komut dosyasını-rpath-link=$SYSROOT/usr/lib
ve-rpath-link=$TARGET_OUT
ekleyecek şekilde düzelttik. (Sorun 64266) -Bsymbolic
, tüm STL derlemelerinden kaldırıldı.ndk-gdb-py.cmd
, ayarı yoksayanpython.exe
'ye iletmek yerineSHELL
'yi ortam değişkeni olarak ayarlayarak düzeltildi. (Sorun 63054)make-standalone-toolchain.sh
komut dosyası düzeltildi. Böylece--stl=stlport
seçeneği, sembolik bağlantı oluşturmak yerine gabi++ başlıklarını kopyalıyor.cmd.exe
ve MinGW kabukları, Cygwin tarafından oluşturulan sembolik bağlantıları anlamıyor.
- Başlıkla ilgili düzeltmeler:
- Diğer değişiklikler:
-
- Geliştiricilerin, önerilen
ndk-build
komut dosyası yerine cygwin'dendk-build.cmd
kullanmayı tercih etmesi durumunda, daha önce yalnızcacmd.exe
kabuğunda kullanılması amaçlanan tüm*cmd
komut dosyalarına yürütme izinleri uygulandı. - Belirtilen hedef dizin yoksa kopyalama yerine taşıma işlemi yapılarak
make-standalone-toolchain.sh
komut dosyasının hızı artırıldı.
- Geliştiricilerin, önerilen
Android NDK r9c (Aralık 2013)
Bu sürümde yalnızca hata düzeltmeleri yapılmıştır.
- Önemli hata düzeltmeleri:
-
- GCC 4.8 ARM ile ilgili, yığın işaretçisinin çok erken geri yüklendiği sorun düzeltildi. Bu sorun, çerçeve işaretçisinin yığın çerçevesindeki bir değişkene güvenilir bir şekilde erişmesini engelliyordu. (GCC sorunu 58854)
- GCC 4.8 libstdc++ ile ilgili bir sorun düzeltildi. Bu sorunda std::nth_element'teki bir hata, rastgele bir segmentasyon hatası üreten kodun oluşturulmasına neden oluyordu. (Sorun 62910)
- GCC 4.8 ICE'nin cc1/cc1plus ile
-fuse-ld=mcld
kullanıldığında aşağıdaki hataya neden olması düzeltildi:cc1: internal compiler error: in common_handle_option, at opts.c:1774
-mhard-float
matematik işlevleri için__builtin
desteği düzeltildi. STL ile ilgili-mhard-float
düzeltmeleri hakkında güncel bilgi almak için lütfen 61784 numaralı sorunu takip edin.
- Diğer hata düzeltmeleri:
-
- Başlıkla ilgili düzeltmeler:
poll
olan prototip,poll.h
'dapoll(struct pollfd *, nfds_t, int);
olarak değiştirildi.- Android API düzeyleri 12 ve 19 için
libc.so
listesineutimensat
eklendi. Bu kitaplıklar artık 12-19 arasındaki tüm Android API düzeylerinde kullanılabilir. - Android API düzeyi 19 için
futimens
,libc.so
içine eklendi. - Android API düzeyi 8 ve sonraki sürümler için
time.h
'ye eksikclock_settime()
veclock_nanosleep()
eklendi. time.h.
tarihindeCLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,
veCLOCK_BOOTTIME_ALARM
eklendi- Eski
CLOCK_REALTIME_HR
veCLOCK_MONOTONIC_HR.
kaldırıldı.
- Teapot, MoreTeapots ve
source/android/ndk_helper
örneklerinde:- armeabi-v7a için artık hard-float abi kullanacak şekilde değiştirildi.
- Android API düzeyi 19 ve sonraki sürümlerde tam ekran modunu kullanacak şekilde güncellendi.
Check_ReleaseStringUTFChars
in/system/lib/libdvm.so
ile ilgili, x86 cihazlarda kilitlenmelere neden olan bir sorun düzeltildi.
- NDK paketi sembolik bağlantı üzerinden referans verildiğinde cygwin'de oluşan
ndk-build
hataları düzeltildi. ndk-build.cmd
mutlak yollar içerdiğindecmd.exe
içinde oluşanLOCAL_SRC_FILES
hataları düzeltildi. (Sorun 69992)- Bir rutin, dosya adı veya satır numarası bulunamadığı için bir çerçeve ayrıştırılamadığında bile devam etmesi için
ndk-stack
komut dosyası düzeltildi. Bu durumlarda??
yazdırılır. - Windows-x64_64 hedefleri için
ndk-stack
yığını düzeltildi. Böylece, artık bir çerçeve satırınıpc
,eip
veyaip
içermeyenstack:
bölümündeki bir satırla yanlışlıkla eşleştirmiyor. Örneğin:I/DEBUG ( 1151): #00 5f09db68 401f01c4 /system/lib/libc.so
- gabi++'nın şu şekilde çalışması için düzeltildi:
- C++ iş parçacığına özel nesneleri ayırmak için malloc() işlevini kullanmaz.
- Kullanıcı hata ayıklama/mühendislik Android platform derlemelerinde libc.debug.malloc'un sıfır olmadığı durumlarda gabi++'da kilitlenmeleri önler.
- Başlıkla ilgili düzeltmeler:
- Diğer değişiklikler:
-
LOCAL_EXPORT_LDFLAGS
eklendi.- Seçeneklerin açıkça
ndk-build
'ye iletildiği entegre bir derleme sisteminde kullanılmak üzereNDK_PROJECT_PATH=null
ayarı kullanıma sunuldu. Bu ayarlandk-build
,NDK_PROJECT_PATH.
araması yapmaz. Bu ayar, değişkenlerin NDK_PROJECT_PATH'ten varsayılan ayarlar türetmesini de engeller. Bu nedenle, aşağıdaki değişkenlerin artık açıkça belirtilmesi gerekir (varsayılan değerleri varsa):NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG
(isteğe bağlı, varsayılan olarak 0) veApplication.mk
içinde bulunan diğerAPP_*
'ler. APP_ABI
artık virgülle ayrılmış bir listede sıralanabilir. Örneğin:APP_ABI := "armeabi,armeabi-v7a"
-g
seçeneği kullanılarak, STL'nin tamamını isteğe bağlı, ayrı bir paket olanandroid-ndk-r9c-cxx-stl-libs-with-debugging-info.zip
içinde hata ayıklama bilgileriyle yeniden oluşturma olanağı sağlandı. Bu seçenek,ndk-stack
komut dosyasının STL'de daha iyi bir yığın dökümü sağlamasına yardımcı olur. Bu değişiklik, son ve temizlenmiş dosyanın kodunu/boyutunu etkilememelidir.- Derleme sırasında
hello-jni
raporlamak için geliştirilmişAPP_ABI
örnekleri. - Statik kitaplıklar oluşturmak için
ar
aracını Deterministik modda (-D
seçeneği) kullandım. (Sorun 60705)
Android NDK r9b (Ekim 2013)
- Önemli değişiklikler:
-
- 13, 15, 16 ve 17 düzeylerinin eklenmesi de dahil olmak üzere 18'e kadarki tüm Android API düzeyleri için
include/android/*h
vemath.h
güncellendi. Eklenen API'ler hakkında bilgi için Changes 68012 ve 68014 ile ilgili commit mesajlarına bakın. (47150, 58528 ve 38423 numaralı sorunlar) - Renderscript bağlama da dahil olmak üzere Android API düzeyi 19 için destek eklendi.
- Mevcut armeabi-v7a ABI'sinde
-mhard-float
için destek eklendi. Clang ile ilgili daha fazla bilgi ve mevcut kısıtlamalar içintests/device/hard-float/jni/Android.mk
başlıklı makaleyi inceleyin. - GNU Compiler Collection (GCC) 4.8'den 4.8.2'ye geçildi ve teşhis rengi desteği eklendi. Teşhis renklerini etkinleştirmek için
-fdiagnostics-color=auto
,-fdiagnostics-color=always,
değerini ayarlayın veyaGCC_COLORS
değerini aşağıda gösterildiği gibi dışa aktarın: Daha fazla bilgi için GCC Language Independent Options başlıklı makaleyi inceleyin.GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
- OpenGL ES 3.0 özelliklerini gösteren iki yeni örnek eklendi: Teapot ve MoreTeapots. Bu örnekler, Android 4.1 (API düzeyi 16) ve sonraki sürümlerin yüklü olduğu cihazlarda çalışır.
- GCC 4.7 ve Clang 3.2 desteği kullanımdan kaldırıldı. Bu destek, bir sonraki sürümde tamamen kaldırılacak.
- 13, 15, 16 ve 17 düzeylerinin eklenmesi de dahil olmak üzere 18'e kadarki tüm Android API düzeyleri için
- Önemli hata düzeltmeleri:
-
- ARM GCC 4.6'nın 16 bitlik göreceli atlama tabloları oluşturamaması sorunu düzeltildi.
thumb2
(GCC Sorunu) g++.dg/cpp0x/lambda/lambda-defarg3.C
üzerinde GCC 4.8 dahili derleyici hatası (ICE) düzeltildi. (Değişiklik 62770, GCC Sorunu)- Windows 32 bit
*-gdb.exe
yürütülebilir dosyalarının başlatılamamasına neden olan sorun düzeltildi. (58975 numaralı sorun) - Mermi kitaplığı oluşturulurken GCC 4.8 ICE'nin kilitlenmesi sorunu düzeltildi. Hata mesajı şu şekildedir:
(58916 numaralı sorun, GCC sorunu)internal compiler error: verify_flow_info failed
- Giriş kodunda geri sarma için
ARM.exidx
verilerini atlamak üzere değiştirilmiş GDB/ARM derlemesi ve exidx tabanlı yığın geri sarmayı kontrol etmek için bir komut (set arm exidx-unwinding
) eklendi. (55826 numaralı sorun) - HI ve LO kayıtlarının yanlış şekilde yeniden kullanıldığı Clang 3.3 MIPS derleyici sorunu düzeltildi.
dbx_reg_number
'deki MIPS 4.7 ICE ile ilgili sorun düzeltildi. Hata mesajı şu şekildedir: (GCC Patch)external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
- ARM GCC 4.6'nın 16 bitlik göreceli atlama tabloları oluşturamaması sorunu düzeltildi.
- Diğer hata düzeltmeleri:
-
- Üstbilgi düzeltmeleri
- ARM
WCHAR_MIN
veWCHAR_MAX
, spesifikasyona göre imzasız olacak şekilde düzeltildi (X86/MIPS sürümleri imzalıdır). Eski davranışı geri yüklemek için_WCHAR_IS_ALWAYS_SIGNED
tanımlayın. (57749 numaralı sorun) include/netinet/tcp.h
öğesininTCP_INFO
durum numaralandırmasını içermesi düzeltildi. (38881 numaralı sorun)- c++11 modu kullanılırken GCC 4.8 araç zincirinde uyarı oluşturmayı durdurmak için
cdefs_elh.h
makrosu_C_LABEL_STRING
düzeltildi. (58135 numaralı sorun, 58652 numaralı sorun) - Mevcut olmayan
imaxabs
veimaxdiv
işlevleri üstbilgideninttypes.h
kaldırıldı. pthread_exit()
dönüş değerleri vepthread_self()
ile ilgili sorun düzeltildi. (60686 numaralı sorun)mkdtemp()
üstbilgisinde zaten bulunan eksikmkdtemp()
işlevi eklendistdlib.h
.bionic
- ARM
- Android API düzeyi 11'de Clang ile
samples/gles3jni
oluşturma sorunu düzeltildi. - MCLinker, aşağıdaki seçeneklerin birden fazla kez kullanılmasına izin verecek şekilde düzeltildi:
-gc-sections
ve--eh-frame-hdr
. --no-warn-mismatch
seçeneğinin kabul edilmesi için MCLinker düzeltildi.- Tüm VFPv4 cihazlarının IDIV'yi desteklediği varsayılmayacak şekilde
cpu-features
seçeneği değiştirildi. Bu seçenek artık yalnızca Nexus 4 dahil olmak üzere beyaz listeye eklenen cihazlara IDIV'yi ekler. (57637 numaralı sorun) android_native_app_glue.c
'nın etkinlik öncesi gönderme işlemlerinde hataları yanlışlıkla günlüğe kaydetmesiyle ilgili sorun düzeltildi.gabi++
terminate ve unexpected_handler üzerindeki tüm işlemlerin iş parçacığı açısından güvenli olması sağlandı.-integrated-as
seçeneğiyle ilgili çeşitli sorunlar düzeltildi. Böylece bu seçenek,ssax-instructions
vefenv
testlerini geçebilir.- GCC 4.6/4.7/4.8 derleyicisinin, bağlayıcı seçeneğini
--eh-frame-hdr
statik yürütülebilir dosyalar için bile geçirmesi düzeltildi. Daha fazla bilgi için GCC yaması bölümüne bakın. CPU-ARCH-ABIS.html
içinde fazladan kesme işareti düzeltildi. Daha fazla bilgi içinNDK-DEPENDS.html
sayfasına bakın. (60142 numaralı sorun)- Windows'da ndk-build çıkışındaki fazladan tırnak işaretleri düzeltildi. (60649 numaralı sorun)
- Clang 3.3, ARM'nin yerleşik atomik işlemleri (ör.
__atomic_fetch_add
,__atomic_fetch_sub
ve__atomic_fetch_or
) derleyecek şekilde düzeltildi. - Özelleştirilmiş
vfprintf
ile Clang 3.3 ICE düzeltildi. (Clang sorunu)
- Üstbilgi düzeltmeleri
- Diğer değişiklikler:
-
- Tüm GCC derlemeleri için OpenMP etkinleştirildi. Bu özelliği kullanmak için derleme ayarlarınıza aşağıdaki işaretleri ekleyin:
Kod örnekleri içinLOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
tests/device/test-openmp
bölümüne bakın. ld.mcld
boyutunu önemli ölçüde küçülttük (1,5 MB'a karşıld.bfd
3,5 MB veld.gold
7,5 MB). Bu sayede yaklaşık %20 hız artışı elde ettik.- Yalnızca C için geçerli olan ancak C++ için geçerli olmayan seçenekleri belirtmek üzere
LOCAL_CONLYFLAGS
veAPP_CONLYFLAGS
eklendi. MevcutLOCAL_CFLAGS
veAPP_CFLAGS
, C++ derlemesi için de kullanılır (seçeneklerin çoğunu iki kez belirtme zahmetinden kurtulmak için). Bu nedenle,-std=gnu99
gibi seçenekler g++ derlemelerinde uyarı, clang++ derlemelerinde ise hata ile başarısız olabilir. gabi++
dizi yardımcı işlevleri eklendi.- Yığınların daha önce engellenen noktaların (ör.
__aeabi_idiv0
) ötesine çözülmesine olanak tanımak için tümlibgcc.a
dosyalarının-funwind-tables
ile oluşturulmasını sağlayacak şekilde GCC derlemeleri değiştirildi. - Yeni
-mmxu
seçeneğiyle MIPS GCC4.6/4.7/4.8'e Ingenic MXU desteği eklendi. - ldxc1/sdxc1'i de kontrol etmek için MIPS GCC4.6/4.7/4.8
-mldc1-sdc1
genişletildi - Çılgın bağlayıcı eklendi. Daha fazla bilgi için
sources/android/crazy_linker/README.TXT
sayfasına bakın. bitmap-plasma
simgesinin 200x200 piksellik bir alan yerine tam ekrana çizim yapması düzeltildi.- Aynı dosyalara sembolik bağlantılar oluşturarak Linux ve Darwin araç zinciri boyutları% 25 oranında küçültüldü.
- Tüm GCC derlemeleri için OpenMP etkinleştirildi. Bu özelliği kullanmak için derleme ayarlarınıza aşağıdaki işaretleri ekleyin:
Android NDK r9 (Temmuz 2013)
- Önemli değişiklikler:
-
- Android 4.3 (API düzeyi 18) için destek eklendi. Daha fazla bilgi için
STABLE-APIS.html
vesamples/gles3jni/README
bölümündeki yeni kod örneklerine bakın. - Android 4.3 (API düzeyi 18) ve sonraki sürümlerde desteklenen OpenGL ES 3.0 için başlıklar ve kitaplıklar eklendi.
- NDK'ya GNU Compiler Collection (GCC) 4.8 derleyicisi eklendi. GCC 4.6 hâlâ varsayılan olduğundan bu seçeneği açıkça etkinleştirmeniz gerekir:
ndk-build
derlemeleri içinNDK_TOOLCHAIN_VERSION=4.8
öğesini dışa aktarın veyaApplication.mk
'a ekleyin.- Bağımsız derlemeler için
make-standalone-toolchain.sh
içinde--toolchain=
seçeneğini kullanın. Örneğin:
--toolchain=arm-linux-androideabi-4.8
Not:
-Wunused-local-typedefs
seçeneği-Wall
tarafından etkinleştirilir.sources/cxx-stl/stlport/stlport/stl/config/features.h
, 311. satır gibi derleme zamanı onayları kullanıyorsanız__attribute__((unused))
eklediğinizden emin olun. Daha fazla bilgi için 55460 numaralı değişikliği inceleyin.Not: GCC 4.7 sürümünde ve sonraki sürümlerde, ARM derleyicileri ARMv6 ve daha yüksek derleme hedefleri için varsayılan olarak hizalanmamış erişim kodu oluşturur. Bu özelliği desteklemeyen çekirdekler için derleme yaparken
-mno-unaligned-access
derleme seçeneğini eklemeniz gerekebilir. - Clang 3.3 desteği eklendi.
NDK_TOOLCHAIN_VERSION=clang
Derleme seçeneği artık varsayılan olarak Clang 3.3'ü seçiyor.Not: Hem GCC 4.4.3 hem de Clang 3.1 artık kullanılmamaktadır ve bir sonraki NDK sürümünden kaldırılacaktır.
- GNU Project Debugger (GDB), Python 2.7.5'i destekleyecek şekilde güncellendi.
- Windows ana makinelerini desteklemek için MCLinker eklendi.
ld.gold
varsayılan olarak kullanılabilir olduğundan MCLinker'ı etkinleştirmek için-fuse-ld=mcld
öğesiniLOCAL_LDFLAGS
veyaAPP_LDFLAGS
içine eklemeniz gerekir. - ELF kitaplık bağımlılıklarını yazdıran
ndk-depends
aracı eklendi. Daha fazla bilgi içinNDK-DEPENDS.html
sayfasına bakın. (53486 numaralı sorun)
- Android 4.3 (API düzeyi 18) için destek eklendi. Daha fazla bilgi için
- Önemli hata düzeltmeleri:
-
android_native_app_glue
'da olası etkinlik işleme sorunu düzeltildi. (41755 numaralı sorun)- ARM/GCC-4.7 derlemesi, NEON yükleme ve depolama talimatları VST ve VLD için yeterli hizalama oluşturacak şekilde düzeltildi. (GCC Sorunu 57271)
- Dize değişmezinde sabit negatif dizin değeri için GCC 4.4.3/4.6/4.7 dahili derleyici hatası (ICE) düzeltildi. (54623 numaralı sorun)
- Sabit başlatma için GCC 4.7'deki nesne adresiyle ilgili segmentasyon hatası düzeltildi. (56508 numaralı sorun)
- Boost 1.52.0 kullanılırken
-O
değerleri için GCC 4.6 ARM segmentasyon hatası düzeltildi. (42891 numaralı sorun) libc.so
velibc.a
,wait4()
işlevini destekleyecek şekilde düzeltildi. (19854 numaralı sorun)- x86 libc.so ve libc.a dosyaları,
clone()
işlevini içerecek şekilde güncellendi. LOCAL_SHORT_COMMANDS
dosyasının boş olması veya kullanılmaması nedeniyle oluşanlinker.list
hatası düzeltildi.- Mac OS'te GCC MIPS derlemesinin, CFI yönergelerini kullanacak şekilde düzeltilmesi. Bu yönergeler olmadan
ld.mcld --eh-frame-hdr
sık sık başarısız oluyordu. llvm/lib/VMCore/Value.cpp
'da Clang 3.2 X86/MIPS dahili derleyici hatası düzeltildi. (59021 numaralı değişiklik)- GCC 4.7 64 bit Windows derleyicisinin kilitlenmesi sorunu düzeltildi. (Hata:
out of memory allocating 4294967280 bytes
). ndk-gdb
komut dosyası,--start
veya--launch
işlemlerinin artık GNU hata ayıklama sunucusunu beklemesi için güncellendi. Böylece, yürütme yolunda erken ayarlanan kesme noktalarına (ör. JNI kodundaki kesme noktaları) daha güvenilir bir şekilde ulaşılabilir. (41278 numaralı sorun)Not: Bu özellik için jdb gerekir ve bekleyen kesme noktalarıyla ilgili uyarılar üretir. Önceki davranışı geri yüklemek için
--nowait
seçeneğini belirtin.- Kitaplık listesi boş olduğunda GDB'nin kilitlenmesi sorunu düzeltildi.
stepi
komutubx pc
veyablx pc
Thumb talimatından sonra kullanıldığında GDB'nin kilitlenmesi sorunu düzeltildi. (56962 numaralı sorun, 36149 numaralı sorun)- MIPS
gdbserver
,DT_DEBUG
yerineDT_MIPS_RLD_MAP
araması yapacak şekilde düzeltildi. (56586 numaralı sorun) - ndk-build komut dosyasındaki döngüsel bağımlılık düzeltildi. Örneğin: A->B ve B->B ise B derlemeden çıkarılıyordu. (56690 numaralı sorun)
- Diğer hata düzeltmeleri:
-
- Clang sürümünü komut satırı seçeneği olarak (ör.
ndk-build
NDK_TOOLCHAIN_VERSION=clang3.2
). Daha önce yalnızca sürümü ortam değişkeni olarak belirtmek mümkündü. - Clang derleyicisi kullanılırken MIPS derleme hedefleri için
_Unwind_Exception
gabi++ boyutu 24 olarak düzeltildi. (54141 numaralı değişiklik) ndk-build
komutu, oluşturulan kitaplıklarınndk-build clean
komutu kullanıldığında önceden oluşturulmuş statik kitaplıklar içeren projelerden gerçekten kaldırılmasını sağlayacak şekilde düzeltildi. (54461 numaralı değişiklik, 54480 numaralı değişiklik)NDK_ANALYZE=1
seçeneği daha az ayrıntılı olacak şekilde değiştirildi.- Geriye dönük uyumluluğu kullanan derlemeler için
gnu-libstdc++/Android.mk
,backward/
yolu içerecek şekilde düzeltildi. (53404 numaralı sorun) stlport new
işlevinin bazen rastgele değerler döndürmesi sorunu düzeltildi.ndk-gdb
,APP_ABIS
değilCPU_ABIS
sırasına göre düzeltildi. (54033 numaralı sorun)- MacOSX'teki NDK 64 bit derlemesinin derleyici için yanlış yolu seçmesi sorunu düzeltildi. (53769 numaralı sorun)
- 64 bit Windows Vista'yı algılamak için derleme komut dosyaları düzeltildi. (54485 numaralı sorun)
- x86
ntonl/swap32
hatası düzeltildi:invalid 'asm': operand number out of range
. (54465 numaralı sorun, 57242 numaralı değişiklik) - Dize değişmezlerini birleştirmek için
ld.gold
düzeltildi. ld.gold
, büyük sembol hizalamasını işleyecek şekilde düzeltildi.ld.gold
seçeneğini etkinleştirmek içinld.gold
güncellendi.--sort-section=name
- GCC 4.4.3/4.6/4.7, statik olarak bağlanmış programlar için
-export-dynamic
seçeneğini bastıracak şekilde düzeltildi. GCC artık statik olarak bağlı programlar için.interp
bölümü eklemiyor. - GCC 4.4.3
stlport
derleme hatası,_Unwind_Control_Block
'nin tutarsıztypedef
'siyle ilgili olarak düzeltildi. (54426 numaralı sorun) - Windows'da oluşturulan ve sondaki
\r
karakterlerini içerebileceği için derleme hatalarına neden olabilecekAndroidManifest.xml
dosyalarını işlemek üzereawk
komut dosyaları düzeltildi. (42548 numaralı sorun) - Ana makinenin 32 bit mi yoksa 64 bit mi olduğunu algılamak için
make-standalone-toolchain.sh
,prebuilts/
dizinini inceleyecek şekilde düzeltildi. - Clang 3.2
-integrated-as
seçeneği düzeltildi. - Clang 3.2 ARM EHABI kompakt modeli
pr1
vepr2
işleyici verileri düzeltildi. - Aşağıdaki Clang hatasını düzeltmek için Clang
-mllvm -arm-enable-ehabi
seçeneği eklendi:clang: for the -arm-enable-ehabi option: may only occur zero or one times!
- Uygulama manifestinde
uses-sdk
öğesi olmadığında derleme hatası oluşması sorunu düzeltildi. (57015 numaralı sorun)
- Clang sürümünü komut satırı seçeneği olarak (ör.
- Diğer değişiklikler:
-
- Üstbilgi Düzeltmeleri
__set_errno
işlevi,errno.h
içinde kullanımdan kaldırıldığı velibc.so
artık dışa aktarmadığı için üstbilgiler değiştirilerek__set_errno
satır içi işlev haline getirildi.elf.h
,stdint.h
'ı içerecek şekilde değiştirildi. (55443 numaralı sorun)sys/un.h
, diğer başlıklardan bağımsız olarak eklenecek şekilde düzeltildi. (53646 numaralı sorun)MotionEvent_getHistorical
API ailesinin tüm üyeleri,const AInputEvent* motion_event
sertifikasını alacak şekilde düzeltildi. (55873 numaralı sorun)malloc_usable_size
değeriniconst void*
olarak ayarlayın. (55725 numaralı sorun)- stdint.h, C99 ile daha uyumlu olacak şekilde düzeltildi. (46821 numaralı değişiklik)
wchar.h
,WCHAR_MAX
veWCHAR_MIN
'yi yeniden tanımlamayacak şekilde değiştirildi.- İşaretçiyle ilgili
PRI
veSCN
makroları için<inttypes.h>
bildirimi düzeltildi. (57218 numaralı sorun) sys/cdefs.h
başlığını, 9'dan düşük API düzeylerinde__WCHAR_TYPE__
32 bit olacak şekilde değiştirdik. Bu, tüm API düzeylerindewchat_t
32 bit olduğu anlamına gelir. Önceki davranışı geri yüklemek için_WCHAR_IS_8BIT
boolean değişkenini tanımlayın. (57267 numaralı sorun)
- NDK'da daha fazla biçimlendirme
docs/
ve çeşitli doküman düzeltmeleri eklendi. - Statik kitaplıklar oluşturulurken ince arşiv tekniği için destek eklendi. (40303 numaralı sorun)
make-standalone-toolchain.sh
komut dosyası,--stl=stlport
seçeneğini belirttiğinizdegnustl
'ye ek olarakstlport
kitaplığını destekleyecek şekilde güncellendi. Daha fazla bilgi içinSTANDALONE-TOOLCHAIN.html
sayfasına bakın.make-standalone-toolchain.sh
komut dosyası,--llvm-version=
seçeneğininclang
veclang++
'ye ek olarak$TOOLCHAIN_PREFIX-clang
ve$TOOLCHAIN_PREFIX-clang++
komut dosyalarını oluşturacak şekilde güncellendi. Böylece, ana makinenin clang ve clang++ tanımlarının yanlışlıkla kullanılması önlendi.- Yukarı akış Clang'de iki optimizasyonu yeniden etkinleştirmek için iki işaret eklendi ancak GCC tarafından derlenen kodla daha iyi uyumluluk için NDK'da devre dışı bırakıldı:
- Clang 3.2 ve sonraki sürümlerde eksik
dönüş
anlamlarını yeniden etkinleştirmek için
-fcxx-missing-return-semantics
işareti eklendi. Normalde, tüm yollar değer döndüren bir işlev için dönüş ifadesiyle sonlandırılmalıdır. Bu durum söz konusu değilse clang, dönüş ifadesi olmayan yola tanımsız bir talimat (veya hata ayıklama modunda tuzak) ekler. Kodunuzun doğru olduğundan eminseniz bu işareti kullanarak optimizasyon aracının tanımlanmamış davranıştan yararlanmasına izin verin. Emin değilseniz bu flag'i kullanmayın. Arayan, rastgele yanlış bir değer almaya devam edebilir ancak optimize edici bunu kullanmaz ve kodunuzun hata ayıklamasını zorlaştırmaz. - Statik oluşturucuya sahip genel değişkenlerin sabit olarak tanıtımını yeniden etkinleştirmek için
-fglobal-ctor-const-promotion
işareti eklendi. Bu işaretle, LLVM'nin global değişken optimizasyon geçişi, global değişkenleri statik oluşturucularla değerlendirmeye ve bunları global sabitlere yükseltmeye çalışır. Bu optimizasyon doğru olsa da GCC tarafından derlenen kodlarla uyumsuzluğa neden olabilir. Örneğin, kod, sabiti değiştirilebilir hale getirmek ve değiştirmek içinconst_cast
yapabilir. GCC'de değişken okuma/yazma modundadır ve kod yanlışlıkla çalıştırılır. Clang'de const değişkeni salt okunur bellektedir ve uygulamanızın kilitlenmesine neden olabilir.
- Clang 3.2 ve sonraki sürümlerde eksik
dönüş
anlamlarını yeniden etkinleştirmek için
- MIPS GCC ve Clang derleyicilerine
-mldc1-sdc1
eklendi. Derleyiciler, varsayılan olarak 8 baytlık nesneleri düzgün şekilde hizalar ve bunları taşımak içinldc1
vesdc1
talimatlarını verir. Uygulamanız, varsayılan ayırıcıyla aynı şekilde yeni bir nesnenin 8 baytlık sınırı ile her zaman uyumlu olmayan özel bir ayırıcı kullanıyorsa uygulamanız, hizalanmamış bellektekildc1
vesdc1
işlemleri nedeniyle kilitlenebilir. Bu durumda, sorunu geçici olarak çözmek için-mno-ldc1-sdc1
işaretini kullanın. APP_PLATFORM_LEVEL
,APP_MIN_PLATFORM_LEVEL
değerinden büyükse etkinliğin önem derecesi uyarıdan bilgiye düşürülür. NDK'da tüm seviyeler için başlıklar bulunmadığındanjni/Application.mk
içindekiAPP_PLATFORM_LEVEL
,APP_PLATFORM
değerinden düşük olabilir. Bu durumda, gerçek seviye aşağı kaydırılır.APP_MIN_PLATFORM_LEVEL
, uygulamanızın manifest dosyasındakiandroid:minSdkVersion
ile belirtilir. (39752 numaralı sorun)cpu-features.c
içinandroid_getCpuIdArm()
veandroid_setCpuArm()
yöntemleri eklendi. Bu ekleme, ARM CPUID bilgilerinin daha kolay alınmasını sağlar. (53689 numaralı sorun)- Clang derlemesi için
ndk-build
, GCC 4.7'ninas/ld
kullanacak şekilde değiştirildi.Not: GCC 4.7'de
monotonic_clock
veis_monotonic
, sırasıylasteady_clock
veis_steady
olarak yeniden adlandırılmıştır. ndk-build
komut dosyasına aşağıdaki yeni uyarılar eklendi:- Statik kitaplık modüllerinde
LOCAL_LDLIBS/LDFLAGS
kullanılıyorsa uyarılar eklendi. - Yapılandırmada oluşturulacak modül yoksa uyarı eklendi.
- Paylaşılan kitaplığın veya yürütülebilir modüllerin
LOCAL_LDLIBS/LDFLAGS
bölümünde kullanılan sistem dışı kitaplıklar için uyarı eklendi.
- Statik kitaplık modüllerinde
APP_MODULES
tanımlanmamışsa veAndroid.mk
içinde yalnızca statik kitaplıklar listeleniyorsa komut dosyasının hepsini zorunlu olarak oluşturması için derleme komut dosyaları güncellendi. (53502 numaralı sorun)ndk-build
,LOCAL_SRC_FILES
içinde mutlak yolları destekleyecek şekilde güncellendi.-tui
seçeneği etkinleştirilmiş*-gdb
yürütülebilir dosyalarının kopyaları olan*-gdbtui
yürütülebilir dosyaları kaldırıldı.- Edison Design Group (EDG) derleyici ön ucu
_STLP_HAS_INCLUDE_NEXT
'yı tekrar etkinleştirdiğinde sizi uyarmak için derleme komut dosyaları güncellendi. (53646 numaralı sorun) NDK_LIBS_OUT
ortam değişkeni eklendi. Bu değişken,libraries/gdbserver
için varsayılan$PROJECT/libs
yolunun geçersiz kılınmasına olanak tanır. Daha fazla bilgi içinOVERVIEW.html
sayfasına bakın.- ndk-build komut dosyası varsayılanları, kodu biçim dizesi korumasıyla derleyecek şekilde değiştirildi
-Wformat -Werror=format-security
. Devre dışı bırakmak içinLOCAL_DISABLE_FORMAT_STRING_CHECKS=true
simgesini ayarlayabilirsiniz. Daha fazla bilgi içinANDROID-MK.html
sayfasına bakın. ndk-gdb-py
sürümünde STL pretty-print desteği eklendi. Daha fazla bilgi içinNDK-GDB.html
sayfasına bakın.- googletest çerçevelerine dayalı testler eklendi.
- Mevcut kabuk
bash
değilse sizi uyaran bir bildirim, araç zinciri derleme komut dosyasına eklendi.
- Üstbilgi Düzeltmeleri
Android NDK r8e (Mart 2013)
- Önemli değişiklikler:
-
- 64 bit ana makine araç zinciri seti (paket adı soneki
*-x86_64.*
) eklendi. Daha fazla bilgi içinCHANGES.HTML
veNDK-BUILD.html
başlıklı makaleleri inceleyin. - Clang 3.2 derleyicisi eklendi. GCC 4.6 hâlâ varsayılan derleyicidir. Clang derleyicisini kullanma hakkında bilgi edinmek için
CHANGES.HTML
başlıklı makaleyi inceleyin. - Linux/MacOSX ana makineleri için statik kod analiz aracı eklendi. Analiz aracını kullanma hakkında bilgi edinmek için
CHANGES.HTML
bölümüne bakın. - Linux/MacOSX ana makineleri için deneysel bir özellik olarak MCLinker eklendi.
ld.gold
bağlayıcı, kullanılabilir olduğunda varsayılan olarak ayarlanır. Bu nedenle, bağlayıcıyı açıkça etkinleştirmeniz gerekir. Daha fazla bilgi içinCHANGES.HTML
sayfasına bakın. - Modül bağımlılıkları için topolojik sıralama kullanmak üzere ndk-build güncellendi. Bu sayede derleme,
LOCAL_STATIC_LIBRARIES
,LOCAL_WHOLE_STATIC_LIBRARIES
veLOCAL_SHARED_LIBRARIES
içinde belirtilen kitaplıkların sırasını otomatik olarak ayırır. Daha fazla bilgi içinCHANGES.HTML
sayfasına bakın. (39378 numaralı sorun)
- 64 bit ana makine araç zinciri seti (paket adı soneki
- Önemli hata düzeltmeleri:
-
-O2
içindeki tüm araç zincirlerini oluşturmak için derleme komut dosyası düzeltildi. Önceki sürümlerdeki araç zincirleri, optimizasyon olmadan yanlış şekilde oluşturulmuştu.- Clang/llvm'yi koşulsuz olarak 64 bit'te MacOSX için oluşturan derleme komut dosyası düzeltildi.
- Sabit GCC 4.6/4.7 dahili derleyici hatası:
gen_thumb_movhi_clobber at config/arm/arm.md:5832
. (52732 numaralı sorun) - GCC/ARM 4.6/4.7'nin 64 bit atomik yerleşik işlevleri kullanarak kodu bağlayamadığı derleme sorunu düzeltildi. (41297 numaralı sorun)
- GCC 4.7 bağlayıcı DIV kullanımı uyuşmazlığı hataları düzeltildi. (Sourceware Sorunu)
- GCC 4.7 dahili derleyici hatası
build_data_member_initialization, at cp/semantics.c:5790
düzeltildi. - GCC 4.7 dahili derleyici hatası
redirect_eh_edge_1, at tree-eh.c:2214
düzeltildi. (52909 numaralı sorun) - GCC 4.7'deki segmentasyon hatası düzeltildi. (GCC Sorunu)
<chrono>
saat çözünürlüğü düzeltildi vesteady_clock
etkinleştirildi. (39680 numaralı sorun)- GCC 4.7 libstdc++ için
_GLIBCXX_HAS_GTHREADS
özelliğini etkinleştirmek üzere araç zinciri düzeltildi. (41770 numaralı sorun, 41859 numaralı sorun) - Eksik
posix_memalign
nedeniyle X86 MXX/SSE kodunun bağlantısının oluşturulamaması sorunu düzeltildi. (Değişiklik 51872) i386.c
işlevinde GCC4.7/X86 segmentasyon hatası düzeltildi.distance_non_agu_define_in_bb()
. (50383 numaralı değişikliği yapın)- GCC4.7/X86, önceki
cmov
davranışını geri yükleyecek şekilde düzeltildi. (GCC Sorunu) - libstdc++/GCC4.7'de
setlocale()
değerinin NULL dönüş değeri işlenmesi düzeltildi. (46718 numaralı sorun) ld.gold
çalışma zamanında__exidx_start
ve__exidx_start_end
için tanımsız referans hatası düzeltildi. (52134 numaralı değişiklik)- Eigen kitaplığı kullanılırken Clang 3.1 dahili derleyici hatası düzeltildi. (41246 numaralı sorun)
- Clang 3.1'deki dahili derleyici hatası (C++11 modunda
<chrono>
dahil) düzeltildi. (39600 numaralı sorun) - Tek tip başlatılmış
rvalue
için yöntem çağrısı nesne kodu oluşturulurken Clang 3.1 dahili derleyici hatası düzeltildi. (41387 numaralı sorun) - Sabit Clang 3.1/X86 yığın yeniden hizalaması. (52154 numaralı değişiklik)
- Android 4.1.2'de hata ayıklama yapılırken GNU Debugger (GDB) SIGILL ile ilgili sorun düzeltildi. (40941 numaralı sorun)
- Semboller uzun ve dolaylı dosya yolları içerdiğinde GDB'nin
source:line
kesme noktaları ayarlayamaması sorunu düzeltildi. (42448 numaralı sorun) - MIPS PIE çalıştırılabilir dosyaları için GDB
read_program_header
düzeltildi. (49592 numaralı değişiklik) uncaught_exception()
içindeSTLport
segmentasyon hatası düzeltildi. (50236 numaralı değişiklik)DW_EH_PE_udata2
,DW_EH_PE_udata4
veDW_EH_PE_udata8
öğelerine hizalanmamış erişim nedeniyle istisna işleme sırasında oluşanSTLport
veri yolu hatası düzeltildi.nothrow new[]
operatörüyle ilgili Gabi++ sonsuz yineleme sorunu düzeltildi. (52833 numaralı sorun)- Gabi++'nın istisna işleyici işaretçisine yanlış ofset uygulaması düzeltildi. (53446 numaralı değişiklik)
- Gabi++ yedekli ücretsiz istisna nesnesi kaldırıldı (Değişiklik 53447)
- Diğer hata düzeltmeleri:
-
- Sabit NDK üstbilgileri:
size_t
,ssize_t
veptrdiff_t
ile ilgili gereksiz tanımlar kaldırıldı.- MIPS ve ARM
fenv.h
başlığı düzeltildi. stddef.h
, araç zincirinde zaten mevcut olduğundanoffsetof
öğesini yeniden tanımlamayacak şekilde düzeltildi.elf.h
,Elf32_auxv_t
veElf64_auxv_t
içerecek şekilde düzeltildi. (38441 numaralı sorun)#ifdef
C++ tanımları,OpenSLES_AndroidConfiguration.h
başlık dosyasında düzeltildi. (53163 numaralı sorun)
STLport
, sessizce çıkmak yerine yetersiz bellek hatasından sonra iptal edilecek şekilde düzeltildi.- API düzeyi 8 ve önceki sürümlerde derleme yapılabilmesi için sistem ve Gabi++ üstbilgileri düzeltildi.
cpufeatures
,/proc/self/auxv
ayrıştırılmayacak şekilde düzeltildi. (43055 numaralı sorun)ld.gold
'nın ana makine libstdc++'ya ve Windows platformlarındalibgcc_sjlj_1.dll
kitaplığına bağlı olmaması için düzeltildi..vsave
içinde tutarsız kayıt listesi yayan ve derleyiciyi başarısız kılan Clang 3.1 düzeltildi. (49930 numaralı değişiklik)- Clang 3.1, libgabi++'yı derleyebilecek ve MIPS derleme hedefleri için
test-stlport
testlerini geçebilecek şekilde düzeltildi. (51961 numaralı değişiklik) - Clang 3.1, varsayılan olarak yalnızca C++ için istisnayı etkinleştirecek şekilde düzeltildi, C için etkinleştirilmeyecek.
- Çoğu GNU istisna testini geçmek için Clang 3.1'deki çeşitli sorunlar düzeltildi.
- Bağımsız NDK derleyicisinde
clang
veclang++
komut dosyaları,-cc1
öğesini algılayacak ve bulunduğunda-target
öğesini belirtmeyecek şekilde düzeltildi. ndk-build
,Application.mk
içinde ayarlananNDK_APP_OUT
değerini gözlemleyecek şekilde düzeltildi.libc.so
velib.a
işlevlerinde,setjmp.h
içinde önceden tanımlanmış olansigsetjmp
vesiglongjmp
işlevlerinin eksik olması sorunu düzeltildi. (19851 numaralı sorun)- GCC 4.4.3/4.6/4.7 libstdc++'da, C++ 11'de Clang ile çalışacak şekilde yama yapıldı. (Clang Sorunu)
HOST_AWK
'ya iletilen bağımsız değişkendeki cygwin yolu düzeltildi.- Projenin JNI dizininden çalıştırılırken Windows'daki
ndk-build
komut dosyası uyarısı düzeltildi. (40192 numaralı sorun) - Makefile'da
LOCAL_PATH
tanımında sondaki boşluk olması durumundandk-build
komut dosyasının oluşturulmamasına neden olan sorun düzeltildi. (42841 numaralı sorun)
- Sabit NDK üstbilgileri:
- Diğer değişiklikler:
-
- GCC/MIPS araç zincirinde iş parçacığı desteği etkinleştirildi.
- GCC'deki istisna işleme yardımcıları
__cxa_begin_cleanup
ve__cxa_type_match
, GNU libstdc++'daki önceki gizli görünürlükten varsayılan görünürlüğe güncellendi. Daha fazla bilgi içinCHANGES.HTML
bölümüne bakın. - Gabi++ ve STLport statik kitaplıklarının artık istisna işleme yardımcıları hariç gizli görünürlükle oluşturulması için derleme komut dosyaları güncellendi.
STLport
, Thumb modunda ARM için oluşturulacak şekilde derleme güncellendi.- Gabi++'da
std::set_new_handler
için destek eklendi. (52805 numaralı sorun) - GNU libstdc++'da
FUTEX
sistem çağrısı etkinleştirildi. ndk-build
, önceden oluşturulmuş statik kitaplığı artık bir projeninobj/local/<abi>/
dizinine kopyalamayacak şekilde güncellendi. (40302 numaralı sorun)__ARM_ARCH_5*__
, ARMtoolchains/*/setup.mk
komut dosyasından kaldırıldı. (21132 numaralı sorun)- ARM için thumb'da ek GNU libstdc++ kitaplıkları oluşturuldu.
- 32 bit FPU ile MIPS kayan nokta
madd/msub/nmadd/nmsub/recip/rsqrt
talimatları etkinleştirildi. - Daha fazla optimizasyona izin vermek için GCC 4.6 ve 4.7'de grafit döngüsü optimizasyonunu etkinleştirildi:
-fgraphite
,-fgraphite-identity
,-floop-block
,-floop-flatten
,-floop-interchange
,-floop-strip-mine
,-floop-parallelize-all
, ve-ftree-loop-linear
. (info) - Linux ve Max OS X 32 bit ana makinelerde Clang 3.1 için
polly
etkinleştirildi. Bu, bellek erişimini analiz edip optimize eder. (info) - Linux'ta GCC 4.7, 4.6, Clang 3.2 ve Clang 3.1'de (LLVMgold.so aracılığıyla Clang LTO)
-flto
etkinleştirildi.ld.gold
kullanılamadığından MIPS derleyici hedefleri desteklenmiyor. - GCC 4.6/4.7'de
ld.gold
için--plugin
ve--plugin-opt
etkinleştirildi. - GCC 4.7'de
ld.gold
için--text-reorder
etkinleştirildi. - GNU libstdc++'yı, bionic başlığındaki
isinf
komut dosyasının tanımını kaldıran_GLIBCXX_USE_C99_MATH
ile yapılandırdı. Daha fazla bilgi içinCHANGES.html
sayfasına bakın. - Derleme komut dosyalarına
APP_LDFLAGS
eklendi. Daha fazla bilgi içinANDROID-MK.html
sayfasına bakın. NDK_LOG=0
'nınNDK_LOG
'ı devre dışı bırakmasına izin vermek için derleme komut dosyaları güncellendi.NDK_HOST_32BIT=0
'nın ana makine geliştirici ortamı 32 bit araç zincirini devre dışı bırakmasına olanak tanımak için derleme komut dosyaları güncellendi.-march=
ve-mtune=
varsayılan GCC/X86 işaretleripentiumpro
vegeneric
'deni686
veatom
olarak değiştirildi.- Gelişmiş araç zinciri derleme komut dosyaları:
build-gcc.sh
'da,mingw
derleme türü için önemli miktarda paralel derleme işlemesini engelleyen bir yarış durumu düzeltildi.build-gabi++.sh
vebuild-stlport.sh
, artık NDK paketinden çalıştırılabilecek şekilde güncellendi. (52835 numaralı sorun)MSys
yardımcı program koleksiyonundakirun-tests.sh
düzeltildi.- 64 bit ana makine araç zinciri ve Canadian Cross derleme desteği iyileştirildi.
build-mingw64-toolchain.sh
komut dosyası daha yeni bir sürüme güncellendi.libgnustl_static.a
vestlport_static.a
gizli görünürlük olmadan oluşturma seçeneği eklendi.
Android NDK r8d (Aralık 2012)
- Önemli değişiklikler:
-
- NDK'ya GNU Compiler Collection (GCC) 4.7 derleyicisi eklendi. GCC 4.6 derleyicisi
hâlâ varsayılan derleyicidir. Bu nedenle, yeni sürümü aşağıdaki şekilde açıkça etkinleştirmeniz gerekir:
ndk-build
içinNDK_TOOLCHAIN_VERSION=4.7
değişkenini dışa aktarın veyaApplication.mk
'ye ekleyin.- Bağımsız derlemeler için
--toolchain=
seçeneğinimake-standalone-toolchain.sh
'ye ekleyin. Örneğin:--toolchain=arm-linux-androideabi-4.7
Not: Bu özellik deneyseldir. Lütfen deneyin ve sorunları bildirin.
- gabi++ aracılığıyla
stlport
istisna desteği eklendi. Yeni gabi++'ındlopen
ve ilgili koda bağlı olduğunu unutmayın. Bu nedenle:- Artık
-static
seçeneğini kullanarak statik bir yürütülebilir dosya oluşturamaz veyaAPP_STL := stlport_static
kullanaraklibstlport_static.a
ekleyemezsiniz. (Bağımsız bir araç zinciriyle-static
seçeneğini kullanmaya devam edebilirsiniz.)include $(BUILD_EXECUTABLE)
kullanılarak dinamik bir yürütülebilir dosya derleme işlemi, derleyici-ldl
seçeneğini otomatik olarak eklediği için çalışmaya devam eder. - Projeniz
-nostdlib
ve {-Wl,--no-undefined} kullanarak bağlanıyorsa-ldl
seçeneğini manuel olarak eklemeniz gerekir.
CPLUSPLUS-SUPPORT.html
sayfasına bakın.Not: Bu özellik deneyseldir ve GCC 4.4.3 veya Clang 3.1'e kıyasla GCC 4.6/4.7 derleyicilerle daha iyi çalışır. Lütfen deneyin ve sorunları bildirin.
- Artık
- GCC 4.6 ve sonraki derleyicileri kullanan
-fstack-protector
,-fstack-protector-all
ve-fstack-protector-strong
için x86'ya-mstack-protector-guard=
seçeneği eklendi. Bu seçenekle, eski Android C kitaplığı (bionic) ile uyumlu global varsayılan yol ve yeni tls yolu (%gs:20) arasında seçim yapabilirsiniz.Not:
-mstack-protector-guard
ayarı,-fstack-protector*
seçeneklerini etkinleştirmez. - Android 4.1 ve sonraki sürümlerde
/proc
üzerinden otomatik algılama mümkün olmadığında kullanılmak üzereandroid_setCpu()
işlevi eklendi.sources/android/cpufeatures/cpu-features.c
(Chromium Sorunu 164154)
- NDK'ya GNU Compiler Collection (GCC) 4.7 derleyicisi eklendi. GCC 4.6 derleyicisi
hâlâ varsayılan derleyicidir. Bu nedenle, yeni sürümü aşağıdaki şekilde açıkça etkinleştirmeniz gerekir:
- Önemli hata düzeltmeleri:
-
ndk-build
komut dosyası kullanılırken nesne dosyalarının gereksiz yere yeniden oluşturulması sorunu düzeltildi. (39810 numaralı sorun)- Mac OS X 10.6.x için NDK 8c sürümünde, aşağıdaki hataya neden olan bağlayıcı hatası düzeltildi:
Bu sorun, Mac OS X 10.7'de derleme yapılması nedeniyle ortaya çıkmış olup Mac OS 10.6.x ve NDK ile uyumlu olmayan ikili dosyalar oluşturulmasına neden olmuştur.dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
- Clang++ bağımsız derleme komut dosyasından
-x c++
seçenekleri kaldırıldı. (39089 numaralı sorun) - Cygwin'de
NDK_TOOLCHAIN_VERSION=clang3.1
seçeneğini kullanmayla ilgili sorunlar düzeltildi. (39585 numaralı sorun) - Cygwin veya MinGW ortamları kullanılarak bağımsız bir araç zinciri oluşturulmasına olanak tanımak için
make-standalone-toolchain.sh
komut dosyası düzeltildi. Elde edilen araç zinciri, Cygwin, MingGW veya CMD.exe ortamlarında kullanılabilir. (39915 numaralı sorun, 39585 numaralı sorun) - ARM ve X86 için android-14 derlemelerinde eksik olan
SL_IID_ANDROIDBUFFERQUEUESOURCE
seçeneği eklendi. (40625 numaralı sorun) ANDROID_CPU_X86_FEATURE_MOVBE
özelliği için x86 CPU algılama sorunu düzeltildi. (39317 numaralı sorun)- Standart Şablon Kitaplığı'nın (STL)
.cpp
dosya uzantısı olmayan C++ kaynaklarını kullanmasını engelleyen sorun düzeltildi. - GCC 4.6 ARM dahili derleyici hatası at reload1.c:1061 düzeltildi. (20862 numaralı sorun)
- GCC 4.4.3 ARM'deki emit-rtl.c:1954 konumunda bulunan dahili derleyici hatası düzeltildi. (22336 numaralı sorun)
- GCC 4.4.3 ARM dahili derleyici hatası at postreload.c:396 düzeltildi. (22345 numaralı sorun)
- GCC 4.6/4.7'nin lambda işlevlerini atlamasıyla ilgili sorun düzeltildi. (35933 numaralı sorun)
- Diğer hata düzeltmeleri:
-
- NDK üstbilgi dosyası düzeltmeleri:
__WINT_TYPE__
vewint_t
aynı türde olacak şekilde düzeltildi.android/bitmap.h
yazım hatası düzeltildi. (15134 numaralı sorun)errno.h
yazım hatası düzeltildi.sys/cdefs.h
konumunda__STDC_VERSION__
olup olmadığı kontrolü eklendi. (14627 numaralı sorun)byteswap.h
vedirent.h
'deki başlıklar yeniden düzenlendi.limits.h
,PAGE_SIZE
ayarlarını sağlayanpage.h
'ı içerecek şekilde düzeltildi. (39983 numaralı sorun)glGetAttribLocation()
veglGetUniformLocation()
işlevlerininint
olan dönüş türüGLint
olarak düzeltildi.- x86 derlemeleri için
__BYTE_ORDER
sabiti düzeltildi. (39824 numaralı sorun)
- ARM derlemeleri için
ndk-build
komut dosyasının-Os
değerini-O2
ile üzerine yazmaması düzeltildi. HOST_AWK
,HOST_SED
veHOST_MAKE
ayarlarının üzerine yazılmasına izin vermek için derleme komut dosyaları düzeltildi.- Intel C/C++ derleyicisi (ICC) tarafından oluşturulan nesneleri bağlayan
fsck_msdos
derlemelerindeld.gold
ile ilgili sorun düzeltildi. - Spesifikasyonlara uygun olması için Clang'de sabit ARM EHABI desteği.
solib
etkinlikleri sırasında hedef bağlantı haritasında gezinmeye harcanan süreyi kısaltmak için GNU Debugger (GDB) düzeltildi. (38402 numaralı sorun)- Paylaşılan kitaplıklar bağlanırken eksik olan
libgcc.a
dosyası düzeltildi.
- NDK üstbilgi dosyası düzeltmeleri:
- Diğer değişiklikler:
-
- ARM için 64 bit yerleşik atomik işlevler, GCC 4.6'ya geri taşındı.
- Ses çıkışı gecikmesiyle ilgili belgeler ve diğer belgeler ile düzeltmeler eklendi.
- Clang ile hata ayıklama derlemeleri düzeltildi. Böylece, void olmayan işlevler artık dönüş ifadesi içermeyen yollar için
SIGILL
sinyali veriyor. make-standalone-toolchain.sh
,-clang3.1
sonekini kabul edecek şekilde güncellendi. Bu, GCC 4.6 araç zincirine--llvm-version=3.1
eklemeye eşdeğerdir.- GCC ve Clang hata raporu URL'si şu şekilde güncellendi: https://source.android.com/source/report-bug s.html
llvm-objdump
'ya ARM ELF desteği eklendi.- Clang derlemeleri için c girişini c++ olarak ele alma uyarısı devre dışı bırakıldı.
- Yalnızca
libiberty.a
32 bit sürümünün oluşturuluplib32/
içine yerleştirilmesi için yapı güncellendi.
Android NDK r8c (Kasım 2012)
- Önemli değişiklikler:
-
- Clang 3.1 derleyicisi NDK'ya eklendi. GNU Compiler Collection (GCC) 4.6 hâlâ varsayılan derleyicidir. Bu nedenle, Clang derleyici seçeneğini aşağıdaki gibi açıkça etkinleştirmeniz gerekir:
ndk-build
içinNDK_TOOLCHAIN_VERSION=clang3.1
veyaApplication.mk
'e bu ortam değişkeni ayarını ekleyin.- Bağımsız derlemeler için
--llvm-version=3.1
öğesinimake-standalone-toolchain.sh
öğesine ekleyin ve makefile'ınızdakiCC
ileCXX
öğelerini<tool-path>/bin/clang
ve<tool-path>/bin/clang++
ile değiştirin. Ayrıntılar içinSTANDALONE-TOOLCHAIN.html
sayfasına bakın.
Not: Bu özellik deneyseldir. Lütfen deneyin ve sorunları bildirin.
- Windows araç zinciri için Gold bağlayıcı
ld.gold
eklendi. Gold bağlayıcı, tüm ana makinelerde ARM ve X86 için de varsayılandır.ld.bfd
Bağlantı oluşturma işlemini yapan g++/clang++ komut satırına-fuse-ld=bfd
ileterek veyaAndroid.mk
'yeLOCAL_LDFLAGS += -fuse-ld=bfd
ekleyerek bağlantı oluşturucuyu kullanmak için bu değeri geçersiz kılabilirsiniz. - Teşhis edilmesi zor derleme hatalarını önlemek için
ndk-build[.cmd]
vendk-gdb
komut dosyalarındaki NDK yolunda boşluk olup olmadığına dair kontroller eklendi. - API seviyesi işleme ile ilgili aşağıdaki değişiklikler yapıldı:
APP_PLATFORM
,project.properties
veyadefault.properties
içindeandroid-10
ileandroid-13
arasında değişen bir aralık belirten projelerinandroid-14
yerineandroid-9
'a karşı bağlantı oluşturması için derleme mantığı değiştirildi.- android-16 (Jelly Bean) veya sonraki sürümleri kullanan yürütülebilir dosyaların, konumdan bağımsız yürütülebilir dosyalar (PIE) için
-fPIE
seçeneğiyle derlenmesi amacıyla derleme güncellendi. Yeni birAPP_PIE
seçeneği, bu davranışı kontrol etmenizi sağlar. Ayrıntılar içinAPPLICATION-MK.html
sayfasına bakın.Not: 14'ün üzerindeki tüm API düzeyleri hâlâ
platforms/android-14
ile bağlantı oluşturur ve yeniplatforms/android-N
eklenmemiştir. - Ayarlanan API düzeyi, projenin
AndroidManifest.xml
bölümündekiandroid:minSdkVersion
değerinden büyükse uyarı verilmesi içinndk-build
değiştirildi.
cpu-features
yardımcı kitaplığı, ARM'ye özgü daha fazla özellik içerecek şekilde güncellendi. Ayrıntılar içinsources/android/cpufeatures/cpu-features.h
sayfasına bakın.- X86 platformunda uzun çift değerini 8 bayt olarak değiştirdi. Bu veri türü artık çift duyarlıklı sayı ile aynı boyutta ancak yine de ayrı bir tür olarak değerlendiriliyor.
APP_ABI=armeabi-v7a
için güncellenen derleme:- Bu derleme türü,
-march=armv7-a
parametresini bağlayıcıya iletecek şekilde değiştirildi. Bu değişiklik, v7'ye özgü kitaplıkların vecrt*.o
öğesinin doğru şekilde bağlanmasını sağlar. - Önceki sürümlerde kullanılan
-mfpu=vfp
seçeneği yerine-mfpu=vfpv3-d16
,ndk-build
'ye eklendi.
- Bu derleme türü,
- Clang 3.1 derleyicisi NDK'ya eklendi. GNU Compiler Collection (GCC) 4.6 hâlâ varsayılan derleyicidir. Bu nedenle, Clang derleyici seçeneğini aşağıdaki gibi açıkça etkinleştirmeniz gerekir:
- Önemli hata düzeltmeleri:
-
make-standalone-toolchain.sh
'nın kök ayrıcalıklarıyla çalıştırılması nedeniyle bağımsız araç zincirinin bazı kullanıcılar tarafından erişilememesine neden olan sorun düzeltildi. (35279 numaralı sorun)- NDK yayın paketindeki tüm dosyalar ve yürütülebilir dosyalar, herkes için okuma ve yürütme izinlerine sahip olacak şekilde ayarlanır.
libstdc++.a
öğesinin sahipliği/grubu artık kopyalandığında korunuyor.
- Windows'da önceden oluşturulmuş
echo.exe
'ten gereksiz\r
kaldırıldı. Yedekli\r
, yolun yanlışlıkla bir parçası haline geldiği içingdb.setup
'nin GNU hata ayıklayıcısında (GDB) başarısız olmasına neden oldu. (36054 numaralı sorun) host-mkdir
uygulamasındaki zamanlama sorunları nedeniyle bazen başarısız olan Windows paralel derlemeleri düzeltildi. (25875 numaralı sorun)- GCC 4.4.3 GNU'nun,
libstdc++
typeinfo
adlarını varsayılan olarak birleştirmemesi sağlandı. Daha fazla bilgi içintoolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo
sayfasına bakın. (22165 numaralı sorun) - GCC 4.6'daki
null
bağlamındacp/mangle.c::write_unscoped_name
sorunu düzeltildi. Bu sorunda, bağlamnull
olduğunda veTREE_CODE
içinde referans kaldırıldığında GCC kilitlenebiliyordu. - GCC 4.4.3'ün, ARM NEON'a özgü kayan nokta türü tanımlarında kilitlenmesi sorunu düzeltildi. (34613 numaralı sorun)
- Referansı kaldırılmış değeri tutan eski bir yığın konumunun döndürülüp çalışma zamanı çökmelerine neden olduğu
STLport
dahili_IteWrapper::operator*()
uygulama düzeltildi. (38630 numaralı sorun) - ARM'ye özgü düzeltmeler:
- ARM GCC 4.4.3/4.6
g++
, mangling of <va_list> was changed in GCC 4.4 uyarısını vermeyecek şekilde düzeltildi. Bu uyarıyı önlemek için-Wno-psabi
anahtarını kullanan geçici çözüm artık gerekli değildir. LOCAL_SRC_FILES
içinde.arm
veya.neon
sonekleri olan bir projeAPP_STL
de kullandığında ortaya çıkan sorun düzeltildi.APP_STL
ilendk-build
komut dosyası, derlemeye STLheader/lib
yollarını eklemeden önceLOCAL_SRC_FILES
içinde C++ dosyalarını arar. Aramadan öncendk-build
,.arm
ve.neon
soneklerini filtrelemek içinndk-build
değiştirildi. Aksi takdirde,LOCAL_SRC_FILES
içindekimyfile.cpp.arm.neon
gibi öğeler C++ kodu olarak derlenmez.- GNU Binutils'te assertion fail hata mesajlarına neden olan,
binutils-2.21/ld.bfd
içermeyen eski binutils'ten nesne bağlama özelliğini destekleyecek şekilde düzeltildi.tag_FP_arch
(35209 numaralı sorun) binutils-2.19/ld
, önceden oluşturulmuş nesneyi daha yeni birbinutils-2.21
ile bağladığında Bilinmeyen EABI nesne özelliği 44 uyarısı kaldırıldı.stdc++
derlemesinde hem-mthumb
hem de-march=armv7-a
ile ilgili bir sorun düzeltildi. Bu amaçla,make-standalone-toolchain.sh
değiştirilerekarmv7-a/thumb
alt dizinindeheaders/libs
dolduruldu. (35616 numaralı sorun)- Çözülemeyen R_ARM_THM_CALL yeniden konumlandırma hatası düzeltildi. (35342 numaralı sorun)
- ARM arka ucunun
char
'den işaret genişletme işlemi yaparken yanlış işlenen türünü beklemesinden kaynaklananreload1.c:3633
konumundaki dahili derleyici hatası düzeltildi. (GCC Sorunu 50099) - Negatif kaydırma miktarıyla ilgili dahili derleyici hatası düzeltildi. (GCC Sorunu)
- ARM GCC 4.4.3/4.6
- X86 için
-fstack-protector
düzeltildi. Bu,ndk-build
x86 ABI hedefi için de varsayılandır. - MIPS'e özgü düzeltmeler:
- MIPS
libstlport_*
derlenirken_STLP_LITTLE_ENDIAN
1 olarak ayarlanarakSTLport
endian-ness düzeltildi. - LLVM derlenirken yaşanan GCC
__builtin_unreachable
sorunu düzeltildi. (GCC Sorunu 54369) cc1
derleme sürecinin% 100 CPU tüketmesiyle ilgili düzeltme geriye taşındı. (GCC Sorunu 50380)
- MIPS
- GNU Debugger'a özgü düzeltmeler:
- Derleme sırasında gdb-7.x'te Python desteğini devre dışı bırakın. Aksi takdirde, gdb-7.x yapılandırma işlevi, ana makinede bulunan Python sürümünü alıp belirli bir Python sürümüne bağlı olarak derleme yapabilir.
gdb
(36120 numaralı sorun) APP_ABI
,all
içerdiğinde ve bilinen mimarilerin hiçbiriyle eşleşmediğindendk-gdb
düzeltildi. (35392 numaralı sorun)- Sürücü harfiyle başlayan bir Windows yolunun parçası olabileceği anlaşılan
:
karakteri korunarak Windows yol adı desteği düzeltildi. (GDB Issue 12843) gdbserver
'da ARM için donanım ayrılma noktası desteği ekleme sorunu düzeltildi. (GDB Sorunu)- Bağlayıcı tutarlı olduğunda yalnızca mevcut
solibs
değerinin okunması için düzeltme eklendi. Bu değişiklik,solib
etkinlik işleme hızını artırır. (37677 numaralı sorun) solib
kesme noktalarını bulmak için tekrarlanan denemeler yapma düzeltmesi eklendi. GDB artıksvr4_current_sos()
'ye yapılan her çağrı sırasındaenable_break()
'yı başarılı olana kadar yeniden dener. (Değişiklik 43563)gdb
öğesinin,dlopen-ed
kitaplıklarına yerleştirilen kesme noktalarında durmamasına neden olan sorun düzeltildi. (34856 numaralı sorun)SIGILL
,dlopen()
çağrılırken dinamik bağlayıcıda düzeltildi./system/bin/linker
sembollerden arındırılmış vertld_db_dlactivity()
,sym_addr
'ninLSB
korunmadığı içinThumb
olarak uygulanmış sistemde. (37147 numaralı sorun)
- Derleme sırasında gdb-7.x'te Python desteğini devre dışı bırakın. Aksi takdirde, gdb-7.x yapılandırma işlevi, ana makinede bulunan Python sürümünü alıp belirli bir Python sürümüne bağlı olarak derleme yapabilir.
- Diğer hata düzeltmeleri:
-
- Sabit NDK üstbilgileri:
- Orijinal çekirdekten yanlışlıkla kaldırılan
arch-mips/include/asm/*
kodu düzeltildi. (Değiştir 43335) linux/sysctl.h
velinux/icmp.h
içinde__unused
yapı üyesi verileri,sys/cdefs.h
içindeki#define __unused
ile çakışmayı önlemek için__linux_unused
ile değiştirildi.__BEGIN_DECLS
ve__END_DECLS
ile kapalı C işlevleri içinfenv.h
düzeltildi.malloc.h
'da uygulanmayan işlevler kaldırıldı.- ANSI derleyicileri için
uint64_t
öğesininstdint.h
tanımı düzeltildi. (1952 sayısı) <arch>/include/machine/*
'daki sabit önişlemci makroları.- MIPS için
link.h
, tüm platformları destekleyen yeni sürümle değiştirildi. linux-unistd.h
kaldırıldı- GLibc'ye özgü
LONG_LONG_MIN
,LONG_LONG_MAX
veULONG_LONG_MAX
makrolarını<pthread.h>
konumundan<limits.h>
konumuna taşıyın.
- Orijinal çekirdekten yanlışlıkla kaldırılan
ndk-stack-parser
uygulamasındaki arabellek taşması düzeltildi._STLP_USE_EXCEPTIONS
tanımlanmadığında tüm bildirimlerin ve__Named_exception
kullanımlarının atlanması düzeltildi.__Named_exception
ayarlarının derlenmesi ve kullanılması yalnızcaSTLport
'ın istisnaları kullanmasına izin verildiğinde gerçekleşir.- Yalnızca Linux'a yönelik NDK paketlerinin Windows kodu oluşturmadan derlenmesi düzeltildi. Bu tür bir derleme gerçekleştirmek için aşağıdaki ayarları kullanın:
./build/tools/make-release.sh --force --systems=linux-x86
libc.so
düzeltildi. Artıkatexit()
ve__do_handler
dışa aktarılmıyor. Bu semboller, eski yerel kitaplıkları desteklemek için C kitaplığının sistem sürümü tarafından ARM derlemeleri için dışa aktarılır. NDK tarafından oluşturulanlar hiçbir zaman doğrudan bunlara referans vermemelidir. Bunun yerine, her paylaşılan kitaplık veya yürütülebilir dosya,crtbegin_*.o
tarafından sağlanan bu sembollerin kendi sürümünü yerleştirmelidir.Projeniz
-nostdlib -Wl,--no-undefined
seçenekleriyle bağlantılıysa bu durumdacrtbegin_so.o
bağlantılı olmadığından kendi__dso_handle
öğenizi sağlamanız gerekir. Aşağıdaki örnek kodda gösterildiği gibi__dso_handle
öğesinin içeriği önemli değildir:extern "C" { extern void *__dso_handle __attribute__((__visibility__ ("hidden"))); void *__dso_handle; }
objdump
için kullanılan ARM'ye yönelik sabit sembol kod çözücü,plt
girişlerinde daha okunabilir bir formfunction@plt
oluşturmak için kullanılır.- GCC 4.6'da kullanıma sunulan aşağıdaki semboller
libgcc.a
, X86 platformulibc.so
kitaplığından kaldırıldı:__aeabi_idiv0
,__aeabi_ldiv0
,__aeabi_unwind_cpp_pr1
ve__aeabi_unwind_cpp_pr2
. - MIPS'de kullanılmayan
.ctors
,.dtors
ve.eh_frame
kaldırıldıcrt*_so.S
. ndk-gdb
,ndk-build
DUMP_XXXX
için yalnızca çıkışın son satırını alacak şekilde güncellendi. Bu değişiklik,Application.mk
veyaAndroid.mk
,$(info ...)
söz dizimiyle bir şey yazdırdığında bununDUMP_XXXX
sonucuna yerleştirilmemesini sağlar. (Daha fazla bilgi)
- Sabit NDK üstbilgileri:
- Diğer değişiklikler:
-
platforms/android-[3,4,5,8]
listesindenarch-x86
vearch-mips
üstbilgileri kaldırıldı. X86 ve MIPS ABI'leri yalnızca API 9 veya sonraki sürümlerde desteklendiğinden bu başlıklar eksikti.- Bağımsız paketlerde basitleştirilmiş C++ include yolu (aşağıda gösterildiği gibi).
(35279 numaralı sorun)
<path>/arm-linux-androideabi/include/c++/4.6.x-google to: <path>/include/c++/4.6/
ndk-build
'nın varsayılan olarak daha fazla C++ dosya uzantısını tanıması için düzeltme yapıldı:.cc .cp .cxx .cpp .CPP .c++ .C
. Bu uzantı ayarlarının üzerine yazmak içinLOCAL_CPP_EXTENSION
'ı kullanmaya devam edebilirsiniz.samples/san-angeles
'da yeniden başlatma sırasında siyah ekran veya donma kareye neden olan sorun düzeltildi.- NDK örneklerinde desteği sonlandırılan API'ler değiştirildi.
(20017 numaralı sorun)
hello-gl2
android-5'ten android-7'yenative-activity
android-9'dan android-10'anative-audio
android-9'dan android-10'anative-plasma
android-9'dan android-10'a
.note.android.ident
bölümünde (crtbegin_static/dynamic.o
içinde tanımlanmıştır) daha basit bir şemayla Android yürütülebilir dosyaları için yeni markalama eklendi. Böylece hata ayıklama araçları buna göre hareket edebilir. Yapı üyesi ve değerleri aşağıdaki şekilde tanımlanır: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 */ }
.note.ABI-tag
bölümündeki önceki markalama seçeneklerinin desteği sonlandırıldı.- Çeşitli koşullarla
run-tests.sh
vestandalone/run.sh
işlevlerini çağıran yeni bir komut dosyasırun-tests-all.sh
eklendi. Komut dosyasırun-tests.sh
seçeneği olmadan çalışır ve desteklenen tüm ABI'ler için testlerin çoğunu derlemek ve bağlı tüm cihazlarda çalıştırmak üzere geliştirilmiştir.--abi
Android NDK r8b (Temmuz 2012)
Bu sürümün temel özellikleri arasında yeni bir GNU Compiler Collection (GCC) 4.6 araç zinciri ve Android 4.1 (API düzeyi 16) sistem görüntüsü için hata ayıklama desteği ekleyen GNU Debugger (GDB) 7.3.x yer alır.
- Önemli hata düzeltmeleri:
-
- Mac OS ve Windows Cygwin ortamlarında statik kitaplıklarla ilgili
LOCAL_SHORT_COMMANDS
sorunları düzeltildi. Liste dosyası oluşturma işlemi daha hızlıdır ve tekrarlanan proje yeniden derlemelerini önlemek için yeniden oluşturulmaz. ndk-gdb
ile ilgili çeşitli sorunlar düzeltildi:-e
,-d
ve-s
işaretlerini adb'ye daha tutarlı bir şekilde iletmek için araç güncellendi.- Boşluk içeren cihaz seri adlarını kabul edecek şekilde araç güncellendi.
/system/bin/link
bilgilerini almak için güncellenmiş araç.Böylece ana makinedekigdb
,__dl_rtld_db_dlactivity
içinde kesme noktası ayarlayabilir ve bağlayıcı etkinliğinden (ör.dlopen()
çağrıldığındasolib
sembollerini yeniden tarama) haberdar olabilir.
- Windows'da
ndk-build clean
'nın./libs/*/lib*.so
'ı kaldıramaması sorunu düzeltildi. ndk-build.cmd
işlevininmake
başarısız olduğunda sıfır olmayan birERRORLEVEL
döndürmesi düzeltildi.libc.so
ve__exidx_end
sembollerinin yanlış şekilde dışa aktarılmasını önlemek içinlibc.so
düzeltildi.__exidx_start
- ARM ve MIPS için yığını
__libc_init
'nin ötesine sardığınızdaSEGV
düzeltildi.
- Mac OS ve Windows Cygwin ortamlarında statik kitaplıklarla ilgili
- Önemli değişiklikler:
-
- GCC 4.6 araç zinciri (
binutils
2.21,gold
ve GDB 7.3.x) orijinal GCC 4.4.3 araç zinciri (binutils
2.19 ve GDB 6.6) ile birlikte kullanılmak üzere eklendi.- GCC 4.6 artık varsayılan araç zinciridir. Orijinalini seçmek için
Application.mk
bölümündeNDK_TOOLCHAIN_VERSION=4.4.3
simgesini ayarlayabilirsiniz. gold
bağlayıcı desteği yalnızca Linux ve Mac OS ana makinelerinde ARM ve x86 mimarileri için kullanılabilir. Bu destek varsayılan olarak devre dışıdır. Etkinleştirmek içinLOCAL_LDLIBS += -fuse-ld=gold
öğesiniAndroid.mk
içine ekleyin.-fPIE
ile derlenen programların hata ayıklama içinGDB
kullanması gerekir. Bu, Android 4.1 (API düzeyi 16) sistem görüntülerindeki ikili dosyalar için de geçerlidir.binutils
2.21ld
aracı, 2.22 sürümünden geri taşınan düzeltmeleri içerir:- Harici kitaplıklara yönelik zombi referanslarını yanlışlıkla koruyan
ld --gc-sections
düzeltildi. (daha fazla bilgi). - Geçerli olmaları durumunda
GNU_RELRO
bölümündeki orijinalp_align
vep_flags
değerlerini korumak için ARMstrip
komutu düzeltildi. Bu düzeltme olmadan,-fPIE
ile oluşturulan programlarda hata ayıklama yapılamıyordu. (daha fazla bilgi)
- Harici kitaplıklara yönelik zombi referanslarını yanlışlıkla koruyan
- Eski platformlarla uyumluluk için
sincos()
optimizasyonu devre dışı bırakıldı.
- GCC 4.6 artık varsayılan araç zinciridir. Orijinalini seçmek için
- Never eXecute (NX) bitini ve
relro
/bind_now
korumalarını varsayılan olarak etkinleştirmek için derleme seçenekleri güncellendi:- Yığın ve yığında NX bitini etkinleştirerek arabellek taşması saldırılarına karşı NX koruması sağlayan
--noexecstack
derleyiciye ve-z noexecstack
bağlayıcıya eklendi. - Bağlantı oluşturucuya
-z relro
ve-z now
eklenerek bağlantı oluşturulduktan sonra dahili veri bölümlerinin güvenliği artırıldı. Böylece, bellek bozulmasından kaynaklanan güvenlik açıklarına karşı koruma sağlandı. (Daha fazla bilgi: 1, 2) - Bu özellikler aşağıdaki seçenekler kullanılarak devre dışı bırakılabilir:
- Derleyici için
--execstack
, bağlayıcı için-z execstack
seçeneğini ayarlayarak NX korumasını devre dışı bırakın. - Bağlayıcı için
-z norelro
ve-z lazy
seçeneklerini ayarlayarak dahili verilerin güvenliğini artırma özelliğini devre dışı bırakın. - Aşağıdaki seçenekleri ayarlayarak NDK
jni/Android.mk
'da bu korumaları devre dışı bırakın:LOCAL_DISABLE_NO_EXECUTE=true # disable "--noexecstack" and "-z noexecstack" DISABLE_RELRO=true # disable "-z relro" and "-z now"
Daha fazla ayrıntı için
docs/ANDROID-MK.html
sayfasına bakın. - Derleyici için
- Yığın ve yığında NX bitini etkinleştirerek arabellek taşması saldırılarına karşı NX koruması sağlayan
- Hata ayıklama araçlarının buna göre hareket edebilmesi için
.note.ABI-tag
bölümüyle (crtbegin_static/dynamic.o
içinde) Android yürütülebilir dosyaları için markalama eklendi. Yapı üyesi ve değerleri şu şekilde tanımlanır: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 */ }
- GCC 4.6 araç zinciri (
- Diğer hata düzeltmeleri:
-
mips-linux-gnu
Yeniden konumlandırma, sığacak şekilde kesiliyorR_MIPS_TLS_LDM
sorunu düzeltildi. (daha fazla bilgi)--gc-sections
kullanılırkenld
aracının segmentasyon hatası vermesi düzeltildi. (daha fazla bilgi)- MIPS
GOT_PAGE
sayma sorunu düzeltildi. (daha fazla bilgi) mips_elf_count_got_symbols
için takip uyarı simgesi bağlantısı düzeltildi.mips_elf_allocate_lazy_stub
için takip uyarı simgesi bağlantısı düzeltildi.- MIPS
.dynamic
, yazılabilir olması için veri segmentine taşındı. - Semboller için sabit kodlanmış değerler, MIPS için doğru segment boyutlarıyla değiştirildi.
- MIPS araç zincirindeki varsayılanlardan
-mno-shared
seçeneği kaldırıldı. Android araç zinciri için varsayılan değer-fPIC
'dır (veya destekleniyorsa-fpic
).-mshared
,-fpic
,-fPIC
,-fpie
veya-fPIE
'yi açıkça belirtmezseniz MIPS derleyicisi, PIC'yi devre dışı bırakan-mno-shared
'yi ekler. Derleyicinin bu durumda-mno-shared
eklememesi düzeltildi. hello-jni
vetwo-libs
örneklerindeki yanlış paket adları düzeltildi. Böylece, altındakitests
projesi derlenebilecek.
- Diğer değişiklikler:
-
- İkili dosyaların değiştirilen konumları:
gdbserver
,toolchain/<arch-os-ver>/prebuilt/gdbserver
konumundanprebuilt/android-<arch>/gdbserver/gdbserver
konumuna taşındı.- x86 araç zinciri ön eki
i686-android-linux-
olarak yeniden adlandırıldı.i686-linux-android-
- GCC 4.6 ile derlendiğinde
sources/cxx-stl/gnu-libstdc++/include
velib
,sources/cxx-stl/gnu-libstdc++/4.6
'ye, GCC 4.4.3 ile derlendiğinde isesources/cxx-stl/gnu-libstdc++/4.4.3
'e taşındı. libbfd.a
velibintl.a
,lib/
konumundanlib32/
konumuna taşındı.
- NDK araç zincirini yeniden oluşturma ve test etme aracına çeşitli komut dosyaları eklendi ve iyileştirildi:
- Win32 ve Win64 yürütülebilir dosyaları oluşturan yeni bir Linux tabanlı araç zinciri oluşturmak için
build-mingw64-toolchain.sh
eklendi. download-toolchain-sources.sh
komutunu kullanarak ve yalnızca NDK araç zinciri ikililerini oluşturmak için gereken dizinlerdecheckout
komutunu kullanarakclone
hızını artırın.build-host-gcc.sh
vebuild-host-gdb.sh
komut dosyaları eklendi.- Belirli bir NDK yükleme dizininin veya mevcut bir NDK paketinin içeriğini kontrol etmek için
tests/check-release.sh
seçeneği eklendi. tests/standalone/run.sh
Bağımsız testlertests/standalone/run.sh
yeniden yazıldı .
- Win32 ve Win64 yürütülebilir dosyaları oluşturan yeni bir Linux tabanlı araç zinciri oluşturmak için
if_dl.h
üstbilgisi tüm platformlardan ve mimarilerden kaldırıldı. AçıkladığıAF_LINK
vesockaddr_dl
öğeleri BSD'ye özgüdür (ör. Linux'ta yoktur).
- İkili dosyaların değiştirilen konumları:
Android NDK r8 (Mayıs 2012)
NDK'nın bu sürümünde MIPS ABI desteği ve birkaç ek düzeltme yer almaktadır.
- Yeni özellikler:
-
- MIPS ABI desteği eklendi. Bu sayede, uyumlu MIPS tabanlı Android cihazlarda çalışan makine kodu oluşturabilirsiniz. MIPS'in temel özellikleri arasında MIPS'e özel araç zincirleri, sistem başlıkları, kitaplıklar ve hata ayıklama desteği yer alır. MIPS desteğiyle ilgili daha fazla bilgi için NDK paketindeki
docs/CPU-MIPS.html
bölümüne bakın.Varsayılan olarak ARM tabanlı cihazlar için kod oluşturulur. MIPS platformları için derleme oluşturmak üzere
mips
dosyanızdakiAPP_ABI
tanımınızamips
ekleyebilirsiniz.Application.mk
Örneğin, aşağıdaki satır,ndk-build
kodunuzu üç farklı ABI için oluşturmasını ister:APP_ABI := armeabi armeabi-v7a mips
ARM derleme kodu gibi mimariye özgü derleme kaynaklarını kullanmıyorsanız MIPS makine kodu oluşturmak için
Android.mk
dosyalarınıza dokunmanız gerekmez. make-standalone-toolchain.sh
işlevini çağırırken--arch=mips
seçeneğini kullanarak bağımsız bir MIPS araç zinciri oluşturabilirsiniz. Daha fazla bilgi içindocs/STANDALONE-TOOLCHAIN.html
sayfasına bakın.
Not: Google Play, uygulamalarınızın yalnızca cihazları bunları çalıştırmaya uygunsa kullanıcılara sunulmasını sağlamak için uygulamaları, uygulamanıza dahil edilen talimat seti bilgilerine göre filtreler. Filtrelemeyi etkinleştirmek için herhangi bir işlem yapmanız gerekmez. Ayrıca, Android sisteminin kendisi de uygulamanızı yükleme sırasında kontrol eder ve yalnızca uygulama, cihazın CPU mimarisi için derlenmiş bir kitaplık sağlarsa yüklemenin devam etmesine izin verir.
- MIPS ABI desteği eklendi. Bu sayede, uyumlu MIPS tabanlı Android cihazlarda çalışan makine kodu oluşturabilirsiniz. MIPS'in temel özellikleri arasında MIPS'e özel araç zincirleri, sistem başlıkları, kitaplıklar ve hata ayıklama desteği yer alır. MIPS desteğiyle ilgili daha fazla bilgi için NDK paketindeki
- Önemli hata düzeltmeleri:
-
- GAbi++ uygulamasında, temel sınıf nesnesi
b
'nin türetilmiş sınıfD
'adynamic_cast<D>(b)
sonucunun temel sınıfa göre ters yönde yanlış ayarlanmasına neden olan yazım hatası düzeltildi. (28721 numaralı sorun) make-standalone-toolchain.sh
öğesininlibsupc++.*
öğesini kopyalamamasına neden olan sorun düzeltildi.
- GAbi++ uygulamasında, temel sınıf nesnesi
- Diğer hata düzeltmeleri:
-
ndk-build.cmd
, kullanıcınınSHELL
ortam değişkenini yeniden tanımlamış olması durumunda bile doğru şekilde çalışacak şekilde düzeltildi. Bu değişken, Windows ortamlarına çeşitli geliştirme araçları yüklenirken değiştirilebilir.ndk-build.cmd
Android NDK r7c (Nisan 2012)
NDK'nın bu sürümünde Tegra2 tabanlı cihazlar için önemli bir düzeltme ve birkaç ek düzeltme ile iyileştirme yer almaktadır:
- Önemli hata düzeltmeleri:
-
- GNU STL armeabi-v7a ikili dosyalarının NEON olmayan cihazlarda kilitlenmemesi için düzeltildi. NDK r7b ile sağlanan dosyalar düzgün şekilde yapılandırılmadığından belirli kayan nokta işlevleri (ör.
cosf
,sinf
,expf
).
- GNU STL armeabi-v7a ikili dosyalarının NEON olmayan cihazlarda kilitlenmemesi için düzeltildi. NDK r7b ile sağlanan dosyalar düzgün şekilde yapılandırılmadığından belirli kayan nokta işlevleri (ör.
- Önemli değişiklikler:
-
NDK_OUT
ortam değişkeni aracılığıyla özel çıkış dizinleri için destek eklendi. Tanımlandığında bu değişken,$PROJECT_PATH/obj
yerine oluşturulan tüm ara dosyaları depolamak için kullanılır. Değişken,ndk-gdb
tarafından da tanınır.LOCAL_SHORT_COMMANDS
değerinitrue
olarak tanımlayarakAndroid.mk
dosyanızda yüzlerce hatta binlerce kaynak dosyası içeren modüller oluşturma desteği eklendi.Bu değişiklik, komut satırı uzunluğu sınırlamalarına geçici çözüm olarak NDK derleme sistemini çoğu bağlayıcı veya arşivleyici seçeneğini liste dosyalarına yerleştirmeye zorlar. Ayrıntılar için
docs/ANDROID-MK.html
sayfasına bakın.
- Diğer hata düzeltmeleri:
-
cpufeatures
yardımcı kitaplığındaandroid_getCpuCount()
uygulaması düzeltildi. Çekirdeklerin sistem tarafından dinamik olarak etkinleştirildiği belirli cihazlarda, önceki uygulama, işlev ilk kez çağrıldığında fiziksel olarak kullanılabilen çekirdeklerin toplam sayısı yerine etkin çekirdeklerin toplam sayısını bildiriyordu.
Android NDK r7b (Şubat 2012)
NDK'nın bu sürümünde, yerel Windows derlemeleri, Cygwin ve diğer birçok iyileştirme ile ilgili düzeltmeler yer almaktadır:
- Önemli hata düzeltmeleri:
-
- Bazı çok çekirdekli ARM tabanlı cihazlarda doğruluk sorunlarının önlenmesi için
sys/atomics.h
güncellendi. Değiştirilmemiş kaynaklarınızı NDK'nın bu sürümüyle yeniden oluşturduğunuzda bu sorun tamamen ortadan kalkar. Daha fazla bilgi içindocs/ANDROID-ATOMICS.html
başlıklı makaleyi inceleyin. - NDK r7'de (
binutils
2.20.1'e geçiş yapıldı) ortaya çıkan hata ayıklama sorunlarını düzeltmek içinbinutils
2.19'a geri dönüldü. - 32 bit Linux'ta
ndk-build
düzeltildi. Bir paketleme hatası nedeniyle NDK r7'deawk
yürütülebilir dosyasının 64 bit sürümüprebuilt/linux-x86/bin
altında yer alıyordu. - Yerel Windows derlemesi (
ndk-build.cmd
) düzeltildi. Diğer derleme modları etkilenmedi. Düzeltmeler şunlardır:- Proje yolunuzun en üstünde olmayan bir dizinden (ör. alt dizinlerinden herhangi birinde)
ndk-build.cmd
çağrılmaya çalışıldığında oluşan sonsuz döngü / yığın taşması hatası kaldırıldı. - Otomatik olarak oluşturulan bağımlılık dosyalarının yoksayılmasına neden olan sorun düzeltildi. Bu nedenle, bir üstbilginin güncellenmesi, onu içeren kaynakların yeniden derlenmesini tetiklemiyordu.
- Boşluk ve tırnak işaretleri dışında dosyalarda veya yollarda bulunan özel karakterlerin doğru şekilde işlenmemesi sorunu düzeltildi.
- Proje yolunuzun en üstünde olmayan bir dizinden (ör. alt dizinlerinden herhangi birinde)
-lstdc++
kullanırken uygun ikili dosyaları oluşturmak için bağımsız araç zinciri düzeltildi (ör. GNUlibstdc++
C++ çalışma zamanına karşı bağlantı oluşturma). Paylaşılan kitaplık sürümüne bağlamak istiyorsanız-lgnustl_shared
, statik sürüm için ise-lstdc++
kullanmalısınız.Bu düzeltme hakkında daha fazla bilgi için
docs/STANDALONE-TOOLCHAIN.html
sayfasına bakın.- Cygwin'de
gnustl_shared
düzeltildi. Bağlayıcı, dosya doğru konumda olmasına rağmenlibsupc++.a
bulunamadığı konusunda hata veriyordu. APP_STL
aracılığıyla belirli bir C++ çalışma zamanı kullanılmadığında Cygwin C++ bağlantısı düzeltildi.
- Bazı çok çekirdekli ARM tabanlı cihazlarda doğruluk sorunlarının önlenmesi için
- Diğer değişiklikler:
-
- Uygulamanız GNU
libstdc++
çalışma zamanını kullandığında derleyici artık istisnaları ve RTTI'yı zorunlu olarak etkinleştirmeyecek. Bu değişiklik, daha küçük kodlar oluşturulmasına neden olur.Bu özelliklere ihtiyacınız varsa aşağıdakilerden birini yapmanız gerekir:
- Modüllerinizde istisnaları ve/veya RTTI'yı açıkça etkinleştirin veya
Application.mk
. (önerilen) Application.mk
içindeAPP_GNUSTL_FORCE_CPP_FEATURES
değerini'exceptions'
,'rtti'
veya her ikisi olarak tanımlayın. Daha fazla bilgi içindocs/APPLICATION-MK.html
sayfasına bakın.
- Modüllerinizde istisnaları ve/veya RTTI'yı açıkça etkinleştirin veya
ndk-gdb
artık uygulamanızda bağımsız işlemlerle çalışan özel hizmetler olduğunda düzgün şekilde çalışıyor.ps
tarafından listelenen ilk işlem yerine (genellikle bir hizmet işlemidir) ana uygulama işleminde hata ayıklama yapar.- NDK r7'nin
LOCAL_ARM_MODE
değerini dikkate almadığı ve belirli kaynak dosyaları (ancak tümünü değil) her zaman 32 bitlik talimatlara derlediği nadir bir hata düzeltildi. STLport
: Kaynakları Android platform sürümüne uyacak şekilde yenileyin. Bu güncellemede birkaç küçük hata düzeltildi:- Eksik bir türün sabit örneği oluşturuldu
- Küçük bir "==" yerine "=" yazma hatası düzeltildi.
string::assign
içindememcpy
yerinememmove
kullanıldıIsNANorINF
,IsINF
,IsNegNAN
vb. öğelerin daha iyi işlenmesi sağlandı.
Tüm ayrıntılar için commit günlüğüne bakın.
STLport
: Kitaplıktan 5 gereksiz statik başlatıcı kaldırıldı.- armeabi-v7a için GNU libstdc++ kitaplıkları yanlışlıkla armeabi için derlenmişti. Bu değişikliğin doğruluk üzerinde herhangi bir etkisi olmadı ancak doğru ABI'nin kullanılması biraz daha iyi performans sağlayabilir.
cpu-features
yardımcı kitaplığı, üç isteğe bağlı x86 CPU özelliğini (SSSE3
,MOVBE
vePOPCNT
) bildirecek şekilde güncellendi. Daha fazla bilgi içindocs/CPU-FEATURES.html
başlıklı makaleyi inceleyin.- Özel
Application.mk
dosyası seçmek içinNDK_APP_APPLICATION_MK
yerineNDK_APPLICATION_MK
'den bahsetmek üzeredocs/NDK-BUILD.html
güncellendi. - Cygwin:
ndk-build
artık çağrıldığında geçerli dizinde boş bir "NUL" dosyası oluşturmuyor. - Cygwin: Daha iyi otomatik bağımlılık algılama özelliği eklendi. Önceki sürümde, aşağıdaki durumlarda düzgün çalışmıyordu:
- Cygwin sürücü öneki
/cygdrive
olmadığında. - Örneğin, Cygwin'in
/home
yerine\\server\subdir
olarak çevirdiği sürücüsüz bağlama birimleri kullanılırken.C:\Some\Dir
- Cygwin sürücü öneki
- Cygwin:
ndk-build
Cygwin'in ve/veya GNU Make'in belirli sürümlerinde$NDK/prebuilt/windows/bin
altındaki yerel Windows araçlarını kullanmaya çalışmaz.
- Uygulamanız GNU
Android NDK r7 (Kasım 2011)
NDK'nın bu sürümünde, Android 4.0 platformunu destekleyen yeni özelliklerin yanı sıra birçok ekleme ve iyileştirme de yer alıyor:
- Yeni özellikler
-
- Android 4.0 (API düzeyi 14) için resmi NDK API'leri eklendi. Bu API'ler, platforma aşağıdaki yerel özellikleri ekler:
- Khronos Group OpenMAX AL 1.0.1 standardına dayalı yerel multimedya API'si eklendi. Yeni
<OMXAL/OpenMAXAL.h>
ve<OMXAL/OpenMAXAL_Android.h>
başlıkları, API düzeyi 14'ü hedefleyen uygulamaların yeni bir Android'e özel arabellek sırası arayüzü kullanarak doğrudan yerel koddan multimedya çıkışı yapmasına olanak tanır. Daha fazla bilgi içindocs/openmaxal/index.html
ve http://www.khronos.org/openmax/ adreslerini ziyaret edin. - Yerel ses API'si, Khronos Group OpenSL ES 1.0.1 standardına göre güncellendi. API düzeyi 14 ile artık sıkıştırılmış sesi (ör. MP3, AAC, Vorbis) PCM'ye çözebilirsiniz. Daha fazla bilgi için
docs/opensles/index.html
ve http://www.khronos.org/opensles/ adresini ziyaret edin.
- Khronos Group OpenMAX AL 1.0.1 standardına dayalı yerel multimedya API'si eklendi. Yeni
- CCache desteği eklendi. Büyük yeniden derlemeleri hızlandırmak için
NDK_CCACHE
ortam değişkeniniccache
(veyaccache
ikilinizin yolu) olarak tanımlayın. NDK derleme sistemi, bildirildiğinde herhangi bir kaynak dosyayı derlerken otomatik olarak CCache'i kullanır. Örneğin:export NDK_CCACHE=ccache
Not: CCache, NDK sürümüne dahil edilmediğinden kullanmadan önce yüklemeniz gerekir. CCache hakkında daha fazla bilgi için http://ccache.samba.org adresine bakın.
APP_ABI
değerininall
olarak ayarlanması için destek eklendi. Bu, NDK modüllerinizi, belirtilen NDK sürümünüz tarafından desteklenen tüm ABI'ler için oluşturmak istediğinizi belirtir. Bu,Application.mk
dosyanızdaki aşağıdaki iki satırdan birinin bu sürümle eşdeğer olduğu anlamına gelir:APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
Bu, komut satırından
APP_ABI
çağırırkenndk-build
tanımlarsanız da çalışır. Bu, projeninApplication.mk file
değerini değiştirmeden projenizin desteklenen tüm ABI'ler için oluşturulduğunu kontrol etmenin hızlı bir yoludur. Örneğin:ndk-build APP_ABI=all
Android.mk
içinde, modülünüzün hangi C++ özelliklerini (RTTI veya istisnalar) kullandığını bildirmenize olanak tanıyan birLOCAL_CPP_FEATURES
değişkeni eklendi. Bu, bu özelliklere bağlı önceden oluşturulmuş modülleriniz varsa son bağlantının doğru şekilde çalışmasını sağlar. Daha fazla bilgi içindocs/ANDROID-MK.html
vedocs/CPLUSPLUS-SUPPORT.html
sayfalarına göz atın.- Derleme komutlarında kullanılan kaynak ve nesne dosyalarının yolları kısaltıldı. Proje yolunuzdan
$NDK/ndk-build
çağrıldığında, derleme komutlarına iletilen kaynak, nesne ve ikili dosyaların yolları artık geçerli dizine göre iletildikleri için önemli ölçüde daha kısadır. Bu, çok sayıda kaynak dosyası içeren projeler oluştururken, ana makine işletim sisteminiz tarafından desteklenen maksimum komut satırı uzunluğuyla ilgili sınırlamaları önlemek için kullanışlıdır. Proje ağacınızın bir alt dizinindenndk-build
komutunu çağırırsanız veyaNDK_PROJECT_PATH
komutunu belirli bir dizine yönlendirecek şekilde tanımlarsanız davranış değişmez.
- Android 4.0 (API düzeyi 14) için resmi NDK API'leri eklendi. Bu API'ler, platforma aşağıdaki yerel özellikleri ekler:
- Deneysel özellikler
-
Artık proje yolunuzdan komut satırından
ndk-build.cmd
komut dosyasını çağırarak Windows'da Cygwin olmadan NDK kaynak dosyalarınızı oluşturabilirsiniz. Komut dosyası, orijinalndk-build
komut dosyasıyla aynı bağımsız değişkenleri kullanır. Windows NDK paketi, GNU Make, Awk ve derleme için gereken diğer araçlar için kendi önceden oluşturulmuş ikili dosyalarıyla birlikte gelir. Çalışan bir derleme sistemi elde etmek için başka bir şey yüklemeniz gerekmez.Önemli:
ndk-gdb
Windows'da çalışmaz. Bu nedenle, hata ayıklama için Cygwin'i kullanmaya devam etmeniz gerekir.Bu özellik henüz deneme aşamasında olduğundan deneyebilir ve sorunları herkese açık hata veritabanında veya herkese açık forumda bildirebilirsiniz. NDK ile birlikte gönderilen tüm örnekler ve birim testleri bu özellik ile başarıyla derlenir.
- Önemli hata düzeltmeleri
-
- İçe aktarılan paylaşılan kitaplıklar,
APP_MODULES
Application.mk
içinde tanımlanmamışsa artık varsayılan olarak hedef yükleme konumuna (libs/<abi>
) yüklenir. Örneğin, üst düzey bir modülfoo
bir modülübar
içe aktarıyorsa hemlibfoo.so
hem delibbar.so
yükleme konumuna kopyalanır. Daha önce,bar
öğesiniAPP_MODULES
içinde de listelemediyseniz yalnızcalibfoo.so
kopyalanıyordu.APP_MODULES
değerini açıkça tanımlarsanız davranış değişmez. ndk-gdb
artık MAIN intent filtrelerinde birden fazla kategori içeren etkinlikler için doğru şekilde çalışıyor.- Statik kitaplık içe aktarmaları artık düzgün şekilde geçişli. Örneğin, üst düzey bir
foo
modülü, statik kitaplıkbar
'yı içe aktarıyorsa ve bu kitaplık da statik kitaplıkzoo
'yı içe aktarıyorsalibfoo.so
artık hemlibbar.a
hem delibzoo.a
ile bağlantılı olacaktır.
- İçe aktarılan paylaşılan kitaplıklar,
- Diğer değişiklikler
-
docs/NATIVE-ACTIVITY.HTML
: Yazım hatası düzeltildi. Minimum API düzeyi, yerel etkinlikler için 8 değil 9 olmalıdır.docs/STABLE-APIS.html
: API seviyesi 9'dan itibaren EGL'yi desteklenen kararlı API olarak listeleyen eksik doküman eklendi.download-toolchain-sources.sh
: AOSP sunucularının yeni konumu olan android.googlesource.com adresinden araç zinciri kaynaklarını indirmek için güncellendi.gabi++
adlı yeni bir C++ destek çalışma zamanı eklendi. Bu konuyla ilgili daha fazla bilgiyi güncellenendocs/CPLUSPLUS-SUPPORT.html
bölümünde bulabilirsiniz.- GNU libstdc++ v3'ün (GPLv3 lisansı) paylaşılan kitaplık sürümüne karşılık gelen
gnustl_shared
adlı yeni bir C++ destek çalışma zamanı eklendi. Daha fazla bilgi içindocs/CPLUSPLUS-SUPPORT.html
- STLport C++ çalışma zamanlarında RTTI desteği eklendi (istisnalar desteklenmez).
LOCAL_CPP_EXTENSION
'da birden fazla dosya uzantısı için destek eklendi. Örneğin, hemfoo.cpp
hem debar.cxx
öğesini C++ kaynakları olarak derlemek için aşağıdakileri bildirin:LOCAL_CPP_EXTENSION := .cpp .cxx
- NDK tarafından sağlanan bağlantı zamanı paylaşılan sistem kitaplıklarından birçok istenmeyen dışa aktarılmış sembol kaldırıldı. Bu, bağımsız araç zinciriyle oluşturulan kodun yanlışlıkla kararlı olmayan bir ABI sembolüne (ör.platformu oluşturmak için kullanılan araç zinciri her değiştirildiğinde değişen herhangi bir libgcc. a sembolü) bağlı olma riskini ortadan kaldırır.
- Daha fazla uzantıyı desteklemek için EGL ve OpenGLES Khronos başlıkları yenilendi. Bu işlemin, ilgili kitaplıkların NDK ABI'lerini değiştirmediğini unutmayın. Çünkü her uzantının çalışma zamanında istemci uygulaması tarafından incelenmesi gerekir.
Kullanılabilen uzantılar, cihazın üzerinde çalıştığı platform sürümüne değil, gerçek cihazınıza ve GPU sürücülerine bağlıdır. Başlıktaki değişiklikler,
eglGetProcAddress()
veyaglGetProcAddress()
ile incelendikten sonra uzantıların kullanılmasını kolaylaştırmak için yeni sabitler ve türler ekler. Aşağıdaki listede yeni desteklenen uzantılar açıklanmaktadır:- 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 (Ağustos 2011)
NDK'nın bu sürümü, r6'ya kıyasla yeni özellikler içermez. r6b sürümü, r6 sürümündeki aşağıdaki sorunları giderir:
- Önemli hata düzeltmeleri
-
- Çok mimarili derlemeler için
APP_ABI="armeabi x86"
kullanılırken derleme sorunu düzeltildi. - NDK yayın paketindeki önceden oluşturulmuş STLport ikili dosyalarının konumu düzeltildi. Paketleme komut dosyasındaki bir hata nedeniyle bu dosyalar yanlış konuma yerleştirilmiş.
- x86standalone
araç zinciriyle paylaşılan kitaplıklarda
atexit()
kullanımı düzeltildi. - Düzeltildi
make-standalone-toolchain.sh --arch=x86
. Doğru GNU libstdc++ ikili dosyalarını doğru konuma kopyalamada hata oluşuyordu. __dso_handle
simgesi için tanım ve boyutun eksik olmasıyla ilgili bağımsız araç zinciri bağlayıcı uyarıları düzeltildi (yalnızca ARM).- x86 derlemeleri için
$(SYSROOT)/usr/include
ekleme sırası düzeltildi. Daha fazla bilgi için hataya bakın. ptrdiff_t
vesize_t
tanımları, x86'ya özel sistemlerde x86 bağımsız araç zinciriyle kullanıldığında düzeltildi.
- Çok mimarili derlemeler için
Android NDK r6 (Temmuz 2011)
NDK'nın bu sürümünde x86 ABI desteği ve diğer küçük değişiklikler yer alıyor.
Bu sürümdeki değişiklikleri açıklayan ayrıntılı bilgiler için NDK paketinde yer alan CHANGES.HTML
dokümanını okuyun.
- Genel notlar:
-
- Uyumlu x86 tabanlı Android cihazlarda çalışan makine kodu oluşturmanıza olanak tanıyan x86 ABI desteği eklenir. x86'daki başlıca özellikler arasında x86'ya özgü araç zincirleri, sistem başlıkları, kitaplıklar ve hata ayıklama desteği yer alır. x86 desteğiyle ilgili tüm ayrıntılar için NDK paketindeki
docs/CPU-X86.html
bölümüne bakın.Varsayılan olarak ARM tabanlı cihazlar için kod oluşturulur ancak x86 platformları için derleme yapmak üzere
Application.mk
dosyanızdakiAPP_ABI
tanımınıza x86 ekleyebilirsiniz. Örneğin, aşağıdaki satır,ndk-build
kodunuzu üç farklı ABI için oluşturmasını ister:APP_ABI := armeabi armeabi-v7a x86
ARM tabanlı derleme kaynaklarını kullanmıyorsanız x86 makine kodu oluşturmak için
Android.mk
dosyalarınıza dokunmanız gerekmez. --toolchain=x86-4.4.3
make-standalone-toolchain.sh
çağrılırkenmake-standalone-toolchain.sh
seçeneğini kullanarak bağımsız bir x86 araç zinciri oluşturabilirsiniz. Daha fazla bilgi içindocs/STANDALONE-TOOLCHAIN.html
sayfasına bakın.- Yeni
ndk-stack
aracı, yerel kod tarafından oluşturulanlogcat
içindeki yığın izlerini çevirmenize olanak tanır. Araç, talimat adreslerini her yığın çerçevesine karşılık gelen işlev, kaynak dosya ve satır numarası gibi bilgileri içeren okunabilir bir biçime çevirir. Daha fazla bilgi ve kullanım örneği içindocs/NDK-STACK.html
sayfasına bakın.
- Uyumlu x86 tabanlı Android cihazlarda çalışan makine kodu oluşturmanıza olanak tanıyan x86 ABI desteği eklenir. x86'daki başlıca özellikler arasında x86'ya özgü araç zincirleri, sistem başlıkları, kitaplıklar ve hata ayıklama desteği yer alır. x86 desteğiyle ilgili tüm ayrıntılar için NDK paketindeki
- Diğer değişiklikler: NDK r5'ten beri desteği sonlandırılmış olan
arm-eabi-4.4.0
, NDK dağıtımından kaldırıldı.
Android NDK r5c (Haziran 2011)
NDK'nın bu sürümü, r5b sürümüne kıyasla yeni özellikler içermez. r5c sürümü, r5b sürümündeki aşağıdaki sorunları giderir:
- Önemli hata düzeltmeleri:
-
ndk-build
: Hata ayıklanabilir projelerin paralel olarak oluşturulmaya çalışılması sırasında ortaya çıkan nadir bir hata düzeltildi.LOCAL_WHOLE_STATIC_LIBRARIES
işlevinin yeni araç zinciriyle doğru şekilde çalışmasını engelleyen yazım hatası düzeltildi ve bu konuyla ilgili dokümanlardocs/ANDROID-MK.html
bölümüne eklendi.gnustl_static
'e karşı bağlantı oluşturulan kodun, API düzeyi 8'den (Android 2.2) eski platform sürümlerinde çalıştırıldığında kilitlenmesine neden olan hata düzeltildi.ndk-gdb
: Android 3.0 veya sonraki sürümlerdeki cihazlarda hata ayıklama sırasında segmentasyon hatasına neden olan bir hata düzeltildi.<android/input.h>
: API düzeyi 9'da (Android 2.3) kullanıma sunulan iki işlev hatalıydı ve düzeltildi. Bu durum kaynak API'yi bozsa da sisteme yönelik ikili arayüz değişmez. Yanlış işlevlerdehistory_index
parametresi eksikti ve doğru tanımlar aşağıda gösterilmiştir: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);
- API düzeyi 9 (Android 2.3) için C kitaplığı ARM ikilisi, bağlantı zamanında bu API düzeyine eklenen yeni işlevleri (ör.
pthread_rwlock_init
) doğru şekilde kullanıma sunacak şekilde güncellendi.
- Küçük iyileştirmeler ve düzeltmeler:
-
- Nesne dosyaları artık her zaman
LOCAL_SRC_FILES
içinde göründükleri sırada bağlanır. Dosyalar daha önce kaynak uzantılarına göre gruplandırıldığından bu durum söz konusu değildi. import-module
başarısız olduğunda artık aranan dizinlerin listesi yazdırılıyor. Bu, derleme sistemi tarafından kullanılanNDK_MODULE_PATH
tanımının doğru olup olmadığını kontrol etmek için yararlıdır.import-module
başarılı olduğunda, modülün bulunduğu dizin artık günlük dosyasına yazdırılıyor (NDK_LOG=1
ile görünür).- Projelerde çok sayıda include dizini olduğunda hata ayıklanabilir uygulamaların derleme hızı artırıldı.
ndk-gdb
:adb shell
hatalarının daha iyi algılanması ve hata mesajlarının iyileştirilmesi.<pthread.h>
: API düzeyi 9 (Android 2.3) ve sonraki sürümler içinPTHREAD_RWLOCK_INITIALIZER
tanımı düzeltildi.- Bir modülün kendisini içe aktarabilmesi ve bunun sonucunda GNU Make'te sonsuz döngü oluşmasına neden olan sorun düzeltildi.
LOCAL_ARM_NEON
, true olarak ayarlandığında derlemenin başarısız olmasına neden olan hata düzeltildi (build/core/build-binary.mk
içinde yazım hatası)..s
derleme dosyalarının derlenmesini engelleyen hata düzeltildi (.S
dosyaları sorunsuz çalışıyordu).
- Nesne dosyaları artık her zaman
Android NDK r5b (Ocak 2011)
NDK'nın bu sürümü, r5'e kıyasla yeni özellikler içermez. r5b sürümü, r5 sürümündeki aşağıdaki sorunları giderir:
- r5 ikilileri için glibc 2.11 gerekirken r5b ikilileri, bunun yerine glibc 2.7 veya daha yüksek bir sürümü hedefleyen özel bir araç zinciriyle oluşturulur. Linux araç zinciri ikilileri artık Ubuntu 8.04 veya sonraki sürümlerde çalışıyor.
- arm-linux-androideabi-4.4.3 araç zincirindeki bir derleyici hatasını düzeltir. Önceki ikili, imzalı karakterlerle uğraşırken geçersiz küçük resim talimat dizileri oluşturuyordu.
- APP_STL için "gnustl_static" değeriyle ilgili eksik dokümanları ekler. Bu değer, GNU libstdc++'ın statik kitaplık sürümüne bağlantı oluşturmanıza olanak tanır. -
- Aşağıdaki
ndk-build
sorunlar düzeltildi:- Windows'da derleme hatası oluştuğunda tutarsız bağımlılık dosyaları oluşturan hata. Bu durum, kaynak kodda hata düzeltildikten sonra uygun bir derlemenin oluşturulmasını engelledi.
- Android NDK yüklemesi veya proje yolu için çok kısa yolların kullanılması, geçersiz bağımlılık dosyalarının oluşturulmasına neden olan Cygwin'e özgü bir hata. Bu durum, artımlı derlemeleri imkansız hale getiriyordu.
- cpufeatures kitaplığının yeni NDK araç zinciriyle düzgün çalışmasını engelleyen bir yazım hatası.
- Cygwin'deki derlemeler, her kaynak veya nesne dosyası için GNU Make'ten
cygpath -m
çağrılarını önleyerek daha hızlı hale getirilir. Bu durum, çok büyük kaynak ağaçlarında sorunlara neden oluyordu. Bu işlem düzgün çalışmazsacygpath -m
öğesini tekrar kullanmak için ortamınızdaNDK_USE_CYGPATH=1
tanımlayın. - Cygwin yüklemesi artık kullanıcılara boşluk içeren geçersiz yükleme yolları hakkında bildirim gönderiyor. Daha önce, doğru sürüm yüklü olsa bile geçersiz bir yol, GNU Make'in yanlış sürümüyle ilgili bir hata veriyordu.
NDK_MODULE_PATH
ortam değişkeninin, iki nokta üst üste işaretiyle ayrılmış birden fazla dizin içerdiğinde düzgün çalışmasını engelleyen yazım hatası düzeltildi.prebuilt-common.sh
komut dosyası, 32 bit araç zincirinin Snow Leopard'da düzgün şekilde yeniden oluşturulmasına olanak tanıyan ana makine etiketine güvenmek yerine derleyiciyi 64 bit oluşturulmuş makine kodu için kontrol etmeye yönelik düzeltmeler içerir. Araç zincirini yeniden oluşturma komut dosyaları artık 32 bit ana makine araç zincirinin kullanılmasını da destekliyor.INET_ADDRSTRLEN
için eksik bir beyan<netinet/in.h>
öğesine eklendi.IN6_IS_ADDR_MC_NODELOCAL
veIN6_IS_ADDR_MC_GLOBAL
için eksik beyanlar<netinet/in6.h>
'ye eklendi.<asm/byteorder.h>
içinde "asm" yerine "__asm__" kullanıldı. Böylece-std=c99
ile derleme yapılması sağlandı.
Android NDK r5 (Aralık 2010)
NDK'nın bu sürümünde birçok yeni API bulunur. Bu API'lerin çoğu, yerel kodu yoğun şekilde kullanan oyunların ve benzer uygulamaların geliştirilmesini desteklemek için kullanıma sunulmuştur. Geliştiriciler, API'leri kullanarak etkinliklere, seslere, grafiklere ve pencere yönetimine, öğelere ve depolamaya doğrudan yerel erişim sağlayabilir. Geliştiriciler, yeni NativeActivity
sınıfının yardımıyla Android uygulama yaşam döngüsünü yerel kodda da uygulayabilir. Bu sürümdeki değişiklikleri açıklayan ayrıntılı bilgiler için indirilen NDK paketinde bulunan CHANGES.HTML
dokümanını okuyun.
- Genel notlar:
-
- Yerel etkinlikler için destek ekler. Bu sayede Android uygulama yaşam döngüsünü yerel kodda uygulayabilirsiniz.
- Aşağıdakiler için yerel destek eklenmiştir:
- Giriş alt sistemi (ör. klavye ve dokunmatik ekran)
- Sensör verilerine (ivme ölçer, pusula, jiroskop vb.) erişim
- Giriş ve sensör etkinlikleri gibi durumları beklemek için kullanılan etkinlik döngüsü API'leri.
- Pencere ve yüzey alt sistemi
- OpenSL ES standardına dayalı, oynatma ve kaydetmenin yanı sıra platform ses efektleri üzerinde kontrolü destekleyen ses API'leri
.apk
dosyasına paketlenmiş öğelere erişim
- Daha iyi kod oluşturan ve artık
./configure && make
ile kendi projelerini oluşturmak isteyen kullanıcılar için bağımsız bir çapraz derleyici olarak da kullanılabilen yeni bir araç zinciri (GCC 4.4.3'e dayalı) içerir. Ayrıntılar için docs/STANDALONE-TOOLCHAIN.html adresine bakın. GCC 4.4.0'ın ikili dosyaları hâlâ sağlanmaktadır ancak 4.2.1'in ikili dosyaları kaldırılmıştır. - Üçüncü taraf modüllerinin paylaşımını ve yeniden kullanımını kolaylaştırmak için önceden oluşturulmuş statik ve paylaşılan kitaplıklar (docs/PREBUILTS.html) ile modül dışa aktarma ve içe aktarma işlemlerine (docs/IMPORT-MODULE.html'de neden açıklandığı gibi) destek ekler.
- Yardımcı modül olarak varsayılan bir C++ STL uygulaması (STLport'a dayalı) sağlar. Statik veya paylaşılan kitaplık olarak kullanılabilir (ayrıntılar ve kullanım örnekleri sources/android/stlport/README dosyasında yer alır). Varsayılan C++ STL uygulaması yerine bu kitaplıklara karşı derleme yapmayı seçerseniz STLport (statik veya paylaşılan) ve GNU libstdc++ (yalnızca statik) için önceden oluşturulmuş ikili dosyalar da sağlanır. Varsayılan STL uygulamasında C++ istisnaları ve RTTI desteklenmez. Daha fazla bilgi için docs/CPLUSPLUS-SUPPORT.HTML adresine bakın.
- CPU türünün raporlanmasını iyileştiren
cpufeatures
yardımcı kitaplığında iyileştirmeler içerir (bazı cihazlar daha önce cihaz aslında ARMv6 iken ARMv7 CPU olarak raporlanıyordu). Bu kitaplığı kullanan geliştiricilerin, iyileştirmelerden yararlanmak için uygulamalarını yeniden oluşturup Google Play'e yüklemelerini öneririz. - OpenGL ES dokuları ve hizmetleri oluşturup yönetmenize olanak tanıyan bir EGL kitaplığı ekler.
- Yerel etkinlik yazma yöntemini göstermek için yeni örnek uygulamalar
native-plasma
venative-activity
ekler. - Birçok hata düzeltmesi ve başka küçük iyileştirmeler içerir. Değişikliklerin daha ayrıntılı bir listesi için docs/CHANGES.html dosyasına bakın.
Android NDK r4b (Haziran 2010)
- NDK r4b notları:
-
NDK derleme ve hata ayıklama komut dosyalarındaki çeşitli sorunlar için düzeltmeler içerir. NDK r4 kullanıyorsanız NDK r4b derlemesini indirmenizi öneririz. Bu sürümdeki değişiklikleri açıklayan ayrıntılı bilgiler için indirilen NDK paketinde bulunan CHANGES.TXT belgesini okuyun.
- Genel notlar:
-
- Yeni
ndk-build
derleme komutuyla basitleştirilmiş bir derleme sistemi sağlar. - Yeni
ndk-gdb
komutuyla, üretim cihazlarında oluşturulan makine kodunun kolayca yerel olarak hata ayıklanması için destek eklenir. - ARM tabanlı CPU mimarileri için yeni bir Android'e özgü ABI ekler:
armeabi-v7a
. Yeni ABI, mevcutarmeabi
ABI'yi genişleterek şu CPU talimat seti uzantılarını içerir:- Thumb-2 talimatları
- VFP donanım FPU talimatları (VFPv3-D16)
- ARM Advanced SIMD (NEON) GCC intrinsikleri ve VFPv3-D32 için isteğe bağlı destek. Verizon Droid by Motorola, Google Nexus One gibi cihazlar tarafından desteklenir.
- Uygulamanızın, çalışma zamanında ana makine cihazının CPU özelliklerini algılamasına olanak tanıyan yeni bir
cpufeatures
statik kitaplık (kaynaklarla birlikte) ekler. Uygulamalar özellikle ARMv7-A desteğinin yanı sıra VFPv3-D32 ve NEON desteğini kontrol edebilir, ardından gerektiğinde ayrı kod yolları sağlayabilir. - CPU özelliklerini kontrol etmek ve ardından CPU tarafından destekleniyorsa NEON intrinsics kullanarak optimize edilmiş bir kod yolu sağlamak için
hello-neon
kitaplığının nasıl kullanılacağını gösteren bir örnek uygulama (hello-neon
) ekler.cpufeatures
- NDK tarafından desteklenen talimat gruplarından biri veya her ikisi için makine kodu oluşturmanıza olanak tanır. Örneğin, hem ARMv5 hem de ARMv7-A mimarileri için aynı anda derleme yapabilir ve her şeyi uygulamanızın nihai
.apk
'sında saklayabilirsiniz. - Uygulamalarınızın yalnızca cihazları bunları çalıştırabilecek kullanıcılar tarafından kullanılabilmesini sağlamak için Google Play artık uygulamaları, uygulamanızda yer alan talimat seti bilgilerine göre filtreliyor. Filtrelemeyi etkinleştirmek için sizin tarafınızdan herhangi bir işlem yapılması gerekmiyor. Ayrıca, Android sisteminin kendisi de yükleme sırasında uygulamanızı kontrol eder ve yalnızca uygulama, cihazın CPU mimarisi için derlenmiş bir kitaplık sağlarsa yüklemenin devam etmesine izin verir.
- Android 2.2 desteği eklenir. Bu kapsamda, yerel koddan
Bitmap
nesnelerinin piksel arabelleklerine erişmek için yeni bir kararlı API de yer alır.
- Yeni
Android NDK r3 (Mart 2010)
- Genel notlar:
-
- OpenGL ES 2.0 yerel kitaplık desteği ekler.
- OpenGL ES 2.0 köşe ve parça gölgelendiricilerinin kullanımını gösteren bir örnek uygulama
hello-gl2
ekler. - Bu sürümde, önceki sürüme (4.2.1) kıyasla biraz daha kompakt ve verimli makine kodu oluşturması gereken GCC 4.4.0 ile araç zinciri ikilileri yenilendi. NDK, makine kodunuzu oluşturmak için isteğe bağlı olarak kullanabileceğiniz 4.2.1 ikili dosyalarını da sunmaya devam ediyor.
Android NDK r2 (Eylül 2009)
İlk olarak "Android 1.6 NDK, Release 1" olarak yayınlandı.
- Genel notlar:
-
- OpenGL ES 1.1 yerel kitaplık desteği eklenir.
san-angeles
nesnesiyle etkinlik yaşam döngüsünü yönetirken yerel OpenGL ES API'leri aracılığıyla 3D grafikler oluşturan bir örnek uygulama (san-angeles
) ekler.GLSurfaceView
Android NDK r1 (Haziran 2009)
İlk olarak "Android 1.5 NDK, Release 1" olarak yayınlandı.
- Genel notlar:
-
- Thumb-1 talimatları da dahil olmak üzere ARMv5TE talimatları için derleyici desteği (GCC) içerir.
- Kararlı yerel API'ler, dokümanlar ve örnek uygulamalar için sistem başlıklarını içerir.