इस पेज पर, NDK के सभी स्टेबल वर्शन में हुए बदलावों के बारे में जानकारी दी गई है. एनडीके का सबसे नया स्टेबल वर्शन या फ़िलहाल उपलब्ध कोई भी बीटा वर्शन डाउनलोड करने के लिए, एनडीके डाउनलोड पेज देखें.
ज़्यादा जानकारी के लिए, android-ndk-announce Google ग्रुप देखें. साथ ही, रिलीज़ से जुड़ी सूचनाएं पाने के लिए सदस्यता लें.
Android NDK r29 (अक्टूबर 2025)
बदलाव की जानकारी- डाउनलोड
-
- इस रिलीज़ को डाउनलोड करने की सुविधा यहां उपलब्ध है.
Android NDK r28 (फ़रवरी 2025)
बदलाव की जानकारी- डाउनलोड
-
- इस रिलीज़ को डाउनलोड करने की सुविधा यहां उपलब्ध है.
Android NDK r27 LTS (जुलाई 2024)
बदलाव की जानकारी- डाउनलोड
-
- इस रिलीज़ को डाउनलोड करने की सुविधा यहां उपलब्ध है.
Android NDK r26 LTS (सितंबर 2023)
बदलाव की जानकारी- डाउनलोड
-
- इस रिलीज़ को डाउनलोड करने की सुविधा यहां उपलब्ध है.
- सूचनाएं
-
- KitKat (एपीआई 19 और 20) अब काम नहीं करता.
Android NDK r25 LTS (जुलाई 2022)
बदलाव की जानकारी- डाउनलोड
-
- इस रिलीज़ को डाउनलोड करने की सुविधा यहां उपलब्ध है.
- सूचनाएं
-
- इसमें Android 13 के एपीआई शामिल हैं.
- LLVM को clang-r450784d पर अपडेट किया गया है. यह LLVM 14 डेवलपमेंट पर आधारित है.
Android NDK r24 (मार्च 2022)
बदलाव की जानकारी- डाउनलोड
-
- इस रिलीज़ को डाउनलोड करने की सुविधा यहां उपलब्ध है.
- सूचनाएं
-
-
GNU असेंबलर (GAS) को हटा दिया गया है. अगर आपने
-fno-integrated-as
का इस्तेमाल करके बनाया है, तो आपको उस फ़्लैग को हटाना होगा. असेंबली को LLVM के साथ काम करने लायक बनाने के बारे में सलाह पाने के लिए, Clang माइग्रेशन से जुड़ी जानकारी देखें. - GDB को हटा दिया गया है. इसके बजाय, LLDB का इस्तेमाल करें. ध्यान दें कि ndk-gdb, डिफ़ॉल्ट रूप से LLDB का इस्तेमाल करता है. साथ ही, Android Studio सिर्फ़ LLDB के साथ काम करता है.
- Jelly Bean (एपीआई 16, 17, और 18) अब काम नहीं करता. एनडीके के साथ काम करने वाला ओएस कम से कम KitKat (एपीआई लेवल 19) होना चाहिए.
- अब Neon के अलावा अन्य डिवाइसों पर, यह सुविधा काम नहीं करती. बहुत कम पुराने डिवाइसों पर Neon काम नहीं करता. इसलिए, परफ़ॉर्मेंस में सुधार के अलावा, ज़्यादातर ऐप्लिकेशन को कोई बदलाव नहीं दिखेगा.
- RenderScript के लिए, बिल्ड सपोर्ट की सुविधा हटा दी गई है. RenderScript को Android 12 में बंद कर दिया गया था. अगर आपने अपने ऐप्लिकेशन को RenderScript से माइग्रेट नहीं किया है, तो NDK r23 LTS का इस्तेमाल किया जा सकता है.
-
GNU असेंबलर (GAS) को हटा दिया गया है. अगर आपने
Android NDK r23 LTS (अगस्त 2021)
बदलाव की जानकारी- डाउनलोड
-
- इस रिलीज़ को डाउनलोड करने के लिए, यहां जाएं.
- सूचनाएं
-
-
GNU binutils को हटा दिया गया है. हालांकि, GNU Assembler (GAS) को नहीं हटाया गया है. GAS
को अगली रिलीज़ में हटा दिया जाएगा. अगर
-fno-integrated-as
का इस्तेमाल किया जा रहा है, तो उस फ़्लैग को हटाने में आने वाली किसी भी समस्या के लिए, बग की जानकारी दें. -
GDB के लिए सहायता बंद कर दी गई है. GDB को अगली रिलीज़ से हटा दिया जाएगा.
इसके बजाय, LLDB का इस्तेमाल करें. ध्यान दें कि
ndk-gdb
, डिफ़ॉल्ट रूप से LLDB का इस्तेमाल करता है. - NDK r23, नॉन-नियन को सपोर्ट करने वाली आखिरी रिलीज़ है. NDK r24 से, sysroot में मौजूद armeabi-v7a लाइब्रेरी, Neon के साथ बनाई जाएंगी. बहुत कम पुराने डिवाइसों पर Neon काम नहीं करता. इसलिए, परफ़ॉर्मेंस में सुधार के अलावा, ज़्यादातर ऐप्लिकेशन को इस बारे में पता नहीं चलेगा.
- Jelly Bean (एपीआई 16, 17, और 18), NDK के अगले वर्शन के साथ काम नहीं करेगा. r24 के लिए, NDK के साथ काम करने वाला ओएस कम से कम KitKat (एपीआई लेवल 19) होना चाहिए.
-
GNU binutils को हटा दिया गया है. हालांकि, GNU Assembler (GAS) को नहीं हटाया गया है. GAS
को अगली रिलीज़ में हटा दिया जाएगा. अगर
Android NDK r22b (मार्च 2021)
बदलाव की जानकारी- डाउनलोड
-
- इस रिलीज़ को डाउनलोड करने के लिए, यहां जाएं.
- सूचनाएं
-
-
GNU binutils अब काम नहीं करता. इसे आने वाले NDK वर्शन में हटा दिया जाएगा. ध्यान दें कि GNU असेंबलर (
as
) इसका हिस्सा है. अगर-fno-integrated-as
का इस्तेमाल किया जा रहा है, तो उस फ़्लैग को हटाने में आने वाली किसी भी समस्या के लिए, बग की जानकारी दें. अगर सीधे तौर परas
का इस्तेमाल किया जा रहा है, तो इसके बजायclang
का इस्तेमाल करें. - LLD अब डिफ़ॉल्ट लिंकर है. ndk-build और हमारी CMake टूलचेन फ़ाइल भी अब llvm-ar और llvm-strip का इस्तेमाल करती हैं.
- ndk-gdb अब lldb का इस्तेमाल डिबगर के तौर पर करता है. gdb अब काम नहीं करता और इसे आने वाले समय में हटा दिया जाएगा. gdb पर वापस जाने के लिए, --no-lldb विकल्प का इस्तेमाल करें. हालांकि, कृपया बग की शिकायत करें और बताएं कि lldb का इस्तेमाल क्यों नहीं किया जा सका.
-
अब
std::filesystem
के लिए सहायता उपलब्ध है. दो ऐसी समस्याएं हैं जिनके बारे में हमें पहले से पता है:-
समस्या
1258: ऐसा हो सकता है कि
std::filesystem::perm_options::nofollow
पुराने डिवाइसों पर काम न करे. -
समस्या
1260:
std::filesystem::canonical
पुराने डिवाइसों पर मौजूद नहीं है. इसलिए, इस पर मौजूद नहीं होने वाला पाथ पास करने पर, यह गलत तरीके से काम करेगा.
-
समस्या
1258: ऐसा हो सकता है कि
-
GNU binutils अब काम नहीं करता. इसे आने वाले NDK वर्शन में हटा दिया जाएगा. ध्यान दें कि GNU असेंबलर (
Android NDK r21e LTS (जनवरी 2021)
बदलाव की जानकारी- डाउनलोड
-
- इस रिलीज़ को डाउनलोड करने के लिए, यहां जाएं.
- सूचनाएं
-
-
Windows के 32-बिट वर्शन के लिए सहायता बंद कर दी गई है. इससे ज़्यादातर उपयोगकर्ताओं पर कोई असर नहीं पड़ता. अगर आपको अब भी Windows के 32-बिट वर्शन से NDK ऐप्लिकेशन बनाने हैं, तो NDK r20 का इस्तेमाल जारी रखें.
Android डेवलपर टूल में हुए इस बदलाव के बारे में ज़्यादा जानने के लिए, इस विषय पर ब्लॉग पोस्ट पढ़ें.
-
एलएलडी अब टेस्टिंग के लिए उपलब्ध है.
AOSP ने डिफ़ॉल्ट रूप से LLD का इस्तेमाल करना शुरू कर दिया है. NDK भी इसका इस्तेमाल करेगा
(समयसीमा के बारे में जानकारी नहीं है). लिंक करते समय
-fuse-ld=lld
पास करके, अपने ऐप्लिकेशन में एलएलडी की जांच करें. ध्यान दें कि समस्या 843 का असर, LLD का इस्तेमाल करने वाले उन बिल्ड पर पड़ेगा जिनमें llvm-strip और llvm-objcopy के बजाय, binutils strip और objcopy का इस्तेमाल किया जाता है. -
आने वाली रिलीज़ में, लेगसी टूलचेन के इंस्टॉल पाथ हटा दिए जाएंगे. ये पाथ, NDK r19 के बाद से काम नहीं कर रहे हैं. साथ ही, ये NDK में काफ़ी जगह लेते हैं. हटाए जा रहे पाथ ये हैं:
- प्लेटफ़ॉर्म
- sources/cxx-stl
- sysroot
- टूलचेन (टूलचेन/llvm को छोड़कर)
make_standalone_toolchain.py
का इस्तेमाल करने वाले लोगों पर भी इसका कोई असर नहीं पड़ता. हालांकि, r19 के बाद से इस स्क्रिप्ट की ज़रूरत नहीं है. लेगसी टूलचेन लेआउट से माइग्रेट करने के बारे में जानकारी पाने के लिए, एनडीके के उस वर्शन के लिए बिल्ड सिस्टम को बनाए रखने से जुड़ी गाइड देखें जिसका इस्तेमाल किया जा रहा है. - अगस्त 2019 से, Play Store पर APK अपलोड करते समय 64-बिट की सुविधा ज़रूरी होगी. अभी पोर्ट करना शुरू करें, ताकि समय आने पर आपको कोई परेशानी न हो. ज़्यादा जानकारी के लिए, यह ब्लॉग पोस्ट पढ़ें.
- macOS के लिए ऐप्लिकेशन बंडल उपलब्ध है. इसे साइन किया गया है और इसकी पुष्टि की गई है. इसे हमारी विकी और वेबसाइट से डाउनलोड किया जा सकता है. ध्यान दें कि सिर्फ़ बंडल, RPATH का इस्तेमाल कर सकते हैं और नोटराइज़ेशन पास कर सकते हैं. इसलिए, macOS के लिए पारंपरिक NDK पैकेज को नोटराइज़ नहीं किया जा सकता. एसडीके, पारंपरिक पैकेज का इस्तेमाल जारी रखेगा, क्योंकि ऐप्लिकेशन बंडल के लिए लेआउट में बदलाव करने की ज़रूरत होती है. इससे यह Android Studio के साथ काम नहीं करेगा. SDK Manager के ज़रिए डाउनलोड किए जाने पर, NDK को क्वारंटीन नहीं किया जाता. इसलिए, फ़िलहाल Gatekeeper इसे अनुमति देता है. फ़िलहाल, SDK मैनेजर, macOS के लिए NDK पाने का सबसे भरोसेमंद तरीका है.
-
Android NDK r20b (जून 2019)
बदलाव की जानकारी- डाउनलोड
-
- इस रिलीज़ को डाउनलोड करने के लिए, यहां जाएं.
- सूचनाएं
-
-
एलएलडी अब टेस्टिंग के लिए उपलब्ध है.
AOSP, डिफ़ॉल्ट रूप से LLD का इस्तेमाल करने की प्रोसेस में है. NDK भी ऐसा ही करेगा. हालांकि, इसकी समयसीमा के बारे में पता नहीं है. लिंक करते समय
-fuse-ld=lld
पास करके, अपने ऐप्लिकेशन में एलएलडी की जांच करें. - अगस्त 2019 से, Play Store पर APK अपलोड करते समय 64-बिट की सुविधा ज़रूरी होगी. अभी पोर्ट करना शुरू करें, ताकि समय आने पर आपको कोई परेशानी न हो. ज़्यादा जानकारी के लिए, यह ब्लॉग पोस्ट पढ़ें.
- Android Q के एपीआई जोड़े गए.
-
एलएलडी अब टेस्टिंग के लिए उपलब्ध है.
AOSP, डिफ़ॉल्ट रूप से LLD का इस्तेमाल करने की प्रोसेस में है. NDK भी ऐसा ही करेगा. हालांकि, इसकी समयसीमा के बारे में पता नहीं है. लिंक करते समय
Android NDK r19c (जनवरी 2019)
बदलाव की जानकारी- डाउनलोड
-
- इस रिलीज़ को डाउनलोड करने के लिए, यहां जाएं.
- सूचनाएं
-
-
डेवलपर को अपने ऐप्लिकेशन की टेस्टिंग एलएलडी से शुरू करनी चाहिए. AOSP ने डिफ़ॉल्ट रूप से LLD का इस्तेमाल करना शुरू कर दिया है. साथ ही, NDK अगले वर्शन में डिफ़ॉल्ट रूप से इसका इस्तेमाल करेगा. एलएलडी के रिलीज़ साइकल में कोई बड़ी समस्या न होने पर, बीएफ़डी और गोल्ड को हटा दिया जाएगा. ऐसा अनुमानित तौर पर r21 में होगा. लिंक करते समय
-fuse-ld=lld
पास करके, अपने ऐप्लिकेशन में LLD की जांच करें. ध्यान दें: फ़िलहाल, lld Windows पर कंप्रेस किए गए सिंबल के साथ काम नहीं करता है. समस्या 888. Clang, Windows पर कंप्रेस किए गए सिंबल भी जनरेट नहीं कर सकता. हालांकि, Darwin या Linux से बनाए गए आर्टफ़ैक्ट का इस्तेमाल करते समय यह समस्या हो सकती है. - अगस्त 2019 से, Play Store पर APK अपलोड करते समय 64-बिट की सुविधा ज़रूरी होगी. अभी पोर्ट करना शुरू करें, ताकि समय आने पर आपको कोई परेशानी न हो. ज़्यादा जानकारी के लिए, यह ब्लॉग पोस्ट पढ़ें.
-
समस्या 780:
स्टैंडअलोन
टूलचेन अब ज़रूरी नहीं हैं. Clang, binutils, sysroot, और टूलचेन के अन्य हिस्से अब
$NDK/toolchains/llvm/prebuilt/<host-tag>
में इंस्टॉल हो गए हैं. Clang इन्हें अपने-आप ढूंढ लेगा. API 26 ARM के लिए, स्टैंडअलोन टूलचेन बनाने के बजाय, सीधे NDK से कंपाइलर को शुरू करें: r19 के लिए, टूलचेन को पुराने पाथ पर भी इंस्टॉल किया जाता है, ताकि बिल्ड सिस्टम को नए लेआउट के हिसाब से बनाया जा सके. r20 में पुराने पाथ हटा दिए जाएंगे.$ $NDK/toolchains/llvm/prebuilt/
/bin/armv7a-linux-androideabi26-clang++ src.cpp make_standalone_toolchain.py
स्क्रिप्ट को नहीं हटाया जाएगा. अब इसकी ज़रूरत नहीं है. साथ ही, ऊपर दी गई जानकारी के साथ एक चेतावनी दिखेगी. हालांकि, स्क्रिप्ट को इसलिए बनाए रखा जाएगा, ताकि मौजूदा वर्कफ़्लो को सुरक्षित रखा जा सके. अगर ndk-build, CMake या स्टैंडअलोन टूलचेन का इस्तेमाल किया जा रहा है, तो आपके वर्कफ़्लो में कोई बदलाव नहीं होना चाहिए. यह बदलाव, तीसरे पक्ष के बिल्ड सिस्टम को बनाए रखने वालों के लिए अहम है. अब वे Android के लिए बनाए गए कुछ कोड को मिटा सकते हैं. ज़्यादा जानकारी के लिए, सिस्टम मेंटेन करने वालों के लिए बनाई गई गाइड देखें. - ndk-depends को हटा दिया गया है. हमारा मानना है कि Android के पुराने वर्शन पर नेटिव लाइब्रेरी लोड करने से जुड़ी समस्याओं को हल करने के लिए, ReLinker एक बेहतर समाधान है.
- समस्या 862: GCC रैपर स्क्रिप्ट, Clang पर रीडायरेक्ट करती थीं. इन्हें हटा दिया गया है, क्योंकि ये ड्रॉप-इन रिप्लेसमेंट के तौर पर काम नहीं करती हैं.
-
डेवलपर को अपने ऐप्लिकेशन की टेस्टिंग एलएलडी से शुरू करनी चाहिए. AOSP ने डिफ़ॉल्ट रूप से LLD का इस्तेमाल करना शुरू कर दिया है. साथ ही, NDK अगले वर्शन में डिफ़ॉल्ट रूप से इसका इस्तेमाल करेगा. एलएलडी के रिलीज़ साइकल में कोई बड़ी समस्या न होने पर, बीएफ़डी और गोल्ड को हटा दिया जाएगा. ऐसा अनुमानित तौर पर r21 में होगा. लिंक करते समय
Android NDK r18b (सितंबर 2018)
बदलाव की जानकारी- डाउनलोड
-
- इस रिलीज़ को डाउनलोड करने के लिए, यहां जाएं.
- सूचनाएं
-
- GCC को हटा दिया गया है.
-
एलएलडी अब टेस्टिंग के लिए उपलब्ध है.
AOSP, डिफ़ॉल्ट रूप से LLD का इस्तेमाल करने की प्रोसेस में है. NDK भी ऐसा ही करेगा. हालांकि, इसकी समयसीमा के बारे में पता नहीं है. लिंक करते समय
-fuse-ld=lld
पास करके, अपने ऐप्लिकेशन में एलएलडी की जांच करें. - gnustl, gabi++, और stlport को हटा दिया गया है.
- Android 4.0 (android-14 और android-15) के लिए, इस सुविधा को हटा दिया गया है. अब एक्ज़ीक्यूटेबल का इस्तेमाल करने वाले ऐप्लिकेशन को, पीआईई और नॉन-पीआईई, दोनों तरह के एक्ज़ीक्यूटेबल उपलब्ध कराने की ज़रूरत नहीं है.
- अगस्त 2019 से, Play Store पर APK अपलोड करते समय 64-बिट की सुविधा ज़रूरी होगी. अभी पोर्ट करना शुरू करें, ताकि समय आने पर आपको कोई परेशानी न हो. ज़्यादा जानकारी के लिए, यह ब्लॉग पोस्ट पढ़ें.
Android NDK r17c (जून 2018)
बदलाव की जानकारी- डाउनलोड
-
- इस रिलीज़ को डाउनलोड करने के लिए, यहां जाएं.
- सूचनाएं
-
- GCC अब काम नहीं करता. इसे NDK r18 में हटा दिया जाएगा.
-
libc++ अब CMake और स्टैंडअलोन टूलचेन के लिए डिफ़ॉल्ट एसटीएल है. अगर आपने मैन्युअल तरीके से कोई दूसरा एसटीएल चुना है, तो हमारा सुझाव है कि आप
libc++
पर स्विच करें. ध्यान दें कि ndk-build अब भी डिफ़ॉल्ट रूप से STL का इस्तेमाल नहीं करता है. ज़्यादा जानकारी के लिए, यह ब्लॉग पोस्ट पढ़ें. - gnustl और stlport के इस्तेमाल पर रोक लगा दी गई है. इन्हें NDK r18 में हटा दिया जाएगा.
- ARMv5 (armeabi), MIPS, और MIPS64 के लिए सहायता हटा दी गई है. इनमें से किसी भी एबीआई को बनाने की कोशिश करने पर, गड़बड़ी होगी.
- r18 से, ICS (android-14 और android-15) के लिए सहायता हटा दी जाएगी.
- अगस्त 2019 से, Play Store पर APK अपलोड करते समय 64-बिट की सुविधा ज़रूरी होगी. अभी पोर्ट करना शुरू करें, ताकि समय आने पर आपको कोई परेशानी न हो. ज़्यादा जानकारी के लिए, यह ब्लॉग पोस्ट पढ़ें.
Android NDK r16b (दिसंबर 2017)
बदलाव की जानकारी- डाउनलोड
- इस रिलीज़ को डाउनलोड करने के लिए, यहां जाएं.
- सूचनाएं
-
- इस्तेमाल बंद किए जा चुके हेडर हटा दिए गए हैं. यूनीफ़ाइड हेडर को अब सिर्फ़ "हेडर" कहा जाता है. माइग्रेशन से जुड़ी सलाह के लिए, यूनिफ़ाइड हेडर माइग्रेशन से जुड़े नोट देखें.
- GCC अब काम नहीं करता. इसे अभी NDK से नहीं हटाया जाएगा. हालांकि, अब इसे बैकपोर्ट नहीं किया जाएगा. इसे तब तक नहीं हटाया जा सकता, जब तक libc++ डिफ़ॉल्ट लाइब्रेरी के तौर पर इस्तेमाल करने के लिए पूरी तरह से तैयार नहीं हो जाती. ऐसा इसलिए, क्योंकि gnustl के कुछ हिस्से अब भी Clang के साथ काम नहीं करते. r18 में अन्य एसटीएल हटाए जाने पर, इसे भी हटा दिया जाएगा.
libc++
अब बीटा वर्शन में नहीं है. साथ ही, अब यह NDK में पसंदीदा एसटीएल है. r17 से, CMake और स्टैंडअलोन टूलचेन के लिएlibc++
डिफ़ॉल्ट STL है. अगर आपने मैन्युअल तरीके से कोई दूसरा एसटीएल चुना है, तो हमारा सुझाव है कि आपlibc++
पर माइग्रेट करें. ज़्यादा जानकारी के लिए, यह ब्लॉग पोस्ट देखें.- ARM5 (armeabi), MIPS, और MIPS64 के साथ काम करने की सुविधा अब उपलब्ध नहीं है. ये अब डिफ़ॉल्ट रूप से ndk-build के साथ नहीं बनाए जाएंगे. हालांकि, अगर इन्हें साफ़ तौर पर नाम दिया जाता है, तो इन्हें अब भी बनाया जा सकता है. साथ ही, इन्हें "all", "all32", और "all64" में शामिल किया जाएगा. r17 में, इन सभी के लिए सहायता हटा दी गई है. इनमें से किसी भी ABI को टारगेट करने पर, CMake और ndk-build, दोनों ही चेतावनी जारी करेंगे.
- API
-
Android 8.1 के लिए नेटिव एपीआई जोड़े गए. इन एपीआई के बारे में ज़्यादा जानने के लिए, नेटिव एपीआई की खास जानकारी देखें.
इस रिलीज़ में नया क्या है और क्या बदलाव हुए हैं, इस बारे में ज़्यादा जानने के लिए यह बदलाव लॉग देखें.
Android NDK r15c (जुलाई 2017)
बदलाव की जानकारी- डाउनलोड
- इस रिलीज़ को डाउनलोड करने के लिए, यहां जाएं.
- सूचनाएं
-
- यूनीफ़ाइड हेडर की सुविधा, डिफ़ॉल्ट रूप से चालू होती है. इन हेडर का इस्तेमाल करने का तरीका जानने के लिए, यूनीफ़ाइड हेडर लेख पढ़ें.
- GCC अब काम नहीं करता. इसे अब तक NDK से नहीं हटाया गया है. हालांकि, अब इसे बैकपोर्ट नहीं किया जा रहा है. इसे तब तक नहीं हटाया जा सकता, जब तक libc++ डिफ़ॉल्ट के तौर पर इस्तेमाल करने के लिए काफ़ी स्थिर न हो जाए. ऐसा इसलिए, क्योंकि gnustl के कुछ हिस्से अब भी Clang के साथ काम नहीं करते.
- Android 2.3 (
android-9
) अब काम नहीं करता. एनडीके में, टारगेट किए जाने वाले एपीआई का सबसे कम लेवल अब Android 4.0 (android-14
) है. अगर आपकाAPP_PLATFORM
,android-14
से कम पर सेट है, तोandroid-14
का इस्तेमाल किया जाएगा. - NDK में CMake अब x86 और x86-64 आर्किटेक्चर पर चलने के लिए, YASM में लिखे गए असेंबली कोड को बनाने की सुविधा देता है. ज़्यादा जानने के लिए, असेंबली कोड बनाना लेख पढ़ें.
ध्यान दें: जिन हेडर के इस्तेमाल पर पाबंदी लगा दी गई है उन्हें आने वाली रिलीज़ में हटा दिया जाएगा. अगर आपको इन हेडर से जुड़ी कोई समस्या आती है, तो कृपया गड़बड़ी की शिकायत करें.
डेटा को दूसरी जगह भेजने से जुड़ी सलाह के लिए, यूनीफ़ाइड हेडर के माइग्रेशन से जुड़ी जानकारी देखें.
- API
-
Android 8.0 के लिए नेटिव एपीआई जोड़े गए. इन एपीआई के बारे में ज़्यादा जानने के लिए, नेटिव एपीआई की खास जानकारी देखें.
इस रिलीज़ में नया क्या है और क्या बदलाव हुए हैं, इस बारे में ज़्यादा जानने के लिए यह बदलाव लॉग देखें.
Android NDK r14b (मार्च 2017)
बदलाव की जानकारी- डाउनलोड
- इस रिलीज़ को डाउनलोड करने के लिए, यहां जाएं.
- सूचनाएं
-
- यूनिफ़ाइड हेडर: इस रिलीज़ में प्लैटफ़ॉर्म हेडर पेश किए गए हैं. ये Android प्लैटफ़ॉर्म के साथ सिंक किए जाते हैं. साथ ही, इन्हें हमेशा अप-टू-डेट और सटीक रखा जाता है. सिर्फ़ हेडर से जुड़े बग ठीक करने की सुविधा अब सभी एपीआई लेवल पर काम करती है. यूनीफ़ाइड हेडर की मदद से, NDK की पिछली रिलीज़ में मौजूद गड़बड़ियों को ठीक किया गया है. जैसे:
- M और N में मौजूद हेडर, असल में L के हेडर थे.
- हेडर में फ़ंक्शन के एलान, उनके प्लैटफ़ॉर्म लेवल से सही तरीके से मेल नहीं खाते थे; हेडर में ऐसे फ़ंक्शन का एलान किया गया था जो मौजूद नहीं हैं या उपलब्ध फ़ंक्शन का एलान नहीं किया गया था.
- पुराने एपीआई लेवल में कई ऐसे कॉन्स्टेंट मौजूद नहीं थे या गलत थे जो नए एपीआई लेवल में मौजूद थे.
ये नए यूनीफ़ाइड हेडर, डिफ़ॉल्ट रूप से चालू नहीं होते. इन हेडर को चालू करने और इस्तेमाल करने का तरीका जानने के लिए, यूनीफ़ाइड हेडर लेख पढ़ें.
- GCC बंद होना: इस रिलीज़ के बाद, GCC के लिए सहायता उपलब्ध नहीं होगी. GCC को अभी NDK से नहीं हटाया गया है. हालांकि, अब इसे बैकपोर्ट नहीं किया जाएगा. gnustl के कुछ हिस्से अब भी Clang के साथ काम नहीं करते. इसलिए, GCC को तब तक पूरी तरह से नहीं हटाया जाएगा, जब तक libc++ डिफ़ॉल्ट तौर पर इस्तेमाल करने के लिए काफ़ी स्थिर नहीं हो जाता.
- यूनिफ़ाइड हेडर: इस रिलीज़ में प्लैटफ़ॉर्म हेडर पेश किए गए हैं. ये Android प्लैटफ़ॉर्म के साथ सिंक किए जाते हैं. साथ ही, इन्हें हमेशा अप-टू-डेट और सटीक रखा जाता है. सिर्फ़ हेडर से जुड़े बग ठीक करने की सुविधा अब सभी एपीआई लेवल पर काम करती है. यूनीफ़ाइड हेडर की मदद से, NDK की पिछली रिलीज़ में मौजूद गड़बड़ियों को ठीक किया गया है. जैसे:
इस रिलीज़ में नया क्या है और क्या बदलाव हुए हैं, इस बारे में ज़्यादा जानने के लिए यह बदलाव लॉग देखें.
Android NDK r13b (अक्टूबर 2016)
- डाउनलोड
- इस रिलीज़ के डाउनलोड यहां संग्रहित किए गए हैं.
- सूचनाएं
-
- GCC अब काम नहीं करता. इसे अभी NDK से नहीं हटाया जाएगा. हालांकि, अब इसे बैकपोर्ट नहीं किया जाएगा. इसे तब तक नहीं हटाया जा सकता, जब तक libc++ डिफ़ॉल्ट लाइब्रेरी के तौर पर इस्तेमाल करने के लिए काफ़ी स्थिर न हो जाए. ऐसा इसलिए, क्योंकि gnustl के कुछ हिस्से अब भी Clang के साथ काम नहीं करते. इसके बाद, इसे हटा दिया जाएगा.
- Android के लिए सीपीयू प्रोफ़ाइलर, simpleperf जोड़ा गया.
- r13b
-
-
__cxa_bad_cast
के न दिखने की समस्या को ठीक करने के लिएअन्य सुधार किए गए हैं.
-
- NDK
-
NDK_TOOLCHAIN_VERSION
अब डिफ़ॉल्ट रूप से Clang पर सेट है.- libc++ को r263688 पर अपडेट किया गया है.
- हमने अपस्ट्रीम को (लगभग) साफ़ कर दिया है. इससे कई बग ठीक हो जाएंगे. हालांकि, हम libandroid_support को डिफ़ॉल्ट के तौर पर इस्तेमाल करने का सुझाव देने से पहले, इसे ठीक करना चाहते हैं.
-
make-standalone-toolchain.sh
अब सिर्फ़ टूल के Python वर्शन का रैपर है. इनके व्यवहार में कुछ अंतर हैं. ज़्यादा जानकारी के लिए, कमिट मैसेज देखें. - जिन एबीआइ के लिए सहायता उपलब्ध नहीं है उनसे जुड़ी कुछ लाइब्रेरी हटा दी गई हैं (mips64r2, mips32r6, mips32r2, और x32). ऐसा हो सकता है कि कुछ लोग अब भी इस सुविधा का इस्तेमाल कर रहे हों.
- crtbegin_static.o से जुड़ी समस्याओं को ठीक किया गया है. इनकी वजह से, ARM android-21+ के लिए स्टैटिक एक्ज़ीक्यूटेबल बनाते समय लिंक करने के समय atexit मौजूद नहीं था: समस्या 132
- build/cmake/android.toolchain.cmake में CMake टूलचेन फ़ाइल जोड़ी गई.
- आम समस्याएं
-
- इस सूची में, सभी बग शामिल नहीं हैं.
- libc++ और GCC का इस्तेमाल करने वाली स्टैंडअलोन टूलचेन काम नहीं करती हैं. ऐसा लगता है कि यह GCC में मौजूद कोई बग है. ज़्यादा जानकारी के लिए, कमिट मैसेज देखें.
- android-24 मौजूद होने के बावजूद, Marshmallow और N के लिए Bionic हेडर और लाइब्रेरी अब तक उपलब्ध नहीं कराई गई हैं. ये प्लैटफ़ॉर्म अब भी लॉलीपॉप हेडर और लाइब्रेरी हैं. यह r11 से कोई रिग्रेशन नहीं है.
- RenderScript टूल मौजूद नहीं हैं (r11 से कोई रिग्रेशन नहीं): Issue 7.
Android NDK r12b (जून 2016)
- डाउनलोड
- इस रिलीज़ के डाउनलोड यहां संग्रहित किए गए हैं.
- सूचनाएं
- r13 में,
ndk-build
कमांड डिफ़ॉल्ट रूप से Clang का इस्तेमाल करती है. हम आने वाले समय में GCC को हटा देंगे. make-standalone-toolchain.sh
स्क्रिप्ट को r13 में हटा दिया जाएगा. पक्का करें किmake_standalone_toolchain.py
आपकी ज़रूरतों के मुताबिक हो.- GitHub पर समस्याओं की शिकायत करें.
- हमने
ndk-gdb.py
की समस्या ठीक कर दी है. (समस्या 118) -
हमने
NdkCameraMetadataTags.h
एट्रिब्यूट की वैल्यू को अपडेट कर दिया है, ताकि इसमें अब अमान्य एनम वैल्यू शामिल न हो. - ndk-build में मौजूद एक गड़बड़ी को ठीक कर दिया गया है. इस गड़बड़ी की वजह से, libc++ का इस्तेमाल करने वाली स्टैटिक लाइब्रेरी के लिए फ़र्ज़ी चेतावनियां मिलती थीं. इस बदलाव के बारे में ज़्यादा जानकारी के लिए, यहां दिए गए सुझाव देखें.
- android-24 के लिए OpenSLES हेडर अपडेट कर दिए गए हैं.
- NDK
- हमने armeabi-v7a-hard ABI के लिए सहायता बंद कर दी है. ज़्यादा जानकारी के लिए, यह जानकारी देखें.
- GB से पहले के प्लैटफ़ॉर्म लेवल के लिए, सभी sysroot हटा दिए गए हैं. हमने r11 में इनके लिए सहायता बंद कर दी थी, लेकिन इन्हें हटाना भूल गए.
- ARM32 पर c++_shared का इस्तेमाल करते समय, अपवादों को मैनेज करने की सुविधा अब ज़्यादातर काम करती है. अब अनवाइंडर को libc++ में लिंक करने के बजाय, हर लिंक किए गए ऑब्जेक्ट में लिंक किया जाएगा. अपवाद को मैनेज करने के बारे में ज़्यादा जानने के लिए, ज्ञात समस्याएं देखें.
- डिफ़ॉल्ट कंपाइलर फ़्लैग हटा दिए गए हैं.
(अंक 27).
- इन बदलावों के बारे में पूरी जानकारी पाने के लिए, बदलावों की यह सूची देखें.
- स्टैंडअलोन टूलचेन के लिए, Python का इस्तेमाल करने की सुविधा जोड़ी गई:
build/tools/make_standalone_toolchain.py
.- Windows का इस्तेमाल करने वाले लोगों को अब इस सुविधा का इस्तेमाल करने के लिए, Cygwin की ज़रूरत नहीं है.
- हम r13 में बैश फ़्लेवर को हटा देंगे. इसलिए, अभी नया फ़्लेवर आज़माएं.
- Clang की डीबग बिल्ड के लिए,
-fno-limit-debug-info
को डिफ़ॉल्ट रूप से चालू कर दिया गया है. इस बदलाव से, LLDB के साथ डीबग करने की सुविधा बेहतर होगी. --build-id
अब डिफ़ॉल्ट रूप से चालू है.- अब नेटिव क्रैश रिपोर्ट में बिल्ड आईडी दिखेगा, ताकि आपको आसानी से यह पता चल सके कि आपके कोड का कौनसा वर्शन चल रहा था.
NDK_USE_CYGPATH
की वजह से, अब libgcc में समस्याएं नहीं होनी चाहिए. (Android Issue 195486)-Wl
,--warn-shared-textrel
, और-Wl,--fatal-warnings
विकल्प अब डिफ़ॉल्ट रूप से चालू हैं. अगर आपने टेक्स्ट रिलोकेशन शेयर किए हैं, तो आपका ऐप्लिकेशन Android 6.0 (एपीआई लेवल 23) या उसके बाद के वर्शन पर लोड नहीं हो सकता. टेक्स्ट रिलोकेशन की सुविधा, 64-बिट वाले ऐप्लिकेशन के लिए कभी भी उपलब्ध नहीं थी.- प्रीकंपाइल किए गए हेडर बेहतर तरीके से काम करने चाहिए. (समस्या 14 और समस्या 16)
- उन ARM (नॉन-थंब) STL लाइब्रेरी को हटा दिया गया है जिन्हें ऐक्सेस नहीं किया जा सकता.
- Android-24 में Vulkan का इस्तेमाल किया जा सकता है.
- Android-24 में Choreographer API जोड़ा गया.
libcamera2
या इसके बाद के वर्शन वाले डिवाइसों के लिए,libcamera2
एपीआई जोड़े गए.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
ज़्यादा जानकारी के लिए, कैमरे की विशेषताएं देखें.- Clang
- Clang को 3.8svn (r256229, build 2812033) पर अपडेट किया गया है.
- 32-बिट वाले Windows पैकेज में मौजूद
clang.exe
औरclang++.exe
एक्ज़ीक्यूटेबल फ़ाइलें, असल में 64-बिट वाली हैं. 32-बिट एक्ज़ीक्यूटेबल का नामclang_32.exe
है.
- 32-बिट वाले Windows पैकेज में मौजूद
- GCC
- ChromeOS GCC @ google/gcc-4_9 r227810 के साथ सिंक किया गया.
- ToT (r231296) से, कवरेज सैनिटाइज़र पैच को वापस पोर्ट किया गया.
- libatomic को ठीक किया गया है, ताकि वह
ifuncs
का इस्तेमाल न करे. (अंक 31) - Binutils
- “गड़बड़ी 843419 मिली और ठीक कर दी गई” सूचना वाले मैसेज को साइलेंट किया गया.
- बड़ी arm32 बाइनरी लिंक करते समय, लिंक करने वाले टूल में होने वाली अंदरूनी गड़बड़ी को ठीक करने के लिए,
--long-plt
विकल्प जोड़ा गया. - AArch64 के लिए, गलत रन टाइम स्टब ठीक किए गए. इस वजह से, बहुत बड़े डीएसओ के लिए जंप पतों की गिनती गलत तरीके से की जा रही थी.
- Android के पुराने वर्शन के लिए, डाइनैमिक लिंकर की गड़बड़ी को ठीक करने के लिए, डिफ़ॉल्ट विकल्प
--no-apply-dynamic
जोड़ा गया. dynamic_cast
के लिए NDK r11 KI, Clang के साथ काम नहीं करता. हमने x86,stlport_static
, और ऑप्टिमाइज़ेशन से जुड़ी समस्या ठीक कर दी है.- GDB
- GDB 7.11 पर अपडेट किया गया. ज़्यादा जानकारी के लिए, GDB News पेज देखें.
ndk-gdb.py
से जुड़ी कुछ गड़बड़ियां ठीक की गईं.- आम समस्याएं
- x86 ASAN अब भी काम नहीं करता. ज़्यादा जानकारी के लिए, इस बदलाव की सूची पर हुई चर्चा देखें.
- Android 2.3 (एपीआई लेवल 9) या Android 4.0 (एपीआई लेवल 14) पर, ARM के लिए
c++_shared
के साथ अपवाद को हटाने की सुविधा अब भी काम नहीं करती. - Android 6.0 (एपीआई लेवल 23) और Android 7.0 (एपीआई लेवल 24) के लिए Bionic हेडर और लाइब्रेरी अभी तक उपलब्ध नहीं हैं. हालांकि, android-24 मौजूद है. ये प्लैटफ़ॉर्म अब भी Android 5.0 (एपीआई लेवल 21) के हेडर और लाइब्रेरी हैं (r11 से कोई रिग्रेशन नहीं).
- RenderScript टूल मौजूद नहीं हैं (r11 से कोई रिग्रेशन नहीं). (समस्या 7)
- इस बदलाव की जानकारी में, सभी समस्याओं की पूरी सूची शामिल नहीं है.
__thread
को इस बार वाकई काम करना चाहिए.
Android NDK r12 (जून 2016)
- डाउनलोड
- इस रिलीज़ के डाउनलोड यहां संग्रहित किए गए हैं.
- सूचनाएं
- आने वाले समय में रिलीज़ होने वाले नए वर्शन में,
ndk-build
कमांड डिफ़ॉल्ट रूप से Clang का इस्तेमाल करेगी. GCC को बाद में आने वाले वर्शन में हटा दिया जाएगा. - आने वाली रिलीज़ में,
make-standalone-toolchain.sh
स्क्रिप्ट को हटा दिया जाएगा. अगर इस स्क्रिप्ट का इस्तेमाल किया जा रहा है, तो कृपया जल्द से जल्दmake_standalone_toolchain.py
पर माइग्रेट करें. - NDK
- armeabi-v7a-hard ABI के लिए काम नहीं करता. इस बारे में जानकारी पाने के लिए, दस्तावेज़ देखें.
- Android 2.3 (एपीआई लेवल 9) से पहले के प्लैटफ़ॉर्म लेवल के लिए, सभी sysroot हटा दिए गए हैं. हमने NDK r11 में इनके लिए सहायता बंद कर दी थी, लेकिन इन्हें हटाया नहीं गया था.
- ARM32 पर c++_shared का इस्तेमाल करते समय, अपवाद हैंडलिंग को अपडेट किया गया है, ताकि यह ज़्यादातर काम करे. इसके बारे में जानने के लिए, ज्ञात समस्याएं देखें. अनवाइंडर को अब libc++ में लिंक करने के बजाय, हर लिंक किए गए ऑब्जेक्ट में लिंक किया जाता है.
- डिफ़ॉल्ट कंपाइलर फ़्लैग हटा दिए गए हैं (NDK Issue 27). इस अपडेट की जानकारी बदलाव 207721 में देखी जा सकती है.
build/tools/make_standalone_toolchain.py
में, स्टैंडअलोन टूलचेन के Python वर्शन को जोड़ा गया. Windows पर, इस सुविधा का इस्तेमाल करने के लिए अब Cygwin की ज़रूरत नहीं है. ध्यान दें कि आने वाली रिलीज़ में बैश फ़्लेवर को हटा दिया जाएगा. इसलिए, कृपया अभी नए फ़्लेवर को आज़माएं.- Clang की डिबग बिल्ड को कॉन्फ़िगर किया गया है, ताकि
-fno-limit-debug-info
विकल्प डिफ़ॉल्ट रूप से चालू हो. इस बदलाव से, LLDB की मदद से बेहतर डीबग करने में मदद मिलती है. --build-id
को डिफ़ॉल्ट विकल्प के तौर पर चालू किया गया हो. इस विकल्प से, नेटिव क्रैश रिपोर्ट में एक आइडेंटिफ़ायर दिखता है. इससे आपको यह पता चलता है कि आपके कोड का कौनसा वर्शन चल रहा था.NDK_USE_CYGPATH
से जुड़ी समस्या को ठीक किया गया है, ताकि अब libgcc से जुड़ी समस्याएं न हों (समस्या 195486).- डिफ़ॉल्ट रूप से, ये विकल्प चालू किए गए हैं:
-Wl,--warn-shared-textrel
और-Wl,--fatal-warnings
. अगर आपने टेक्स्ट रिलोकेशन शेयर किए हैं, तो आपका ऐप्लिकेशन Android 6.0 (एपीआई लेवल 23) और इसके बाद के वर्शन पर लोड नहीं होगा. ध्यान दें कि इस कॉन्फ़िगरेशन को 64-बिट वाले ऐप्लिकेशन के लिए कभी भी अनुमति नहीं दी गई है. - कुछ समस्याएं ठीक की गई हैं, ताकि प्रीकंपाइल किए गए हेडर बेहतर तरीके से काम कर सकें (एनडीके की समस्या 14, एनडीके की समस्या 16).
- उन ARM (नॉन-थंब) STL लाइब्रेरी को हटा दिया गया है जिन्हें ऐक्सेस नहीं किया जा सकता.
- Android-24 में Vulkan का इस्तेमाल किया जा सकता है.
- Android-24 में Choreographer API जोड़ा गया.
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
सुविधा के लेवल या इससे नए लेवल के साथ काम करने वाले डिवाइसों के लिए, libcamera2 एपीआई जोड़े गए. ज़्यादा जानकारी के लिए,CameraCharacteristics
रेफ़रंस देखें.- Clang
- Clang को 3.8svn (r256229, build 2812033) पर अपडेट किया गया है. 32-बिट Windows पैकेज में मौजूद
clang.exe
औरclang++.exe
एक्ज़ीक्यूटेबल फ़ाइलें, असल में 64-बिट की हैं. 32-बिट एक्ज़ीक्यूटेबल का नामclang_32.exe
है. __thread
को ठीक किया गया है, ताकि इस बार यह वाकई काम करे.- GCC
- कंपाइलर को ChromeOS GCC @ google/gcc-4_9 r227810 के साथ सिंक किया गया.
- ToT (r231296) से, कवरेज सैनिटाइज़र पैच को वापस पोर्ट किया गया.
- ifuncs का इस्तेमाल न करने के लिए,
libatomic
को ठीक किया गया (NDK Issue 31). - Binutils
- "गड़बड़ी 843419 का पता चला और उसे ठीक कर दिया गया" जानकारी वाले मैसेज की आवाज़ बंद कर दी गई है.
- arm32 बाइनरी को लिंक करते समय, लिंक करने वाले टूल से जुड़ी अंदरूनी गड़बड़ी को ठीक करने के लिए,
--long-plt
विकल्प जोड़ा गया. AArch64
के लिए गलत रन टाइम स्टब ठीक किए गए. इस समस्या की वजह से, बहुत बड़े डाइनैमिक शेयर किए गए ऑब्जेक्ट (डीएसओ) के लिए, जंप पतों का हिसाब गलत तरीके से लगाया जा रहा था.- Android के पुराने वर्शन के लिए, डाइनैमिक लिंकर से जुड़ी गड़बड़ी को ठीक करने के लिए, डिफ़ॉल्ट विकल्प
--no-apply-dynamic
जोड़ा गया. - NDK r11 में मौजूद एक जानी-पहचानी समस्या को ठीक किया गया है. इस समस्या में, Clang, x86, stlport_static, और ऑप्टिमाइज़ेशन के साथ
dynamic_cast
काम नहीं कर रहा था. - GDB
- GDB को 7.11 वर्शन पर अपडेट किया गया. इस रिलीज़ के बारे में ज़्यादा जानकारी के लिए, GDB News देखें.
ndk-gdb.py
स्क्रिप्ट में मौजूद कई गड़बड़ियों को ठीक किया गया है.- आम समस्याएं
- फ़िलहाल, x86 Address Sanitizer (ASAN) काम नहीं करता. ज़्यादा जानकारी के लिए, समस्या 186276 देखें.
c++_shared
के साथ एक्सेप्शन अनवाइंडिंग, Android 2.3 (एपीआई लेवल 9) या Android 4.0 (एपीआई लेवल 14) पर ARM के लिए काम नहीं करती.- Android 6.0 (एपीआई लेवल 23) और इसके बाद के वर्शन के लिए, Bionic हेडर और लाइब्रेरी अब तक उपलब्ध नहीं कराई गई हैं. भले ही, android-24 मौजूद हो. उन प्लैटफ़ॉर्म में अब भी Android 5.0 (एपीआई लेवल 21) के हेडर और लाइब्रेरी हैं. यह NDK r11 के साथ काम करता है.
- RenderScript टूल मौजूद नहीं हैं, जो NDK r11 के साथ काम करते हैं. (NDK Issue 7)
NdkCameraMetadataTags.h
हेडर फ़ाइल में, कैमरा मेटाडेटा टैग की एनम वैल्यूACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP
गलती से शामिल हो गई थी. इसे अगले रिलीज़ में हटा दिया जाएगा. इसके बजाय,ACAMERA_STATISTICS_LENS_SHADING_MAP
वैल्यू का इस्तेमाल करें.
Android NDK r11c (मार्च 2016)
- बदलाव
ndk-gdb.py
स्क्रिप्ट में कुछ और सुधार किए गए हैं.ndk-gdb
कमांड के--attach
विकल्प में, पैकेज के नाम का आर्ग्युमेंट जोड़ा गया है. हालांकि, ऐसा करना ज़रूरी नहीं है. (समस्या 13)- Windows के 32-बिट प्लैटफ़ॉर्म के लिए, टूलचेन के अमान्य पाथ की समस्या ठीक की गई है. (अंक 45)
ndk-which
कमांड के लिए, रिलेटिव पाथ की समस्या ठीक की गई. (समस्या 29)- libgcc कंपाइलर के लिए cygpath का इस्तेमाल करने की समस्या ठीक की गई. (Android Issue 195486)
Android NDK r11b (मार्च 2016)
- NDK
-
- अहम सूचनाएं
- हमने बग ट्रैकर को GitHub पर ट्रांसफ़र कर दिया है.
- बदलाव
ndk-gdb.py
को ठीक कर दिया गया है. r11 में यह समस्या पूरी तरह से खत्म हो गई थी.- Mac के लिए
ndk-gdb
को ठीक कर दिया गया है. - कमांड लाइन टूल के लिए, ज़्यादा टॉप-लेवल शॉर्टकट जोड़े गए हैं:
ndk-depends
.ndk-gdb
.ndk-stack
.ndk-which
. यह कमांड पिछली रिलीज़ में मौजूद नहीं थी.
- libc++ के लिए स्टैंडअलोन टूलचेन को ठीक किया गया. ये टूलचेन मौजूद नहीं थे
__cxxabi_config.h
. make-standalone-toolchain.sh
में--toolchain
के लिए सहायता दस्तावेज़ से जुड़ी समस्या ठीक की गई.
- अहम सूचनाएं
- Clang
-
- अशुद्धियों को ठीक करना
- हमने r11 के रिलीज़ नोट में बताया था कि
__thread
काम करता है. हालांकि, ऐसा नहीं है. ऐसा इसलिए है, क्योंकि Clang के जिस वर्शन को हम शिप करते हैं उसमें, एम्युलेट किए गए टीएलएस सपोर्ट के लिए गड़बड़ी को ठीक करने वाला फ़ीचर मौजूद नहीं है.
Android NDK r11 (मार्च 2016)
- Clang
-
- अहम सूचनाएं
- हमारा सुझाव है कि आप Clang पर स्विच करें.
- Clang को 3.8svn (r243773, build 2481030) पर अपडेट किया गया है.
- यह वर्शन, अपस्ट्रीम Clang का लगभग पूरी तरह से बना है.
- Windows के 64-बिट वर्शन के लिए डाउनलोड किए जा सकने वाले NDK पैकेज में, Clang का 32-बिट वर्शन होता है.
- जोड़ी गई जानकारी
- Clang अब इम्यूलेट किए गए टीएलएस के साथ काम करता है.
- अब कंपाइलर, pthread थ्रेड-स्पेसिफ़िक डेटा के साथ ईएलएफ़ टीएलएस का इस्तेमाल करके,
__thread
के साथ काम करता है. - C++11
thread_local
कुछ मामलों में काम करता है, लेकिन डेटा के लिए नहीं, क्योंकि उन मामलों में libc से मदद की ज़रूरत होती है. यह सीमा, Android 6.0 (एपीआई लेवल 23) या उसके बाद के वर्शन पर लागू नहीं होती. - शेयर की गई लाइब्रेरी से टीएलएस वैरिएबल ऐक्सेस किए जाने पर, एमुलेट किए गए टीएलएस का इस्तेमाल अब तक Aarch64 के साथ नहीं किया जा सकता.
- अब कंपाइलर, pthread थ्रेड-स्पेसिफ़िक डेटा के साथ ईएलएफ़ टीएलएस का इस्तेमाल करके,
- Clang अब इम्यूलेट किए गए टीएलएस के साथ काम करता है.
- अहम सूचनाएं
- GCC
-
- अहम सूचनाएं
- NDK में GCC का इस्तेमाल अब बंद कर दिया गया है. अब Clang का इस्तेमाल किया जाता है.
- एनडीके को 5.x वर्शन में अपग्रेड नहीं किया जाएगा. साथ ही, इसमें ग़ैर-ज़रूरी बैकपोर्ट स्वीकार नहीं किए जाएंगे.
- 4.9 में गलत कंपाइलिंग और कंपाइलर से जुड़ी अंदरूनी गड़बड़ियों को ठीक करने का काम, हर मामले के हिसाब से किया जाएगा.
- कॉन्टेंट हटाना
- GCC 4.8 को हटा दिया गया है. अब सभी टारगेट, GCC 4.9 का इस्तेमाल करते हैं.
- अन्य बदलाव
- google/gcc-4_9 को r224707 के साथ सिंक किया गया. इससे पहले, इसे r214835 के साथ सिंक किया गया था.
- NDK
-
- अहम सूचनाएं
- सैंपल अब NDK पैकेज में शामिल नहीं हैं. इसके बजाय, ये GitHub पर उपलब्ध हैं.
- दस्तावेज़ अब NDK पैकेज में शामिल नहीं है. इसके बजाय, यह Android डेवलपर वेबसाइट पर मौजूद है.
- जोड़ी गई जानकारी
android-23
में नेटिव ट्रेसिंग एपीआई जोड़ा गया.android-23
में नेटिव मल्टीनेटवर्क एपीआई जोड़ा गया.- libc, m, और dl को चालू किया गया है, ताकि वर्शन वाले सिंबल उपलब्ध कराए जा सकें. यह सुविधा, एपीआई लेवल 21 से शुरू होती है.
- एपीआई लेवल N में Vulkan हेडर और लाइब्रेरी जोड़ी गई.
- कॉन्टेंट हटाना
_WCHAR_IS_8BIT
के लिए सहायता सेवा बंद कर दी गई है.- sed को हटाया गया.
- mclinker को हटा दिया गया है.
- Perl को हटा दिया गया है.
- NDK libc, m, और dl के सभी वर्शन से उन सभी सिंबल को हटा दिया गया है जिन्हें प्लैटफ़ॉर्म के उन लाइब्रेरी वर्शन पर इस्तेमाल नहीं किया जा सकता.
- mips64r2 के लिए, सहायता को आंशिक रूप से हटा दिया गया है. आने वाले समय में, बाकी सभी को हटा दिया जाएगा.
- अन्य बदलाव
- ARM के स्टैंडअलोन टूलचेन को arm7 पर डिफ़ॉल्ट रूप से सेट किया गया.
-target
विकल्प कोarmv5te-linux-androideabi
के तौर पर सेट करके, पुराने तरीके को वापस लाया जा सकता है.
- प्लैटफ़ॉर्म शामिल करने के लिए, बिल्ड सिस्टम को बदलकर
-isystem
का इस्तेमाल किया गया.- ऐसी चेतावनियां जिनमें बताया गया है कि बायोनिक की वजह से, अब ऐप्लिकेशन बिल्ड नहीं टूटते.
- उस सेगमेंटेशन फ़ॉल्ट को ठीक किया गया है जो gabi++ के ज़रिए बाइनरी के अपवादों को थ्रो करने पर होता था. (समस्या 179410)
- libc++ के इनलाइन नेमस्पेस को
std::__ndk1
में बदल दिया गया है, ताकि प्लैटफ़ॉर्म libc++ के साथ ओडीआर से जुड़ी समस्याओं को रोका जा सके. - अब सभी libc++ लाइब्रेरी, libc++abi के साथ बनाई जाती हैं.
- डिफ़ॉल्ट
APP_PLATFORM
को Gingerbread पर ले जाया गया.- आने वाले समय में, Froyo और इससे पुराने वर्शन के लिए, इस सुविधा को बंद कर दिया जाएगा.
- ARM के स्टैंडअलोन टूलचेन को arm7 पर डिफ़ॉल्ट रूप से सेट किया गया.
- 64 बिट के लिए, अपडेट किया गया gabi++
_Unwind_Exception
स्ट्रक्चर. - cpufeatures में ये नई सुविधाएं जोड़ी गई हैं:
- SSE4.1 और SSE4.2 का पता लगाएं.
- x86_64 पर सीपीयू की सुविधाओं का पता लगाएं.
- libc++abi को अपस्ट्रीम r231075 पर अपडेट किया गया.
- ToT Bionic ने
byteswap.h
,endian.h
,sys/procfs.h
,sys/ucontext.h
,sys/user.h
, औरuchar.h
को अपडेट किया है. - सभी एपीआई लेवल पर
sys/cdefs.h
सिंक किया गया. - बांह के लिए
fegetenv and fesetenv
को ठीक किया गया. - mips64
और x86_64 के लिए,
crtend_*
के एंड पॉइंटर के साइज़/अलाइनमेंट को ठीक करें.
- अहम सूचनाएं
- Binutils
-
- जोड़ी गई जानकारी
- एक नया विकल्प जोड़ा गया है:
--pic-veneer
.
- एक नया विकल्प जोड़ा गया है:
- कॉन्टेंट हटाना
- 32-बिट Windows पैकेज में अब ld.gold शामिल नहीं है. इसके बजाय, 64-बिट वाले Windows पैकेज से ld.gold फ़ाइल पाई जा सकती है.
- बदलाव
- Android और ChromiumOS के बीच, binutils का यूनीफ़ाइड सोर्स. इस बदलाव के बारे में ज़्यादा जानने के लिए, यहां दिए गए सुझाव देखें.
- aarch64 के लिए, Gold की विश्वसनीयता को बेहतर बनाया गया है. लिंक करते समय, bfd के बजाय gold का इस्तेमाल करने के लिए
-fuse-ld=gold
का इस्तेमाल करें. अगली रिलीज़ में, डिफ़ॉल्ट सेटिंग बदल जाएगी. - Gold ARM बैक एंड के लिए, बड़े बाइनरी को लिंक करने में लगने वाला समय कम किया गया है (डीबग किए जा सकने वाले Chrome ब्राउज़र के लिए, लिंक करने में लगने वाला समय 50% तक कम किया गया है).
- जोड़ी गई जानकारी
- GDB
-
- कॉन्टेंट हटाना
- ndk-gdb को ndk-gdb.py के पक्ष में हटा दिया गया है.
- बदलाव
- gdb को 7.10 वर्शन में अपडेट किया गया.
- बेहतर परफ़ॉर्मेंस.
- गड़बड़ी के मैसेज को बेहतर बनाया गया है.
- प्रोजेक्ट के रिलेटिव पाथ की समस्या ठीक की गई.
- Ctrl-C दबाने पर, बैकग्राउंड में चल रहे gdbserver को बंद होने से रोका गया.
- Windows के लिए बेहतर सहायता.
- कॉन्टेंट हटाना
- YASM
-
- बदलाव
- YASM को 1.3.0 वर्शन पर अपडेट किया गया.
- बदलाव
- पहले से मालूम समस्याएं
-
- फ़िलहाल, x86 ASAN काम नहीं करता. ज़्यादा जानकारी के लिए, यहां दी गई चर्चा पढ़ें.
- Clang, x86, stlport_static, और
-O0
से ज़्यादा ऑप्टिमाइज़ेशन लेवल का कॉम्बिनेशन इस्तेमाल करने पर,dynamic_cast
के साथ टेस्ट फ़ेल हो जाते हैं. ज़्यादा जानकारी के लिए, टिप्पणियां यहां देखें. - ARM32 पर c++_shared के साथ, अक्सर अपवाद हैंडलिंग काम नहीं करती. इस समस्या की मुख्य वजह यह है कि libc++abi, ARM32 के लिए LLVM unwinder का इस्तेमाल करता है और libgcc के साथ काम नहीं करता. यह व्यवहार r10e से अलग नहीं है.
Android NDK r10e (मई 2015)
- डाउनलोड
- इस रिलीज़ के डाउनलोड यहां संग्रहित किए गए हैं.
- अहम बदलाव:
-
- Cortex-A53 Erratum 843419 के लिए, वर्कअराउंड को
aarch64-linux-android-4.9
लिंकर में इंटिग्रेट किया गया है. इस समस्या को हल करने के तरीके के बारे में ज़्यादा जानने के लिए, Cortex-A53 के erratum 843419 को हल करने का तरीका देखें. - Clang 3.6 जोड़ा गया;
NDK_TOOLCHAIN_VERSION=clang
अब Clang के उस वर्शन को डिफ़ॉल्ट रूप से चुनता है. - Clang 3.4 को हटा दिया गया है.
- GCC 4.6 को हटा दिया गया है.
- सभी आर्किटेक्चर के लिए,
ld.gold
में मल्टीथ्रेडिंग की सुविधा लागू की गई है. अब इसे मल्टीथ्रेडिंग की सुविधा के साथ या इसके बिना लिंक किया जा सकता है. डिफ़ॉल्ट रूप से, इसे मल्टीथ्रेडिंग की सुविधा के बिना लिंक किया जाता है.- मल्टीथ्रेडिंग के साथ कंपाइल करने के लिए,
--threads
विकल्प का इस्तेमाल करें. - मल्टीथ्रेडिंग के बिना कंपाइल करने के लिए,
--no-threads
विकल्प का इस्तेमाल करें.
- मल्टीथ्रेडिंग के साथ कंपाइल करने के लिए,
- सभी आर्किटेक्चर के लिए, GDB/gdbserver को 7.7 पर अपग्रेड किया गया.
- 32-बिट Darwin के लिए NDK पैकेज हटा दिया गया है.
- Cortex-A53 Erratum 843419 के लिए, वर्कअराउंड को
- गड़बड़ियां ठीक की गई हैं:
-
- मुख्य थ्रेड के बाहर OpenMP लूप होने पर, क्रैश होने की समस्या को ठीक किया गया है.
- GCC 4.9 की इंटरनल कंपाइलर गड़बड़ी (ICE) को ठीक किया गया है. यह गड़बड़ी तब होती थी, जब उपयोगकर्ता ने
#pragma GCC optimize ("O0")
का एलान किया हो, लेकिन कमांड लाइन पर ऑप्टिमाइज़ेशन का अलग लेवल तय किया हो.pragma
को प्राथमिकता दी जाती है. - उस गड़बड़ी को ठीक किया गया है जिसकी वजह से यह गड़बड़ी का मैसेज दिखता था और ऐप्लिकेशन क्रैश हो जाता था:
in add_stores, at var-tracking.c:6000
- Clang 3.5 की समस्या को हल करने के लिए एक तरीका लागू किया गया है. इस समस्या में LLVM ऑटो-वेक्टराइज़ेशन,
llvm.cttz.v2i64()
जनरेट करता है. यह एक ऐसा निर्देश है जिसका ARM इंस्ट्रक्शन सेट में कोई काउंटरपार्ट नहीं है.
- अन्य गड़बड़ियां ठीक की गईं:
-
- हेडर और लाइब्रेरी से जुड़ी इन समस्याओं को ठीक किया गया है:
media/NdkMediaDrm.h
मेंPROPERTY_*
ठीक किया गया.mips64
के लिएsys/ucontext.h
तय की गई है.__builtin_isnan
और__builtin_isinf
के लिए, Clang वर्शन की जांच करने की सुविधा बंद कर दी गई है.android-21/arch-mips/usr/include/asm/reg.h
औरandroid-21/arch-mips64/usr/include/asm/reg.h
को जोड़ा गया.- हमने x86 के लिए, GCC 4.9 से मिलने वाली फ़र्ज़ी ऐरे-बाउंड चेतावनी को ठीक कर दिया है. साथ ही, हमने ARM के लिए GCC 4.9 से मिलने वाली ऐरे बाउंड चेतावनी को फिर से चालू कर दिया है. ARM के लिए चेतावनी की सुविधा को पहले बिना किसी शर्त के बंद कर दिया गया था.
mips
औरmips64
के लिए Clang 3.5 को ठीक किया गया है, ताकि लिखने लायक.gcc_except_table
सेक्शन बनाया जा सके. इस तरह, GCC के व्यवहार से मेल खाया जा सकता है. इस बदलाव से, आपको लिंक करने से जुड़ी यह चेतावनी नहीं दिखेगी:.../ld: warning: creating a DT_TEXTREL in a shared object
compiler-rt
से जुड़ी समस्याओं को ठीक करने के लिए, बैकपोर्ट किया गया है. इन समस्याओं की वजह से, Clang कोmips64
के लिए कंपाइल करते समय क्रैश हो रहा था. ज़्यादा जानकारी के लिए, LLVM की समस्या 20098 देखें.- Clang 3.5 के क्रैश होने की समस्या को ठीक किया गया है. यह समस्या, ASCII के बाहर के वर्णों वाली टिप्पणियों की वजह से होती थी. (समस्या 81440)
-1
और1
को वापस लाने के लिए,stlport collate::compare
को ठीक किया गया. इससे पहले, यह फ़ंक्शन कोई भी साइन की गई संख्या दिखाता था.- 64-बिट वाले एबीआई के लिए,
ndk-gdb
को ठीक किया गया. (समस्या 118300) - Android 4.4 (Android API लेवल 19) पर, RenderScript के लिए HelloComputeNDK सैंपल के क्रैश होने की समस्या को ठीक किया गया है. ज़्यादा जानकारी के लिए, यह पेज देखें.
- GCC के लिए
libc++ __wrap_iter
को ठीक किया गया. ज़्यादा जानकारी के लिए, LLVM की समस्या 22355 देखें. - एबीआई
x86_64
के लिए,.asm
की सुविधा काम न करने की समस्या ठीक की गई. - GCC 4.8
stlport
समस्या को हल करने के लिए, एक तरीका लागू किया गया. (समस्या 127773) - Windows में, प्रोजेक्ट के पाथ से ट्रेलिंग डायरेक्ट्री सेपरेटर
\\
को हटाया गया. (समस्या 160584) no rule to make target
की उस गड़बड़ी को ठीक किया गया है जोgradle
सेndk-build.cmd
कमांड को लागू करके, किसी एक.c
फ़ाइल को कंपाइल करते समय होती थी. (Issue 66937)libatomic.a
औरlibgomp.a
लाइब्रेरी जोड़ी गई हैं. ये लाइब्रेरी, होस्ट टूलचेन में मौजूद नहीं थीं:aarch64-linux-android-4.9
mips64el-linux-android-4.9
mipsel-linux-android-4.9
x86_64-4.9
- अन्य बदलाव:
-
aarch64
के लिएld.gold
को जोड़ा गया. डिफ़ॉल्ट लिंकरld.bfd
ही रहेगा.ld.gold
को साफ़ तौर पर चालू करने के लिए,LOCAL_LDFLAGS
याAPP_LDFLAGS
वैरिएबल में-fuse-ld=gold
जोड़ें.- MIPS और MIPS64 टूलचेन को
binutils-2.25
की मदद से बनाया गया है. इससे R6 के लिए बेहतर सपोर्ट मिलता है. - Clang के लिए,
-fstandalone-debug
(डीबग की पूरी जानकारी) को डिफ़ॉल्ट विकल्प के तौर पर सेट किया गया है. - GCC 4.9, Clang 3.5, और Clang 3.6 के लिए, ARM, AArch64, X86, और X86_64 टूलचेन के लिए
-fstack-protector
को-fstack-protector-strong
से बदल दिया गया है. ndk-gdb
में--package
कमांड-लाइन स्विच जोड़ा गया है, ताकि बिल्ड सिस्टम पैकेज के नाम को बदल सके. (समस्या 56189)- MIPS के लिए
-mno-ldc1-stc1
अब काम नहीं करता. ऐसा हो सकता है कि यह विकल्प, नए-fpxx
और-mno-odd-spreg
विकल्पों या FPXX ABI के साथ काम न करे. cpu-features
में MIPS MSA और R6 का पता लगाने की सुविधा जोड़ी गई.
Android NDK r10d (दिसंबर 2014)
- अहम बदलाव:
-
- सभी 32-बिट ABI के लिए, GCC 4.8 को डिफ़ॉल्ट कंपाइलर के तौर पर सेट किया गया है. GCC 4.6 अब सेवा में नहीं है. इसे अगली रिलीज़ में हटा दिया जाएगा. पहले जैसा व्यवहार वापस लाने के लिए, ndk-build में
NDK_TOOLCHAIN_VERSION=4.6
जोड़ें या कमांड लाइन परmake-standalone-toolchain.sh
को लागू करते समय--toolchain=arm-linux-androideabi-4.6
जोड़ें. GCC 4.9, 64-बिट ABIs के लिए डिफ़ॉल्ट रूप से उपलब्ध रहेगा. - सभी x86[_64] टूलचेन में, डिफ़ॉल्ट रूप से
-mstackrealign
जोड़ने की सुविधा बंद कर दी गई है. एनडीके टूलचेन, 16 बाइट के स्टैक अलाइनमेंट का इस्तेमाल करता है. डिफ़ॉल्ट रूप से इस्तेमाल किए जाने वाले टूल और विकल्प, इस नियम को लागू करते हैं. असेंबली कोड लिखने वाले उपयोगकर्ता को यह पक्का करना होगा कि स्टैक अलाइनमेंट बना रहे. साथ ही, यह भी पक्का करना होगा कि अन्य कंपाइलर भी इस नियम का पालन करें. (GCC बग 38496) - ARM और x86 ABI के लिए, Clang 3.5 के साथ Address Sanitizer की सुविधा जोड़ी गई. इस बदलाव के बारे में ज़्यादा जानने के लिए, Address Sanitizer प्रोजेक्ट देखें.
- एपीआई लेवल 21 से, ऐप्लिकेशन बनाते समय
-fPIE -pie
का इस्तेमाल करना ज़रूरी कर दिया गया है. एपीआई लेवल 16 और इसके बाद के वर्शन में, ndk-build, बिल्ड करते समयPIE
का इस्तेमाल करता है. इस बदलाव के कई असर हैं, जिनके बारे में डेवलपर के लिए झलक वाले वर्शन की समस्या 888 में बताया गया है. ये बातें, शेयर की गई लाइब्रेरी पर लागू नहीं होती हैं.
- सभी 32-बिट ABI के लिए, GCC 4.8 को डिफ़ॉल्ट कंपाइलर के तौर पर सेट किया गया है. GCC 4.6 अब सेवा में नहीं है. इसे अगली रिलीज़ में हटा दिया जाएगा. पहले जैसा व्यवहार वापस लाने के लिए, ndk-build में
- गड़बड़ियां ठीक की गई हैं:
-
- aarch64-linux-android-4.9 लिंकर में,
A53 Errata #835769 से जुड़ी और गड़बड़ियां ठीक की गईं. इसके तहत,
-mfix-cortex-a53-835769
(डिफ़ॉल्ट रूप से चालू) के बारे में जानकारी देने पर, GCC एक नया विकल्प,--fix-cortex-a53-835769
, पास करता है. ज़्यादा जानकारी के लिए, यह binutils मैसेज और यह binutils मैसेज देखें. - एपीआई लेवल 21 में libc++
sscanf/vsscanf
हैंग होने की समस्या को ठीक करने के बारे में बताया गया है. इस समस्या को r10c में ठीक कर दिया गया था. (समस्या 77988) - GCC 4.9 के साथ
-Os
तय किए जाने पर, AutoFDO (-fauto-profile
) क्रैश होने की समस्या को ठीक किया गया. (समस्या 77571)
- aarch64-linux-android-4.9 लिंकर में,
A53 Errata #835769 से जुड़ी और गड़बड़ियां ठीक की गईं. इसके तहत,
- अन्य गड़बड़ियां ठीक की गईं:
-
- हेडर और लाइब्रेरी से जुड़ी इन समस्याओं को ठीक किया गया है:
- एपीआई लेवल 16 में
posix_memalign
जोड़ा गया. साथ ही, एपीआई लेवल 16 से 19 के लिए,stdlib.h
में एक प्रोटोटाइप जोड़ा गया है. (समस्या 77861) stdatomic.h
को ठीक किया गया है, ताकि इसमें सिर्फ़ C++11 के लिए<atomic>
शामिल हो.- एपीआई लेवल 21 के लिए, इन हेडर में बदलाव किया गया है, ताकि इनका इस्तेमाल अलग से किया जा सके:
sys/user.h
, औरgl2ext.h
,dlext.h
,fts.h
,sgidefs.h
. sys/user.h
में बदलाव किया गया है, ताकिmxcsr_mask
का नाम बदलकरmxcr_mask
किया जा सके. साथ ही,u_ar0
के डेटा टाइप में बदलाव किया जा सकेsysconf()
एट्रिब्यूट की वैल्यू के टाइप कोint
से बदलकरlong
कर दिया गया है.- ndk-build में,
LOCAL_ARM_MODE
के लिएthumb
को हैंडल करने की सुविधा को ठीक किया गया: r10d में, ndk-build डिफ़ॉल्ट रूप सेLOCAL_LDFLAGS+=-mthumb
जोड़ता है. हालांकि, ऐसा तब नहीं होता, जब इनमें से कोई एक शर्त लागू होती है: - आपने
LOCAL_ARM_MODE
कोarm
के बराबर सेट किया है. - आपने डीबग बिल्ड बनाया है. इसमें
APP_OPTIM=debug
औरAndroidManifest.xml
जैसी सेटिंग शामिल हैं. साथ ही,AndroidManifest.xml
मेंandroid:debuggable="true"
शामिल है. इसमें एआरएम मोड डिफ़ॉल्ट रूप से चालू होता है, ताकि यह पहले के टूलचेन के साथ काम कर सके. (समस्या 74040) - Windows के पूरे पाथ का इस्तेमाल करने के लिए, ndk-build में
LOCAL_SRC_FILES
को ठीक किया गया. (समस्या 74333) - ndk-gdb से bash-specific कोड हटा दिया गया है. (समस्या 73338)
make-standalone-toolchain.sh
से बैश के लिए खास तौर पर लिखा गया कोड हटाया गया. (समस्या 74145)System.loadLibrary()
ट्रांज़िटिव डिपेंडेंसी को ठीक करने से जुड़े दस्तावेज़ में बदलाव किया गया है. (समस्या 41790)- Ubuntu 14.04 और OS X 10.10 (Yosemite) पर 64-बिट पैकेज एक्सट्रैक्ट न हो पाने की समस्या को ठीक किया गया है. (समस्या 78148)
- Clang के साथ काम करने से जुड़ी समस्या को ठीक किया गया है.
LOCAL_PCH
(समस्या 77575) - ld.gold से मिली "requires executable stack" चेतावनी के बारे में ज़्यादा जानकारी दी गई है. (समस्या 79115)
unsigned long
से user_regs_struct* में कॉपी करता है.
Android NDK r10c (अक्टूबर 2014)
- अहम बदलाव:
-
- डाउनलोड स्ट्रक्चर में ये बदलाव किए गए हैं:
- अब हर पैकेज में, उसके प्लैटफ़ॉर्म के लिए 32-बिट और 64-बिट, दोनों हेडर, लाइब्रेरी, और टूल शामिल हैं.
- डीबग करने की जानकारी वाली STL लाइब्रेरी को अब अलग से डाउनलोड करने की ज़रूरत नहीं है.
- पहले
Android-L
के तौर पर जाने जाने वाले सभी आइटम को अब आधिकारिक तौर पर रिलीज़ किया गया है. इसलिए, उन्हेंandroid-21
के तौर पर जाना जाएगा. - GCC 4.9 को अपडेट किया गया है. इसके लिए, GCC रिपॉज़िटरी की
google
ब्रांच को रीबेस किया गया है. GCC 4.9 के अपस्ट्रीम वर्शन से मुख्य अंतरों में ये शामिल हैं: -O2
विकल्प अब वेक्टर बनाने की सुविधा चालू करता है. इसमें लूप को हटाने की सुविधा नहीं होती, लेकिन ज़्यादा तेज़ी से अनरोल करने की सुविधा होती है.- एफ़डीओ और एलआईपीओ में सुधार
- सभी होस्ट के लिए Clang 3.5 का सपोर्ट जोड़ा गया:
NDK_TOOLCHAIN_VERSION=clang
अब Clang 3.5 को चुनता है. ध्यान दें कि: - ARM और x86, इंटिग्रेट किए गए असेंबलर का इस्तेमाल डिफ़ॉल्ट रूप से करते हैं. अगर इससे समस्याएं होती हैं, तो
-fno-integrated-as
का इस्तेमाल करें. - Clang 3.5, इस्तेमाल न किए गए फ़्लैग के लिए ज़्यादा चेतावनियां दिखाता है. जैसे,
-finline-functions
विकल्प, जिसे GCC सपोर्ट करता है. - Android 5.0 डिवाइस पर डीबग करते समय,
art-on
विकल्प चुनकर एआरटी डीबगिंग मोड में जाने की सुविधा जोड़ी गई. इस डिवाइस पर एआरटी का इस्तेमाल वर्चुअल मशीन के तौर पर किया जाता है. ज़्यादा जानकारी के लिए, NDK वाले डायरेक्ट्री में मौजूदprebuilt/common/gdb/common.setup
देखें. - Clang 3.3 के लिए काम नहीं करता.
- GCC 4.6 अब काम नहीं करता. ऐसा हो सकता है कि आने वाले समय में, इसे हटा दिया जाए.
- mclinker को 2.8 वर्शन में अपडेट किया गया है. इसमें आइडेंटिकल कोड फ़ोल्डिंग ("ICF") की सुविधा उपलब्ध है.
--icf
विकल्प का इस्तेमाल करके, आईसीएफ़ की जानकारी दें. - x86 और x86_64 में
arm_neon.h
के लिए बेहतर सपोर्ट उपलब्ध कराया गया है. इससे NEON इंट्रिंसिक के ~93% को कवर किया जा सकता है. NEON के साथ काम करने वाले डिवाइसों के बारे में ज़्यादा जानकारी के लिए:- NDK Programmer's Guide (
docs/Programmers_Guide/html/
) पर जाएं और आर्किटेक्चर और सीपीयू > Neon देखें. samples/
में अपडेट किया गयाhello-neon
सैंपल देखें.- ARM NEON से Intel SSE पर पोर्ट करने के लिए, Intel की गाइड देखें.
- NDK Programmer's Guide (
headers/libs/android-21
में_FORTIFY_SOURCE
के लिए सहायता से जुड़ा दस्तावेज़ तैयार किया गया. यह r10 में मौजूद था. हालांकि, उस समयandroid-21
कोAndroid-L
कहा जाता था और इसके लिए कोई दस्तावेज़ मौजूद नहीं था.
ज़्यादा जानकारी के लिए, नीचे बग ठीक करने से जुड़े अहम अपडेट देखें.
GCC का इस्तेमाल करने वाले प्रोजेक्ट से माइग्रेट करते समय,
-Wno-invalid-command-line-argument
और-Wno-unused-command-line-argument
का इस्तेमाल किया जा सकता है. इससे, इस्तेमाल नहीं किए गए फ़्लैग को तब तक अनदेखा किया जा सकता है, जब तक यह तय न हो जाए कि लंबे समय तक उनके साथ क्या करना है. - गड़बड़ियां ठीक की गई हैं:
-
- GCC4.9/aarch64 के साथ कंपाइलर से जुड़ी अंदरूनी गड़बड़ी को ठीक किया गया है. इस गड़बड़ी की वजह से, यह मैसेज दिखता था (समस्या 77564):
- GCC4.9/arm से गलत कोड जनरेट होने की समस्या ठीक की गई. (समस्या 77567)
- GCC4.9/mips में कंपाइलर से जुड़ी उस गड़बड़ी को ठीक किया गया है जिसमें इनलाइन-असेंबली शामिल है. (समस्या 77568)
x = (cond) ? y : x
के लिए, GCC4.9/arm से जनरेट किए गए गलत कोड को ठीक किया गया. (समस्या 77569)- GCC4.9/aarch64 और Clang3.5/aarch64 को डिफ़ॉल्ट रूप से ठीक किया गया है, ताकि
Cortex-A53 erratum (835769) से बचा जा सके.
-mno-fix-cortex-a53-835769
को तय करके, समाधान को बंद करें.
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- अन्य गड़बड़ियां ठीक की गईं:
-
android-21
में हेडर और लाइब्रेरी से जुड़ी इन समस्याओं को ठीक किया गया है:- टीवी के ज़्यादा कीकोड जोड़े गए:
android/keycodes.h
android/sensor.h
में ज़्यादा कॉन्स्टेंट और छह नए सेंसर फ़ंक्शन जोड़े गए हैं:ASensorManager_getDefaultSensorEx
,ASensor_getFifoMaxEventCount
,ASensor_getFifoReservedEventCount
,ASensor_getStringType
,ASensor_getReportingMode
, औरASensor_isWakeUpSensor
.- GCC 4.6 के साथ बेहतर तरीके से काम करने के लिए,
stdatomic.h
को ठीक किया गया है. साथ ही,<atomic>
हेडर के लिए सहायता उपलब्ध कराई गई है. - सभी एपीआई लेवल में
sys/ucontext.h
औरsys/user.h
को जोड़ा गया.signal.h
हेडर में अब<sys/ucontext.h>
शामिल है.struct ucontext
की किसी भी मौजूदा परिभाषा को हटाया जा सकता है. - एपीआई लेवल 17, 18, और 19 के लिए
posix_memalign
को जोड़ा गया. - सभी आर्किटेक्चर में ये फ़ंक्शन जोड़े गए हैं:
android_set_abort_message
,posix_fadvise
,posix_fadvise64
,pthread_gettid_np
. native-media/AndroidManifest.xml
सैंपल में ज़रूरी अनुमतियां जोड़ी गईं. (समस्या 106640)- एपीआई लेवल 21 में
clock_nanosleep
औरclock_settime
को जोड़ा गया. (समस्या 77372) - हमने सभी आर्किटेक्चर से इन सिंबल को हटा दिया है:
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
, औरdlmalloc
. - हमने 64-बिट आर्किटेक्चर से ये फ़ंक्शन हटा दिए हैं:
basename_r
,dirname_r
,__isthreaded
,_flush_cache
(mips64). - 32-बिट आर्किटेक्चर से इस फ़ंक्शन को हटा दिया गया है:
__signalfd4
. - तीसरे आर्ग्युमेंट का टाइप, इन फ़ंक्शन में
size_t
से बदलकरint
कर दिया गया है:strtoll_l
,strtoull_l
,wcstoll_l
, औरwcstoull_l
. - हमने 64-बिट आर्किटेक्चर में इन फ़ंक्शन को वापस जोड़ दिया है:
arc4random
,arc4random_buf
, औरarc4random_uniform
. cxa_*
,new
, औरdelete
ऑपरेटरों को वापसlibstdc++.so
में ले जाया गया. इस बदलाव से r9d का व्यवहार पहले जैसा हो जाता है. r10 के पिछले वर्शन में प्लेसहोल्डर फ़ाइलें मौजूद थीं.
- टीवी के ज़्यादा कीकोड जोड़े गए:
- GCC 4.8 और 4.9 में mips के लिए MXU की सुविधा फिर से चालू की गई. r10 और r10b में यह सुविधा उपलब्ध नहीं थी, क्योंकि GCC के इन वर्शन को binutils-2.24 के साथ कंपाइल किया गया था. यह MXU के साथ काम नहीं करता था. अब ऐसा किया जा सकता है.
make-standalone-toolchain.sh
में--toolchain=
को ठीक किया गया है, ताकि अब यह Clang के वर्शन के बारे में बताने वाले प्रत्यय के इस्तेमाल का सही तरीके से समर्थन कर सके.- libc++/armeabi
strtod()
फ़ंक्शन से जुड़ी समस्या ठीक की गई. docs/
में NDK के दस्तावेज़ से जुड़ी समस्याओं को ठीक किया गया.
- अन्य बदलाव:
-
- इन इंस्ट्रक्शन सेट के लिए, ARMv8 सपोर्ट का पता लगाने के लिए बेहतर
cpu-features
: AES, CRC32, SHA2, SHA1, और 64-बिट PMULL/PMULL2. (समस्या 106360) - ndk-build में बदलाव किया गया है, ताकि
*-gcc-ar
का इस्तेमाल किया जा सके. यह GCC 4.8, GCC 4.9, और Clang में उपलब्ध है. Clang इसे*-ar
के बजाय तय करता है. इस सेटिंग से, LTO के बेहतर सपोर्ट की सुविधा मिलती है. - GCC कंपाइलर से
include-fixed/linux/a.out.h
औरinclude-fixed/linux/compiler.h
हेडर हटा दिए गए हैं. (समस्या 73728) - Mac OS X पर GCC 4.8 के साथ
-flto
से जुड़ी समस्या को ठीक किया गया है. गड़बड़ी के मैसेज में यह लिखा था: build-binary.mk.
में टाइपिंग की गलती ठीक की गई (समस्या 76992)
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- इन इंस्ट्रक्शन सेट के लिए, ARMv8 सपोर्ट का पता लगाने के लिए बेहतर
- पहले से मालूम अहम समस्याएं:
-
- GCC4.9 में -Os (
-fauto-profile
) तय करने से क्रैश होने की समस्या हो सकती है. (समस्या 77571)
- GCC4.9 में -Os (
Android NDK r10b (सितंबर 2014)
- ज़रूरी सूचनाएं:
-
- डाउनलोड किए जा सकने वाले पैकेज का साइज़ 512 एमबी से ज़्यादा नहीं होना चाहिए. इसलिए, 32-बिट वाले ये आइटम, 32-बिट NDK डाउनलोड पैकेज में शामिल नहीं हैं. इसके बजाय, ये 64-बिट वाले फ़ोल्डर में मौजूद होते हैं:
- Android-L हेडर
- GCC 4.9
- फ़िलहाल, NDK सिर्फ़ Android 4.4 (एपीआई लेवल 19) के साथ 32-बिट Renderscript के लिए सहायता उपलब्ध कराता है. HelloComputeNDK (सिर्फ़ Renderscript का सैंपल) को Renderscript (32- या 64-बिट) और Android के किसी अन्य वर्शन के साथ नहीं बनाया जा सकता.
- नेटिव-कोडेक को कंपाइल करने के लिए, आपको 64-बिट NDK पैकेज का इस्तेमाल करना होगा. इसमें Android-L के सभी हेडर मौजूद होते हैं.
- गड़बड़ियां ठीक की गई हैं:
- अन्य गड़बड़ियां ठीक की गईं:
-
- GCC के सभी वर्शन की
include-fixed/
डायरेक्ट्री सेstdio.h
को हटा दिया गया है. (समस्या 73728.) platforms/android-L/arch-*/usr/include/linux/netfilter*/
डायरेक्ट्री में मौजूद Windows पैकेज से डुप्लीकेट हेडर फ़ाइलें हटा दी गई हैं. (समस्या 73704.)- Clang को HelloComputeNDK बनाने से रोकने वाली समस्या को ठीक किया गया है.
- atexit को ठीक किया गया. (समस्या 66595.)
docs/
औरsources/third_party/googletest/README.NDK
में मौजूद दस्तावेज़ों में कई सुधार किए गए हैं. (समस्या 74069.)- Android-L हेडर में ये बदलाव किए गए हैं:
ctype.h
औरwchar.h
में ये फ़ंक्शन जोड़े गए हैं:dn_expand()
,grantpt()
,inet_nsap_addr()
,inet_nsap_ntoa()
,insque()
,nsdispatch()
,posix_openpt()
,__pthread_cleanup_pop()
,__pthread_cleanup_push()
,remque()
,setfsgid()
,setfsuid()
,splice()
,tee()
,twalk()
(समस्या 73719), और 42*_l()
फ़ंक्शन.cmsg_nxthdr
का नाम बदलकर__cmsg_nxthdr
कर दिया गया.__libc_malloc_dispatch
को हटा दिया गया है.ptrace()
के प्रोटोटाइप कोlong ptrace(int, ...);
में बदल दिया गया है.sha1.h
को हटा दिया गया है.android/dlext.h
मेंandroid_dlextinfo
को बढ़ाया गया.stdlib.h
,time.h
,wchar.h
, औरcomplex.h
में फ़्लोट या डबल टाइप की वैल्यू पाने या लौटाने वाले फ़ंक्शन के लिए,__NDK_FPABI__
को एनोटेट किया गया है.
- GCC के सभी वर्शन की
- अन्य बदलाव:
-
mipsel-linux-android-4.9
औरmips64el-linux-android-4.9
को अपडेट किया गया है. साथ ही, मल्टीलिब डायरेक्ट्री का नया लेआउट लागू किया गया है और gdb-7.7 के लिए सहायता उपलब्ध कराई गई है- ज़्यादा arm64 सुविधाओं का पता लगाने के लिए, बेहतर
cpu-features
. (बदलाव सूची 100339.)
Android NDK r10 (जुलाई 2014)
- अहम बदलाव:
-
- तीन नए एबीआई जोड़े गए हैं. ये सभी 64-बिट वाले हैं: arm64-v8a, x86_64, mips64. ध्यान दें:
- GCC 4.9, 64-बिट ABI के लिए डिफ़ॉल्ट कंपाइलर है. Clang का मौजूदा वर्शन 3.4 है.
NDK_TOOLCHAIN_VERSION=clang
arm64-v8a और mips64 के लिए काम नहीं कर सकता. - Android-L, 64-बिट की सुविधा वाला पहला लेवल है. ध्यान दें कि यह एपीआई लेवल, कुछ समय के लिए है और सिर्फ़ L-preview के लिए है. L-release में, इसकी जगह असल एपीआई लेवल नंबर इस्तेमाल किया जाएगा.
- इस रिलीज़ में,
APP_ABI
के लिएall32
औरall64
सेटिंग शामिल हैं.APP_ABI=all32
,APP_ABI=armeabi,armeabi-v7a,x86,mips
के बराबर है.APP_ABI=all64
,APP_ABI=arm64-v8a,x86_64,mips64
के बराबर है.APP_ABI=all
से सभी एबीआई चुने जाते हैं.
- Android-L में मौजूद नई GNU libstdc++ में सभी
<tr1/cmath>
शामिल हैं अपना खुद का गणित फ़ंक्शन तय करने से पहले,_GLIBCXX_USE_C99_MATH_TR1
देखें. इससे आपको यह पता चलेगा कि उस नाम का कोई फ़ंक्शन पहले से मौजूद है या नहीं. इससे लिंकर से "कई बार तय किया गया" गड़बड़ियों से बचा जा सकता है. - ARMv8 कर्नेल के लिए, cpu-features लाइब्रेरी को अपडेट कर दिया गया है. ऐसा हो सकता है कि cpu-features लाइब्रेरी, ARMv8 प्लैटफ़ॉर्म पर NEON की मौजूदगी का पता न लगा पाए. अपने कोड को नए वर्शन के साथ फिर से कंपाइल करें.
- नई
platforms/android-L/
एपीआई डायरेक्ट्री जोड़ी गई है. इसमें ये चीज़ें शामिल हैं: - Bionic हेडर अपडेट किए गए हैं. इनमें Android के एपीआई लेवल 3 (Cupcake) से लेकर 19 (KitKat) तक कोई बदलाव नहीं हुआ था. लेवल L के लिए, इस नए वर्शन को AOSP के साथ सिंक किया जाना है.
- नए मीडिया एपीआई और नेटिव-कोडेक का सैंपल.
- SLES/OpenSLES के लिए अपडेट किया गया
Android.h
हेडर. इससे AudioPlayer में सिंगल-प्रिसिज़न, फ़्लोटिंग-पॉइंट ऑडियो फ़ॉर्मैट इस्तेमाल किया जा सकेगा. libGLESv3.so.
के लिए GLES 3.1 और AEP एक्सटेंशन- GLES2 और GLES3 हेडर को Khronos के आधिकारिक तौर पर उपलब्ध सबसे नए वर्शन पर अपडेट किया गया है.
- 32/64-बिट ABIs में GCC 4.9 कंपाइलर जोड़े गए. जैसा कि पहले बताया गया है, 64-बिट ABI के लिए GCC 4.9 डिफ़ॉल्ट (सिर्फ़) कंपाइलर है. 32-बिट ABI के लिए, आपको GCC 4.9 को साफ़ तौर पर चालू करना होगा, क्योंकि GCC 4.6 अब भी डिफ़ॉल्ट है.
- ndk-build के लिए, 32-बिट और GCC 4.9 को चालू करें. इसके लिए,
NDK_TOOLCHAIN_VERSION=4.9
कोApplication.mk
में जोड़ें या इसे कमांड लाइन से एनवायरमेंट वैरिएबल के तौर पर एक्सपोर्ट करें. - स्टैंडअलोन टूलचेन के लिए,
--toolchain=
स्क्रिप्ट में मौजूद--toolchain=
विकल्प का इस्तेमाल करें.make-standalone-toolchain.sh
उदाहरण के लिए:--toolchain=arm-linux-androideabi-4.9.
- GCC 4.8/4.9 और x86* में GDB को वर्शन 7.6 पर अपग्रेड किया गया. GCC 4.6 में GDB अब भी GDB-7.3.x वर्शन पर है. यह ARM और MIPS के लिए डिफ़ॉल्ट है. इसलिए, आपको GDB 7.6 चुनने के लिए,
NDK_TOOLCHAIN_VERSION=4.8
या4.9
सेट करना होगा, ताकि ndk-gdb चालू हो सके. - SSSE3 के लिए सहायता देने वाला
-mssse3
बिल्ड विकल्प जोड़ा गया है. साथ ही, इसे ABI x86 के लिए डिफ़ॉल्ट विकल्प बनाया गया है (SSE3 से अपग्रेड किया गया है). Google की ओर से रिलीज़ की गई इमेज में SSSE3 निर्देश शामिल नहीं हैं. - GCC 4.8 को 4.8.3 पर अपडेट किया गया.
- gabi++ से libc++abi पर स्विच करके, ARM libc++ EH के लिए बेहतर सहायता. ज़्यादा जानकारी के लिए, दस्तावेज़ का "C++ Support" सेक्शन देखें. ध्यान दें कि:
- अब Clang 3.4 और GCC 4.8 के लिए, स्थान-भाषा को छोड़कर सभी टेस्ट पास हो गए हैं. ज़्यादा जानकारी के लिए, दस्तावेज़ का "C++ Support" सेक्शन देखें.
- X86 और MIPS libc++ के लिए libc++ लाइब्रेरी अब भी gabi++ का इस्तेमाल करती हैं.
- GCC 4.7 और इसके बाद के वर्शन में, अब <atomic> का इस्तेमाल किया जा सकता है.
- अगर
<list>
का इस्तेमाल किया जाता है, तो आपको-fno-strict-aliasing
जोड़ना होगा. ऐसा इसलिए, क्योंकि__list_imp::_end
_ से टीबीएए के नियमों का उल्लंघन होता है. (समस्या 61571.) - GCC 4.6 के बाद से, LIBCXX_FORCE_REBUILD:=true का इस्तेमाल करने पर libc++ को फिर से नहीं बनाया जाता. इसे फिर से बनाने के लिए, किसी दूसरे कंपाइलर का इस्तेमाल करना ज़रूरी है. ध्यान दें कि Clang 3.3 की जांच नहीं की गई है.
- mclinker अब वर्शन 2.7 है और यह aarch64 Linux के साथ काम करता है.
LOCAL_PCH
में बताए गए हेडर के लिए, पहले से कंपाइल किए गए हेडर के इस्तेमाल की सुविधा जोड़ी गई. (समस्या 25412).
- गड़बड़ियां ठीक की गई हैं:
-
- libc++ को ठीक किया गया है, ताकि अब यह
std::feof
वगैरह को कंपाइल कर सके (समस्या 66668). - Clang 3.3/3.4 की एटॉमिक लाइब्रेरी के उस कॉल को ठीक किया गया है जिसकी वजह से, ABI armeabi के लिए libc++ के कुछ टेस्ट क्रैश हो जाते थे.
- प्रीकंपाइल किए गए हेडर को पढ़ते समय, Clang 3.4 क्रैश होने की समस्या को ठीक किया गया है. (समस्या 66657).
- Clang 3.3/3.4
-O3
से जुड़ी इन समस्याओं को ठीक किया गया है: - Clang 3.3/3.4 के क्रैश होने की समस्या ठीक की गई:
llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* llvm::MDBuilder::createBranchWeights(llvm::ArrayRef
(समस्या 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
. (समस्या 66950). - libc++ को ठीक किया गया है, ताकि अब यह
- अन्य गड़बड़ियां ठीक की गईं:
-
- फ़िक्स्ड हेडर:
- 32-बिट
ssize_t
कोlong int
के बजायint
के तौर पर ठीक किया गया. WCHAR_MIN
औरWCHAR_MAX
को ठीक किया गया है, ताकि वे उस आर्किटेक्चर के हिसाब से सही साइन ले सकें जिस पर वे चल रहे हैं:- X86/MIPS: हस्ताक्षर किया गया.
- ARM: हस्ताक्षर नहीं किया गया है.
- X86/MIPS को डिफ़ॉल्ट रूप से बिना हस्ताक्षर किए गए कोड पर सेट करने के लिए,
-D__WCHAR_UNSIGNED__
का इस्तेमाल करें. wchar_t
को 16 बिट पर सेट करने के लिए,-fshort-wchar
का इस्तेमाल करें.- 32-बिट
libc.so
से ऐसे सिंबल हटाए गए हैं जो मौजूद नहीं हैं. साथ ही, Android के एपीआई लेवल 12 और इससे ऊपर के वर्शन के लिएpread64
,pwrite64
,ftruncate64
जोड़े गए हैं. (समस्या 69319). ज़्यादा जानकारी के लिए, AOSP में किए गए बदलावों की सूची 94137 के साथ दिया गया कमिट मैसेज देखें. putchar
को फिर से तय करने के बारे में GCC की चेतावनी को ठीक किया गया. चेतावनी वाले मैसेज में यह लिखा होता है:- ठीक किया गया
make-standalone-toolchain.sh --stl=libc++
, ताकि: cxxabi.h
को कॉपी करें. (समस्या 68001).- यह एनडीके इंस्टॉल डायरेक्ट्री के अलावा, अन्य डायरेक्ट्री में चलता है. (समस्याएं 67690 और 68647).
- GCC/Windows में, बाहरी प्रोग्राम में प्रोसेस शुरू करने के लिए, सिर्फ़ ज़रूरी होने पर ही कोट किए गए आर्ग्युमेंट का इस्तेमाल किया जाता है. इस बदलाव से, 32 हज़ार वर्णों की सीमा से ज़्यादा वर्णों का इस्तेमाल करने की संभावना कम हो जाती है.
APP_PLATFORM
एनवायरमेंट वैरिएबल में बदलाव न कर पाने की समस्या को ठीक किया गया है.- crazy_linker में
IsSystemLibrary()
को लागू करने से जुड़ी समस्या ठीक की गई है, ताकि लाइब्रेरी पाथ का सही बेसनेम ढूंढने के लिए,strchr()
के बजायstrrchr()
का इस्तेमाल किया जा सके. - नेटिव-ऑडियो को डीबग मोड में बनाने से जुड़ी समस्या को ठीक किया गया है.
- gdb में, फ़्लोटिंग-पॉइंट की बड़ी संख्याओं को प्रिंट करने से जुड़ी समस्या ठीक की गई. (समस्या 69203).
- Clang 3.4 को
-Wl,-shared
के साथ कंपाइल न कर पाने की समस्या को ठीक किया गया है. हालांकि,-shared
के साथ कंपाइल करने में कोई समस्या नहीं थी. समस्या यह थी कि अगर-shared
और-static
, दोनों मौजूद नहीं थे, तो Clang, Android टारगेट के लिए-pie
जोड़ देता था. इस गलत व्यवहार की वजह से, लिंक करने वाले को यह शिकायत करनी पड़ी कि-shared
और-pie
एक साथ मौजूद नहीं हो सकते.
include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int);
(बदलाव लॉग 91185). - अन्य बदलाव:
-
- x86 टूलचेन में
arm_neon.h
जोड़ा गया है, ताकि अब यह Neon के ~47% हिस्से का इम्यूलेशन कर सके. फ़िलहाल, 64-बिट टाइप के लिए सहायता उपलब्ध नहीं है. ज़्यादा जानकारी के लिए, x86 के दस्तावेज़ में ARM Neon इंट्रिंसिक सपोर्ट वाला सेक्शन देखें. - ARM/GOT_PREL ऑप्टिमाइज़ेशन (GCC की Google ब्रांच से बनाए गए GCC 4.6 में मौजूद) को ARM GCC 4.8/4.9 में पोर्ट किया गया. इस ऑप्टिमाइज़ेशन से, ग्लोबल वैरिएबल को ऐक्सेस करते समय कभी-कभी निर्देशों की संख्या कम हो जाती है. उदाहरण के लिए,
$NDK/tests/build/b14811006-GOT_PREL-optimization/
में build.sh स्क्रिप्ट देखें. - STL gabi++, stlport, और libc++ के लिए ARM वर्शन जोड़ा गया है. अब इनमें ARM और Thumb मोड, दोनों उपलब्ध हैं.
- अब make-standalone-toolchain.sh स्क्रिप्ट को
--toolchain=x86_64-linux-android-4.9
के साथ कॉल किया जा सकता है. यह--toolchain=x86_64-4.9
के बराबर है.
- x86 टूलचेन में
Android NDK r9d (मार्च 2014)
- अहम बदलाव:
-
- Clang 3.4 कंपाइलर के लिए सहायता जोड़ी गई.
NDK_TOOLCHAIN_VERSION=clang
विकल्प अब Clang 3.4 चुनता है. GCC 4.6 अब भी डिफ़ॉल्ट कंपाइलर है. APP_ABI=armeabi-v7a-hard
को जोड़ा गया. साथ ही, मल्टीलिब का अतिरिक्त विकल्प-mfloat-abi=hard
जोड़ा गया. इन विकल्पों का इस्तेमाल ARM GCC 4.6/4.8 और Clang 3.3/3.4 के साथ किया जा सकता है. ये 4.8 के असेंबलर, लिंकर, और libs का इस्तेमाल करते हैं. इन विकल्पों का इस्तेमाल करते समय, इन बदलावों का ध्यान रखें:-
ndk-build
स्क्रिप्ट को लागू करते समय, armeabi-v7a टारगेट के लिए ये विकल्प जोड़ें: बनाई गई लाइब्रेरी कोTARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
libs/armeabi-v7a
में कॉपी किया जाता है.armeabi-v7a
औरarmeabi-v7a-hard
, दोनों को मेक टारगेट के तौर पर सेट नहीं किया जा सकता. इसका मतलब है कि APP_ABI= लाइन पर, दोनों को सेट नहीं किया जा सकता. ऐसा करने से, उनमें से किसी एक को अनदेखा कर दिया जाता है. ध्यान दें किAPP_ABI=all
अब भीarmeabi armeabi-v7a x86 mips
के बराबर है. make-standalone-toolchain.sh
स्क्रिप्ट,/hard
डायरेक्ट्री में मौजूद अतिरिक्त लाइब्रेरी कॉपी करती है. ऊपर दिए गएCFLAGS
औरLFLAGS
को अपने मेकफ़ाइल में जोड़ें, ताकि GCC या Clang,/hard
में मौजूद लाइब्रेरी से लिंक हो सके.- x86 टारगेट के लिए, yasm असेंबलर के साथ-साथ
LOCAL_ASMFLAGS
औरEXPORT_ASMFLAGS
फ़्लैग जोड़े गए.ndk-build
स्क्रिप्ट,prebuilts/*/bin/yasm*
का इस्तेमाल करकेLOCAL_SRC_FILES
बनाती है. इनमें.asm
एक्सटेंशन होता है. - MClinker को 2.6.0 पर अपडेट किया गया है. इससे
-gc-sections
सुविधा जोड़ी गई है. - libc++ के एक्सपेरिमेंटल वर्शन के लिए सहायता जोड़ी गई (अपस्ट्रीम r201101). इस नई सुविधा का इस्तेमाल करने के लिए, यह तरीका अपनाएं:
Application.mk
मेंAPP_STL := c++_static
याAPP_STL := c++_shared
जोड़ें.LIBCXX_FORCE_REBUILD := true
के ज़रिए सोर्स से फिर से बनाया जा सकता है- libc++ हेडर/lib के साथ स्टैंडअलोन टूलचेन बनाने के लिए,
make-standalone-toolchain.sh --stl=libc++
को एक्ज़ीक्यूट करें.
CPLUSPLUS-SUPPORT.html
देखें. (समस्या 36496)
- Clang 3.4 कंपाइलर के लिए सहायता जोड़ी गई.
- गड़बड़ियां ठीक की गई हैं:
-
- GCC 4.6/4.8 ARM EABI के लिए, अनचाहे एक्सेप्शन हैंडलर से अनकैच किए गए थ्रो को ठीक किया गया. (GCC Issue 59392)
- GCC 4.8 में सुधार किया गया है, ताकि अब यह किसी ऐसे टेंप्लेट की आंशिक विशेषज्ञता को सही तरीके से हल कर सके जिसमें निर्भरता वाला, नॉन-टाइप टेंप्लेट आर्ग्युमेंट मौजूद हो. (GCC Issue 59052)
- प्रीबिल्ट Python में ज़्यादा मॉड्यूल जोड़े गए (समस्या 59902):
- Mac OS X:
zlib
,bz2
,_curses
,_curses_panel
,_hashlib
,_ssl
- Linux:
zlib
,nis
,crypt
,_curses
, और_curses_panel
- Mac OS X:
- x86 और MIPS gdbserver
event_getmsg_helper
को ठीक किया गया. - RenderScript NDK टूलचेन में कई समस्याएं ठीक की गई हैं. इनमें, पुराने डिवाइसों और C++ रिफ़्लेक्शन के साथ काम करने से जुड़ी समस्याएं शामिल हैं.
- अन्य गड़बड़ियां ठीक की गईं:
-
- हेडर से जुड़ी समस्याएं ठीक की गईं:
- Android के एपीआई लेवल 13 और उसके बाद के वर्शन के लिए,
android/asset_manager.h
में#include <sys/types.h>
के न दिखने की समस्या ठीक की गई. (समस्या 64988) - Android के एपीआई लेवल 14 और इसके बाद के वर्शन के लिए,
android/rect_manager.h
में#include
मौजूद नहीं था. इसे ठीक कर दिया गया है. JNICALL
कोjni.h
मेंJNI_OnLoad
औरJNI_OnUnload
में जोड़ा गया. ध्यान दें किJNICALL
को__NDK_FPABI__
के तौर पर तय किया गया है. ज़्यादा जानकारी के लिए,sys/cdefs.h
देखें.- हमने इन हेडर को अपडेट किया है, ताकि इन्हें मैन्युअल तरीके से शामिल करने की ज़रूरत न पड़े. साथ ही, इनकी डिपेंडेंसी को भी शामिल किया जा सके (समस्या 64679):
- सभी आर्किटेक्चर के लिए
sys/cachectl.h
जोड़ा गया. MIPS डेवलपर अब#ifdef __mips__
लिखने के बजाय, इस हेडर को शामिल कर सकते हैं. - फ़्लोट या डबल वैल्यू लेने या दिखाने वाले फ़ंक्शन में
__NDK_FPABI__
जोड़कर,platforms/android-18/include/android/input.h
को ठीक किया गया. - MIPS
struct stat
को ठीक किया गया है. इसे Android API लेवल 12 और इसके बाद के वर्शन के लिए, 64-बिट वर्शन के तौर पर गलत तरीके से सेट किया गया था. यह गलत सेटिंग, r9c रिलीज़ में हुई एक रिग्रेशन गड़बड़ी की वजह से हुई थी. - Android API लेवल 9 और उससे पहले के लेवल के लिए,
__PTHREAD_MUTEX_INIT_VALUE
,__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE
, और__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE
को तय किया गया है. - एपीआई 18 और उसके बाद के वर्शन के लिए, x86
libm.so
मेंscalbln
,scalblnf
, औरscalblnl
को जोड़ा गया. sources/android/support/include/iconv.h
में टाइपिंग की गड़बड़ी ठीक की गई. (समस्या 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 के एपीआई लेवल 13 और उसके बाद के वर्शन के लिए,
- gabi++
std::unexpected()
कोstd::terminate()
को कॉल करने के लिए ठीक किया गया है, ताकि उपयोगकर्ता की ओर से तय किए गएstd::terminate()
हैंडलर को चलाने का मौका मिल सके. std::nullptr
को पकड़ने के लिए gabi++ को ठीक किया गया.- चायदानी और ज़्यादा चायदानियों के फ़िक्स किए गए सैंपल:
- Tegra 2 और 3 चिप से जुड़ी समस्या को हल किया गया. इसके लिए, स्पेक्लर वैरिएबल को बदलकर मीडियम प्रेसिज़न का इस्तेमाल किया गया. अब स्पेक्लर पावर की वैल्यू 1.0 से कम हो सकती है.
- सैंपल में बदलाव किया गया है, ताकि आवाज़ कम या ज़्यादा करने वाले बटन को दबाने पर इमर्सिव मोड वापस आ जाए और
SYSTEM_UI_FLAG_IMMERSIVE_STICKY
अमान्य हो जाए. स्क्रीन घुमाने परonSystemUiVisibilityChange
ट्रिगर नहीं होता. इसलिए, इमर्सिव मोड वापस नहीं आता.
ndk-build
स्क्रिप्ट में बदलाव किया गया है, ताकि-rpath-link=$SYSROOT/usr/lib
और-rpath-link=$TARGET_OUT
को जोड़ा जा सके. इससेld.bfd
का इस्तेमाल करके, एक्ज़ीक्यूटेबल लिंक किए जा सकेंगे. (समस्या 64266)- सभी एसटीएल बिल्ड से
-Bsymbolic
हटा दिया गया है. ndk-gdb-py.cmd
को ठीक किया गया है. इसके लिए,SHELL
कोpython.exe
में पास करने के बजाय, एनवायरमेंट वैरिएबल के तौर पर सेट किया गया है.python.exe
, सेटिंग को अनदेखा करता है. (समस्या 63054)make-standalone-toolchain.sh
स्क्रिप्ट को ठीक किया गया है, ताकि--stl=stlport
विकल्प, सिंबल लिंक करने के बजाय gabi++ हेडर कॉपी करे.cmd.exe
और MinGW शेल, cygwin से बनाए गए सिंबल लिंक को नहीं समझते.
- हेडर से जुड़ी समस्याएं ठीक की गईं:
- अन्य बदलाव:
-
- सभी
*cmd
स्क्रिप्ट पर, एक्ज़ीक्यूशन की अनुमतियां लागू की गई हैं. पहले इनका इस्तेमाल सिर्फ़cmd.exe
शेल में किया जाता था. ऐसा इसलिए किया गया है, ताकि अगर डेवलपर को सुझाई गईndk-build
स्क्रिप्ट के बजाय, cygwin मेंndk-build.cmd
का इस्तेमाल करना हो, तो वे ऐसा कर सकें. - अगर बताई गई डेस्टिनेशन डायरेक्ट्री मौजूद नहीं है, तो कॉपी करने के बजाय फ़ाइल को दूसरी जगह ले जाने की सुविधा जोड़ी गई है. इससे
make-standalone-toolchain.sh
स्क्रिप्ट की स्पीड बेहतर हुई है.
- सभी
Android NDK r9c (दिसंबर 2013)
यह रिलीज़ सिर्फ़ बग ठीक करने के लिए है.
- गड़बड़ियां ठीक की गई हैं:
-
- GCC 4.8 ARM में मौजूद एक समस्या को ठीक किया गया है. इस समस्या में स्टैक पॉइंटर को बहुत जल्दी रीस्टोर कर दिया जाता था. इस समस्या की वजह से, फ़्रेम पॉइंटर, स्टैक फ़्रेम में मौजूद किसी वैरिएबल को भरोसेमंद तरीके से ऐक्सेस नहीं कर पाता था. (GCC Issue 58854)
- GCC 4.8 libstdc++ में मौजूद एक समस्या को ठीक किया गया है. इसमें std::nth_element में मौजूद गड़बड़ी की वजह से, ऐसा कोड जनरेट हो रहा था जिससे रैंडम सेगफ़ॉल्ट हो रहा था. (समस्या 62910)
- cc1/cc1plus में GCC 4.8 ICE को
-fuse-ld=mcld
के साथ ठीक किया गया है, ताकि अब यह गड़बड़ी न हो:cc1: internal compiler error: in common_handle_option, at opts.c:1774
-mhard-float
के लिए__builtin
गणित के फ़ंक्शन इस्तेमाल करने की सुविधा ठीक की गई. एसटीएल के साथ-mhard-float
की समस्याओं को ठीक करने के बारे में मौजूदा जानकारी पाने के लिए, कृपया समस्या 61784 को फ़ॉलो करें.
- अन्य गड़बड़ियां ठीक की गईं:
-
- हेडर से जुड़ी समस्याएं ठीक की गईं:
poll.h
में,poll
के प्रोटोटाइप कोpoll(struct pollfd *, nfds_t, int);
में बदला गया.- Android के एपीआई लेवल 12 और 19 के लिए,
utimensat
कोlibc.so
में जोड़ा गया. अब इन लाइब्रेरी को Android के सभी एपीआई लेवल 12 से 19 के लिए शामिल किया गया है. - Android API लेवल 19 के लिए,
libc.so
मेंfutimens
को शामिल किया गया. - Android के एपीआई लेवल 8 और इसके बाद के वर्शन के लिए,
time.h
मेंclock_settime()
औरclock_nanosleep()
को जोड़ा गया है. time.h.
मेंCLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,
औरCLOCK_BOOTTIME_ALARM
को जोड़ा गया- पुरानी हो चुकी
CLOCK_REALTIME_HR
औरCLOCK_MONOTONIC_HR.
को हटाया गया
- सैंपल Teapot, MoreTeapots, और
source/android/ndk_helper
में:- इन्हें इस तरह से बदला गया है कि अब ये armeabi-v7a के लिए हार्ड-फ़्लोट एबीआई का इस्तेमाल करते हैं.
- इन्हें Android API लेवल 19 और इसके बाद के वर्शन पर इमर्सिव मोड का इस्तेमाल करने के लिए अपडेट किया गया है.
/system/lib/libdvm.so
मेंCheck_ReleaseStringUTFChars
से जुड़ी समस्या को ठीक कर दिया गया है. इस समस्या की वजह से x86 डिवाइसों पर ऐप्लिकेशन क्रैश हो रहे थे.
- सिंबल लिंक के ज़रिए NDK पैकेज का रेफ़रंस देने पर, cygwin में होने वाली
ndk-build
की गड़बड़ियों को ठीक किया गया. - विंडोज़ में होने वाली
ndk-build.cmd
की गड़बड़ियों को ठीक किया गया है. ये गड़बड़ियां तब होती हैं, जबLOCAL_SRC_FILES
में पूरे पाथ शामिल होते हैं.cmd.exe
(समस्या 69992) ndk-stack
स्क्रिप्ट में मौजूद समस्या को ठीक किया गया है. अब यह स्क्रिप्ट, रूटीन, फ़ाइल का नाम या लाइन नंबर न मिलने पर भी काम करेगी. इनमें से किसी भी मामले में, यह??
प्रिंट करता है.- windows-x64_64 टारगेट के लिए,
ndk-stack
स्टैक को ठीक किया गया है, ताकि अब यह गलती से किसी फ़्रेम लाइन कोstack:
सेक्शन में मौजूद ऐसी लाइन से मैच न करे जिसमेंpc
,eip
याip
शामिल नहीं है. उदाहरण के लिए:I/DEBUG ( 1151): #00 5f09db68 401f01c4 /system/lib/libc.so
- gabi++ को ठीक किया गया है, ताकि:
- यह C++ थ्रेड-लोकल ऑब्जेक्ट को असाइन करने के लिए malloc() का इस्तेमाल नहीं करता है.
- यह गड़बड़ी, gabi++ में डेडलॉक की समस्या को ठीक करती है. यह समस्या तब होती है, जब userdebug/eng Android प्लैटफ़ॉर्म बिल्ड में libc.debug.malloc की वैल्यू शून्य नहीं होती.
- हेडर से जुड़ी समस्याएं ठीक की गईं:
- अन्य बदलाव:
-
LOCAL_EXPORT_LDFLAGS
को जोड़ा गया.NDK_PROJECT_PATH=null
सेटिंग को इंटिग्रेटेड बिल्ड सिस्टम में इस्तेमाल करने के लिए पेश किया गया है. इसमें विकल्प साफ़ तौर परNDK_PROJECT_PATH=null
को पास किए जाते हैं.ndk-build
इस सेटिंग के चालू होने पर,ndk-build
NDK_PROJECT_PATH.
को ढूंढने की कोशिश नहीं करता. इस सेटिंग की वजह से, वैरिएबल NDK_PROJECT_PATH से डिफ़ॉल्ट सेटिंग भी नहीं पा सकते. इसलिए, अब इन वैरिएबल को साफ़ तौर पर बताना होगा. अगर इनकी डिफ़ॉल्ट वैल्यू मौजूद हैं, तो उन्हें भी बताना होगा:NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG
(ज़रूरी नहीं, डिफ़ॉल्ट रूप से 0 पर सेट होता है) औरApplication.mk
में शामिल अन्यAPP_*
.APP_ABI
को अब कॉमा लगाकर अलग की गई सूची में शामिल किया जा सकता है. उदाहरण के लिए:APP_ABI := "armeabi,armeabi-v7a"
-g
विकल्प का इस्तेमाल करके,android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip
नाम के एक अलग पैकेज में डीबग करने की जानकारी के साथ STL को फिर से बनाने की सुविधा दी गई है. इस विकल्प से,ndk-stack
स्क्रिप्ट को एसटीएल में बेहतर स्टैक डंप उपलब्ध कराने में मदद मिलती है. इस बदलाव से, फ़ाइनल फ़ाइल के कोड/साइज़ पर कोई असर नहीं पड़ना चाहिए.- कंपाइलेशन के समय
APP_ABI
की रिपोर्ट करने के लिए, बेहतरhello-jni
सैंपल. - स्टैटिक लाइब्रेरी बनाने के लिए, डिटरमिनिस्टिक मोड (विकल्प
-D
) मेंar
टूल का इस्तेमाल किया गया. (समस्या 60705)
Android NDK r9b (अक्टूबर 2013)
- अहम बदलाव:
-
- Android के एपीआई लेवल 18 तक के सभी वर्शन के लिए,
include/android/*h
औरmath.h
को अपडेट किया गया है. इनमें लेवल 13, 15, 16, और 17 को भी शामिल किया गया है. जोड़े गए एपीआई के बारे में जानकारी के लिए, बदलावों से जुड़े कमिट मैसेज देखें. ये मैसेज 68012 और 68014 के लिए हैं. (समस्याएं 47150, 58528, और 38423) - Android API लेवल 19 के लिए सहायता जोड़ी गई है. इसमें Renderscript बाइंडिंग भी शामिल है.
- मौजूदा armeabi-v7a ABI में
-mhard-float
के लिए सहायता जोड़ी गई. Clang के बारे में ज़्यादा जानकारी और इस पर लगी मौजूदा पाबंदियों के लिए,tests/device/hard-float/jni/Android.mk
देखें. - GNU कंपाइलर कलेक्शन (GCC) 4.8 से 4.8.2 पर माइग्रेट किया गया है. साथ ही, डाइग्नोस्टिक कलर
सपोर्ट जोड़ा गया है. डाइग्नोस्टिक कलर चालू करने के लिए,
-fdiagnostics-color=auto
सेट करें. इसके अलावा,-fdiagnostics-color=always,
याGCC_COLORS
को नीचे दिए गए तरीके से एक्सपोर्ट करें: ज़्यादा जानकारी के लिए, GCC भाषा से जुड़े विकल्प देखें.GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
- OpenGL ES 3.0 की सुविधाओं को दिखाने के लिए, दो नए सैंपल जोड़े गए हैं: Teapot और MoreTeapots. ये सैंपल, Android 4.1 (एपीआई लेवल 16) और उसके बाद के वर्शन वाले डिवाइसों पर काम करते हैं.
- GCC 4.7 और Clang 3.2 के साथ काम करने की सुविधा अब उपलब्ध नहीं है. इसे अगले रिलीज़ में हटा दिया जाएगा.
- Android के एपीआई लेवल 18 तक के सभी वर्शन के लिए,
- गड़बड़ियां ठीक की गई हैं:
-
- ARM GCC 4.6
thumb2
के 16-बिट रिलेटिव जंप टेबल जनरेट न कर पाने की समस्या को ठीक किया गया है. (जीसीसी से जुड़ी समस्या) g++.dg/cpp0x/lambda/lambda-defarg3.C
पर GCC 4.8 की इंटरनल कंपाइलर गड़बड़ी (आईसीई) को ठीक किया गया. (बदलाव 62770, GCC से जुड़ी समस्या)- Windows 32-बिट
*-gdb.exe
एक्ज़ीक्यूटेबल फ़ाइलों को लॉन्च करने में आ रही समस्या को ठीक किया गया है. (समस्या 58975) - बुलेट लाइब्रेरी बनाते समय GCC 4.8 ICE की समस्या को ठीक किया गया. गड़बड़ी का मैसेज यह है:
(Issue 58916, GCC Issue)internal compiler error: verify_flow_info failed
- प्रोलॉग कोड में अनवाइंडिंग के लिए
ARM.exidx
डेटा को स्किप करने के लिए, GDB/ARM बिल्ड में बदलाव किया गया है. साथ ही, exidx पर आधारित स्टैक अनवाइंडिंग को कंट्रोल करने के लिए, एक कमांड (set arm exidx-unwinding
) जोड़ी गई है. (समस्या 55826) - Clang 3.3 MIPS कंपाइलर की उस समस्या को ठीक किया गया है जिसमें HI और LO रजिस्टर का फिर से इस्तेमाल गलत तरीके से किया जाता था.
dbx_reg_number
में MIPS 4.7 ICE से जुड़ी समस्या ठीक कर दी गई है. गड़बड़ी का मैसेज यह है: (GCC पैच)external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
- ARM GCC 4.6
- अन्य गड़बड़ियां ठीक की गईं:
-
- हेडर से जुड़ी समस्याएं हल करना
- एआरएम
WCHAR_MIN
औरWCHAR_MAX
को बिना हस्ताक्षर किए हुए बनाया गया है. यह स्पेसिफ़िकेशन के मुताबिक है. X86/MIPS वर्शन पर हस्ताक्षर किए गए हैं._WCHAR_IS_ALWAYS_SIGNED
को परिभाषित करें, ताकि पहले जैसा व्यवहार वापस लाया जा सके. (समस्या 57749) include/netinet/tcp.h
को ठीक किया गया है, ताकि इसमेंTCP_INFO
स्टेट enum शामिल हो. (समस्या 38881)- c++11 मोड का इस्तेमाल करते समय, GCC 4.8 टूलचेन में चेतावनियां जनरेट होने से रोकने के लिए,
cdefs_elh.h
मैक्रो_C_LABEL_STRING
को ठीक किया गया है. (समस्या 58135, समस्या 58652) - हेडर
inttypes.h
से, मौजूद नहीं हैं ऐसे फ़ंक्शनimaxabs
औरimaxdiv
हटा दिए गए हैं. pthread_exit()
की रिटर्न वैल्यू औरpthread_self()
से जुड़ी समस्या ठीक की गई. (समस्या 60686)mkdtemp()
फ़ंक्शन जोड़ा गया है, जोbionic
हेडरstdlib.h
में पहले से मौजूद है.
- एआरएम
- Android API लेवल 11 पर Clang के साथ
samples/gles3jni
बनाने से जुड़ी समस्या ठीक की गई. - MCLinker को ठीक किया गया है, ताकि इन विकल्पों का इस्तेमाल एक से ज़्यादा बार किया जा सके:
-gc-sections
और--eh-frame-hdr
. --no-warn-mismatch
विकल्प को स्वीकार करने के लिए, MCLinker को ठीक किया गया.cpu-features
विकल्प में बदलाव किया गया है, ताकि यह न माना जाए कि सभी VFPv4 डिवाइसों पर IDIV काम करता है. अब यह विकल्प, सिर्फ़ वाइटलिस्ट किए गए डिवाइसों में IDIV जोड़ता है. इनमें Nexus 4 भी शामिल है. (समस्या 57637)android_native_app_glue.c
में, इवेंट के प्रीडिस्पैच ऑपरेशन पर गड़बड़ियों को गलत तरीके से लॉग करने की समस्या ठीक की गई है.gabi++
terminate और unexpected_handler पर सभी कार्रवाइयों को थ्रेड-सेफ़ बनाने के लिए ठीक किया गया.- Clang
-integrated-as
विकल्प से जुड़ी कई समस्याओं को ठीक किया गया है, ताकि यहssax-instructions
औरfenv
के लिए टेस्ट पास कर सके. - GCC 4.6/4.7/4.8 कंपाइलर में, लिंकर विकल्प
--eh-frame-hdr
को पास करने की समस्या ठीक की गई है. यह समस्या, स्टैटिक एक्ज़ीक्यूटेबल के लिए भी होती थी. ज़्यादा जानकारी के लिए, GCC पैच देखें. CPU-ARCH-ABIS.html
में अतिरिक्त ऐपोस्ट्रॉफ़ी को ठीक किया गया. ज़्यादा जानकारी के लिए,NDK-DEPENDS.html
देखें. (समस्या 60142)- Windows पर ndk-build के आउटपुट में मौजूद अतिरिक्त कोटेशन मार्क को ठीक किया गया. (समस्या 60649)
- Clang 3.3 को ठीक किया गया है, ताकि ARM में पहले से मौजूद एटॉमिक ऑपरेशंस को कंपाइल किया जा सके. जैसे,
__atomic_fetch_add
,__atomic_fetch_sub
, और__atomic_fetch_or
. - कस्टम किए गए
vfprintf
के साथ Clang 3.3 ICE को ठीक किया गया. (Clang की समस्या)
- हेडर से जुड़ी समस्याएं हल करना
- अन्य बदलाव:
-
- GCC के सभी बिल्ड के लिए OpenMP चालू किया गया. इस सुविधा का इस्तेमाल करने के लिए, अपनी बिल्ड सेटिंग में ये फ़्लैग जोड़ें:
कोड के उदाहरणों के लिए,LOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
tests/device/test-openmp
देखें ld.mcld
का साइज़ काफ़ी कम कर दिया गया है (1.5 एमबी बनामld.bfd
3. 5 एमबी औरld.gold
7.5 एमबी). इससे स्पीड में करीब 20% का सुधार हुआ है.LOCAL_CONLYFLAGS
औरAPP_CONLYFLAGS
को जोड़ा गया है, ताकि सिर्फ़ C पर लागू होने वाले विकल्पों के बारे में बताया जा सके. ये विकल्प C++ पर लागू नहीं होते. मौजूदाLOCAL_CFLAGS
औरAPP_CFLAGS
का इस्तेमाल C++ कंपाइलेशन के लिए भी किया जाता है, ताकि ज़्यादातर विकल्पों को दो बार बताने की ज़रूरत न पड़े. इसलिए,-std=gnu99
जैसे विकल्प, g++ बिल्ड में चेतावनी के साथ और clang++ बिल्ड में गड़बड़ी के साथ काम नहीं कर सकते.gabi++
ऐरे हेल्पर फ़ंक्शन जोड़े गए.- GCC के बिल्ड में बदलाव किया गया है, ताकि सभी
libgcc.a
फ़ाइलें-funwind-tables
के साथ बनाई जाएं. इससे स्टैक को पहले से ब्लॉक किए गए पॉइंट से आगे बढ़ाया जा सकता है. जैसे,__aeabi_idiv0
. - MIPS GCC4.6/4.7/4.8 में, Ingenic MXU के लिए सहायता जोड़ी गई है. इसके लिए, नया
-mmxu
विकल्प जोड़ा गया है. - ldxc1/sdxc1 को भी कंट्रोल करने के लिए, Extended MIPS GCC4.6/4.7/4.8
-mldc1-sdc1
- क्रेज़ी लिंकर जोड़ा गया. ज़्यादा जानकारी के लिए,
sources/android/crazy_linker/README.TXT
देखें. - 200x200 पिक्सल के बजाय, पूरी स्क्रीन पर ड्रॉ करने के लिए
bitmap-plasma
को ठीक किया गया. - एक जैसी फ़ाइलों के लिए सिंबल लिंक बनाकर, Linux और Darwin टूलचेन के साइज़ को 25% तक कम किया गया.
- GCC के सभी बिल्ड के लिए OpenMP चालू किया गया. इस सुविधा का इस्तेमाल करने के लिए, अपनी बिल्ड सेटिंग में ये फ़्लैग जोड़ें:
Android NDK r9 (जुलाई 2013)
- अहम बदलाव:
-
- Android 4.3 (एपीआई लेवल 18) के लिए सहायता जोड़ी गई. ज़्यादा जानकारी के लिए,
STABLE-APIS.html
औरsamples/gles3jni/README
में नए कोड के उदाहरण देखें. - OpenGL ES 3.0 के लिए हेडर और लाइब्रेरी जोड़ी गई हैं. यह Android 4.3 (एपीआई लेवल 18) और इसके बाद के वर्शन पर काम करता है.
- NDK में GNU Compiler Collection (GCC) 4.8 कंपाइलर जोड़ा गया. GCC 4.6 अब भी डिफ़ॉल्ट है. इसलिए, आपको इस विकल्प को साफ़ तौर पर चालू करना होगा:
ndk-build
बिल्ड के लिए,NDK_TOOLCHAIN_VERSION=4.8
एक्सपोर्ट करें या इसेApplication.mk
में जोड़ें.- स्टैंडअलोन बिल्ड के लिए,
--toolchain=
विकल्प का इस्तेमाल करें. यह विकल्पmake-standalone-toolchain.sh
में मौजूद होता है. उदाहरण के लिए:
--toolchain=arm-linux-androideabi-4.8
ध्यान दें:
-Wunused-local-typedefs
विकल्प,-Wall
की मदद से चालू किया जाता है. अगर कंपाइल-टाइम असर्ट का इस्तेमाल किया जाता है, तो__attribute__((unused))
जोड़ना न भूलें. जैसे,sources/cxx-stl/stlport/stlport/stl/config/features.h
, लाइन #311. ज़्यादा जानकारी के लिए, बदलाव 55460 देखेंध्यान दें: GCC 4.7 और इसके बाद के वर्शन में, ARM कंपाइलर, ARMv6 और इसके बाद के वर्शन के लिए डिफ़ॉल्ट रूप से, अलाइन न किए गए ऐक्सेस कोड जनरेट करते हैं. जिन कर्नल में यह सुविधा काम नहीं करती उनके लिए, आपको
-mno-unaligned-access
बिल्ड विकल्प जोड़ना पड़ सकता है. - Clang 3.3 के साथ काम करने की सुविधा जोड़ी गई.
NDK_TOOLCHAIN_VERSION=clang
बिल्ड विकल्प अब डिफ़ॉल्ट रूप से Clang 3.3 चुनता है.ध्यान दें: GCC 4.4.3 और Clang 3.1, दोनों को बंद कर दिया गया है. इन्हें NDK की अगली रिलीज़ से हटा दिया जाएगा.
- GNU प्रोजेक्ट डीबगर (GDB) को अपडेट किया गया है, ताकि यह python 2.7.5 के साथ काम कर सके.
- Windows होस्ट के लिए, MCLinker जोड़ा गया.
ld.gold
डिफ़ॉल्ट रूप से उपलब्ध होता है. इसलिए, MCLinker को चालू करने के लिए, आपको-fuse-ld=mcld
कोLOCAL_LDFLAGS
याAPP_LDFLAGS
में जोड़ना होगा. ndk-depends
टूल जोड़ा गया है. यह टूल, ईएलएफ़ लाइब्रेरी की डिपेंडेंसी प्रिंट करता है. ज़्यादा जानकारी के लिए,NDK-DEPENDS.html
देखें. (समस्या 53486)
- Android 4.3 (एपीआई लेवल 18) के लिए सहायता जोड़ी गई. ज़्यादा जानकारी के लिए,
- गड़बड़ियां ठीक की गई हैं:
-
android_native_app_glue
में इवेंट हैंडलिंग से जुड़ी संभावित समस्या को ठीक किया गया है. (समस्या 41755)- NEON लोड और स्टोर के लिए, VST और VLD निर्देशों के लिए ज़रूरी अलाइनमेंट जनरेट करने के लिए, ARM/GCC-4.7 बिल्ड को ठीक किया गया है. (GCC Issue 57271)
- स्ट्रिंग लिटरल पर नेगेटिव इंडेक्स की कॉन्स्टेंट वैल्यू के लिए, GCC 4.4.3/4.6/4.7 की कंपाइलर से जुड़ी अंदरूनी गड़बड़ी (आईसीई) को ठीक किया गया है. (समस्या 54623)
- ऑब्जेक्ट के पते के साथ कॉन्स्टेंट इनिशियलाइज़ेशन के लिए, GCC 4.7 में सेगमेंटेशन फ़ॉल्ट ठीक किया गया. (समस्या 56508)
- Boost 1.52.0 का इस्तेमाल करते समय,
-O
वैल्यू के लिए GCC 4.6 ARM सेगमेंटेशन फ़ॉल्ट ठीक किया गया. (समस्या 42891) wait4()
फ़ंक्शन के साथ काम करने के लिए,libc.so
औरlibc.a
को ठीक किया गया. (समस्या 19854)- x86 libc.so और libc.a फ़ाइलों को अपडेट किया गया है, ताकि उनमें
clone()
फ़ंक्शन को शामिल किया जा सके. LOCAL_SHORT_COMMANDS
गड़बड़ी को ठीक किया गया है. इस गड़बड़ी मेंlinker.list
फ़ाइल खाली होती है या उसका इस्तेमाल नहीं किया जाता है.- Mac OS पर GCC MIPS बिल्ड की समस्या ठीक की गई है, ताकि CFI डायरेक्टिव का इस्तेमाल किया जा सके. इसके बिना,
ld.mcld --eh-frame-hdr
अक्सर काम नहीं करता. llvm/lib/VMCore/Value.cpp
में Clang 3.2 X86/MIPS के कंपाइलर से जुड़ी अंदरूनी गड़बड़ी को ठीक किया गया है. (59021 बदलें)- GCC 4.7 64-बिट Windows असेंबलर क्रैश होने की समस्या ठीक की गई. (गड़बड़ी:
out of memory allocating 4294967280 bytes
). ndk-gdb
स्क्रिप्ट को अपडेट किया गया है, ताकि--start
या--launch
कार्रवाइयां अब GNU Debug Server का इंतज़ार करें. इससे, यह एक्ज़ीक्यूशन पाथ में पहले से सेट किए गए ब्रेकपॉइंट (जैसे, JNI कोड में ब्रेकपॉइंट) को ज़्यादा भरोसेमंद तरीके से हिट कर सकता है. (समस्या 41278)ध्यान दें: इस सुविधा के लिए jdb की ज़रूरत होती है. साथ ही, यह सुविधा ऐसे ब्रेकपॉइंट के बारे में चेतावनी देती है जो अभी तक लागू नहीं हुए हैं. पिछले व्यवहार को वापस लाने के लिए,
--nowait
विकल्प चुनें.- लाइब्रेरी की सूची खाली होने पर, GDB क्रैश होने की समस्या को ठीक किया गया है.
stepi
याblx pc
Thumb निर्देश के बादstepi
कमांड का इस्तेमाल करने पर, GDB के क्रैश होने की समस्या ठीक की गई है.bx pc
(समस्या 56962, समस्या 36149)DT_DEBUG
के बजायDT_MIPS_RLD_MAP
को खोजने के लिए, एमआईपीएसgdbserver
को ठीक किया गया. (समस्या 56586)- ndk-build स्क्रिप्ट में, सर्कुलर डिपेंडेंसी की समस्या ठीक की गई है. उदाहरण के लिए: अगर A->B और B->B है, तो B को बिल्ड से हटा दिया जाता था. (समस्या 56690)
- अन्य गड़बड़ियां ठीक की गईं:
-
ndk-build
स्क्रिप्ट को ठीक किया गया है, ताकि कमांड लाइन के विकल्प के तौर पर Clang का वर्शन तय किया जा सके. उदाहरण के लिए,NDK_TOOLCHAIN_VERSION=clang3.2
). इससे पहले, सिर्फ़ एनवायरमेंट वैरिएबल के तौर पर वर्शन तय करने का विकल्प उपलब्ध था.- Clang कंपाइलर का इस्तेमाल करते समय, MIPS बिल्ड टारगेट के लिए gabi++ का साइज़
_Unwind_Exception
से 24 पर सेट किया गया. (54141 बदलें) ndk-build
स्क्रिप्ट में सुधार किया गया है. इससे यह पक्का किया जा सकेगा किndk-build clean
कमांड का इस्तेमाल करते समय, पहले से बनी स्टैटिक लाइब्रेरी वाले प्रोजेक्ट से, बनी हुई लाइब्रेरी हटा दी गई हैं. (Change 54461, Change 54480)NDK_ANALYZE=1
विकल्प में बदलाव किया गया है, ताकि यह कम शब्दों में जानकारी दे.gnu-libstdc++/Android.mk
को ठीक किया गया, ताकि पुराने सिस्टम के साथ काम करने वाले बिल्ड के लिएbackward/
पाथ शामिल किया जा सके. (समस्या 53404)- इस वर्शन में,
stlport new
के कभी-कभी गलत वैल्यू दिखाने की समस्या को ठीक किया गया है. ndk-gdb
कोCPU_ABIS
के क्रम से मैच करने के लिए ठीक किया गया है, न किAPP_ABIS
के क्रम से. (समस्या 54033)- MacOSX पर NDK 64-बिट बिल्ड के कंपाइलर के लिए गलत पाथ चुनने की समस्या को ठीक किया गया है. (समस्या 53769)
- 64-बिट Windows Vista का पता लगाने के लिए, बिल्ड स्क्रिप्ट को ठीक किया गया है. (समस्या 54485)
- x86
ntonl/swap32
से जुड़ी गड़बड़ी ठीक की गई:invalid 'asm': operand number out of range
. (Issue 54465, Change 57242) - स्ट्रिंग लिटरल को मर्ज करने के लिए,
ld.gold
को ठीक किया गया. - बड़े सिंबल के अलाइनमेंट को मैनेज करने के लिए,
ld.gold
ठीक किया गया. --sort-section=name
विकल्प को चालू करने के लिए,ld.gold
को अपडेट किया गया.- GCC 4.4.3/4.6/4.7 में, स्टैटिक तौर पर लिंक किए गए प्रोग्राम के लिए
-export-dynamic
विकल्प को हटाने की समस्या ठीक की गई है. GCC अब स्टैटिक तौर पर लिंक किए गए प्रोग्राम के लिए,.interp
सेक्शन नहीं जोड़ता. - GCC 4.4.3 में,
_Unwind_Control_Block
केtypedef
में अंतर होने की वजह से कंपाइलेशन से जुड़ी गड़बड़ी को ठीक किया गया है.stlport
(समस्या 54426) - Windows पर बनाई गई
AndroidManifest.xml
फ़ाइलों को मैनेज करने के लिए,awk
स्क्रिप्ट को ठीक किया गया है. इन फ़ाइलों में आखिर में\r
वर्ण हो सकते हैं और इनकी वजह से बिल्ड से जुड़ी गड़बड़ियां हो सकती हैं. (समस्या 42548) make-standalone-toolchain.sh
को ठीक किया गया है, ताकिprebuilts/
डायरेक्ट्री की जांच की जा सके. इससे यह पता चलता है कि होस्ट 32 बिट का है या 64 बिट का.- Clang 3.2
-integrated-as
विकल्प को ठीक किया गया. - Clang 3.2 ARM EHABI कॉम्पैक्ट मॉडल
pr1
औरpr2
हैंडलर डेटा से जुड़ी समस्या ठीक की गई. - Clang की इस गड़बड़ी को ठीक करने के लिए, Clang
-mllvm -arm-enable-ehabi
विकल्प जोड़ा गया है:clang: for the -arm-enable-ehabi option: may only occur zero or one times!
- ऐप्लिकेशन मेनिफ़ेस्ट में
uses-sdk
एलिमेंट मौजूद न होने पर, बिल्ड फ़ेल होने की समस्या को ठीक किया गया है. (समस्या 57015)
- अन्य बदलाव:
-
- हेडर से जुड़ी समस्याएं ठीक की गईं
- हेडर में बदलाव किया गया है, ताकि
__set_errno
को इनलाइन फ़ंक्शन बनाया जा सके. ऐसा इसलिए किया गया है, क्योंकिerrno.h
में__set_errno
का इस्तेमाल अब नहीं किया जा सकता. साथ ही,libc.so
अब इसे एक्सपोर्ट नहीं करता. stdint.h
को शामिल करने के लिए,elf.h
में बदलाव किया गया. (समस्या 55443)sys/un.h
को अन्य हेडर से अलग रखा गया है. (समस्या 53646)MotionEvent_getHistorical
एपीआई फ़ैमिली की सभी गड़बड़ियों को ठीक किया गया है, ताकिconst AInputEvent* motion_event
का इस्तेमाल किया जा सके. (समस्या 55873)const void*
पाने के लिए,malloc_usable_size
को ठीक किया गया. (समस्या 55725)- stdint.h को C99 के साथ ज़्यादा बेहतर तरीके से काम करने के लिए ठीक किया गया. (46821 में बदलाव करें)
wchar.h
में बदलाव किया गया है, ताकिWCHAR_MAX
औरWCHAR_MIN
को फिर से तय न किया जा सके- पॉइंटर से जुड़े
PRI
औरSCN
मैक्रो के लिए,<inttypes.h>
एलान को ठीक किया गया. (समस्या 57218) - हमने
sys/cdefs.h
हेडर में बदलाव किया है, ताकि एपीआई लेवल 9 से कम के लिए__WCHAR_TYPE__
32-बिट हो. इसका मतलब है कि सभी एपीआई लेवल के लिएwchat_t
32-बिट है. पहले जैसा व्यवहार वापस लाने के लिए,_WCHAR_IS_8BIT
बूलियन वैरिएबल को तय करें. (समस्या 57267)
- हेडर में बदलाव किया गया है, ताकि
- NDK
docs/
में ज़्यादा फ़ॉर्मैटिंग जोड़ी गई है. साथ ही, दस्तावेज़ से जुड़ी अन्य समस्याओं को ठीक किया गया है. - स्टैटिक लाइब्रेरी बनाते समय, थिन आर्काइव तकनीक के लिए सहायता जोड़ी गई. (समस्या 40303)
make-standalone-toolchain.sh
स्क्रिप्ट को अपडेट किया गया है, ताकि--stl=stlport
विकल्प चुनने पर,gnustl
के साथ-साथstlport
लाइब्रेरी का भी इस्तेमाल किया जा सके. ज़्यादा जानकारी के लिए,STANDALONE-TOOLCHAIN.html
देखें.make-standalone-toolchain.sh
स्क्रिप्ट को अपडेट किया गया है, ताकि--llvm-version=
विकल्प,clang
औरclang++
के साथ-साथ$TOOLCHAIN_PREFIX-clang
और$TOOLCHAIN_PREFIX-clang++
स्क्रिप्ट भी बनाए. इससे होस्ट के clang और clang++ की परिभाषाओं का गलती से इस्तेमाल नहीं होगा.- अपस्ट्रीम Clang में दो ऑप्टिमाइज़ेशन को फिर से चालू करने के लिए दो फ़्लैग जोड़े गए हैं. हालांकि, GCC से कंपाइल किए गए कोड के साथ बेहतर तरीके से काम करने के लिए, NDK में इन्हें बंद कर दिया गया है:
- Clang 3.2+ में missing
return
semantics को फिर से चालू करने के लिए,
-fcxx-missing-return-semantics
फ़्लैग जोड़ा गया. आम तौर पर, वैल्यू दिखाने वाले फ़ंक्शन के लिए, सभी पाथ को return statement के साथ खत्म होना चाहिए. अगर ऐसा नहीं होता है, तो clang, बिना किसी रिटर्न स्टेटमेंट वाले पाथ पर एक अनडिफ़ाइंड निर्देश (या डीबग मोड में ट्रैप) डालता है. अगर आपको लगता है कि आपका कोड सही है, तो इस फ़्लैग का इस्तेमाल करें, ताकि ऑप्टिमाइज़र, अनडिफ़ाइंड बिहेवियर का फ़ायदा ले सके. अगर आपको पक्का पता नहीं है, तो इस फ़्लैग का इस्तेमाल न करें. ऐसा हो सकता है कि कॉल करने वाले को अब भी कोई गलत वैल्यू मिले. हालांकि, ऑप्टिमाइज़र इसका इस्तेमाल नहीं करेगा और आपके कोड को डीबग करना मुश्किल नहीं होगा. -fglobal-ctor-const-promotion
फ़्लैग जोड़ा गया है. इससे, स्टैटिक कंस्ट्रक्टर वाले ग्लोबल वैरिएबल को कॉन्स्टेंट के तौर पर प्रमोट करने की सुविधा को फिर से चालू किया जा सकेगा. इस फ़्लैग की मदद से, LLVM का ग्लोबल वैरिएबल ऑप्टिमाइज़ेशन पास, स्टैटिक कंस्ट्रक्टर वाले ग्लोबल वैरिएबल का आकलन करने की कोशिश करता है. साथ ही, उन्हें ग्लोबल कॉन्स्टेंट में बदलता है. हालांकि, यह ऑप्टिमाइज़ेशन सही है, लेकिन इससे GCC से कंपाइल किए गए कोड के साथ कुछ समस्याएं हो सकती हैं. उदाहरण के लिए, कोड कॉन्स्टेंट को बदलने लायक बनाने के लिएconst_cast
कर सकता है और उसमें बदलाव कर सकता है. GCC में, वैरिएबल को पढ़ा और लिखा जा सकता है. साथ ही, कोड गलती से चल जाता है. Clang में, const वैरिएबल रीड-ओनली मेमोरी में होता है. इससे आपका ऐप्लिकेशन क्रैश हो सकता है.
- Clang 3.2+ में missing
return
semantics को फिर से चालू करने के लिए,
- MIPS GCC और Clang कंपाइलर में
-mldc1-sdc1
जोड़ा गया. डिफ़ॉल्ट रूप से, कंपाइलर 8-बाइट ऑब्जेक्ट को सही तरीके से अलाइन करते हैं. साथ ही, उन्हें एक जगह से दूसरी जगह ले जाने के लिएldc1
औरsdc1
निर्देशों को जारी करते हैं. अगर आपका ऐप्लिकेशन, कस्टम ऐलोकेटर का इस्तेमाल करता है, तो हो सकता है कि वह डिफ़ॉल्ट ऐलोकेटर की तरह, नए ऑब्जेक्ट की 8-बाइट की सीमा के साथ हमेशा अलाइन न हो. ऐसे में, अलाइन न की गई मेमोरी परldc1
औरsdc1
कार्रवाइयों की वजह से, आपका ऐप्लिकेशन क्रैश हो सकता है. इस मामले में, समस्या को हल करने के लिए-mno-ldc1-sdc1
फ़्लैग का इस्तेमाल करें. - अगर
APP_PLATFORM_LEVEL
,APP_MIN_PLATFORM_LEVEL
से बड़ा है, तो इवेंट की गंभीरता को चेतावनी से बदलकर जानकारी कर दिया गया है. ऐसा हो सकता है किjni/Application.mk
मेंAPP_PLATFORM
की तुलना मेंAPP_PLATFORM_LEVEL
कम हो, क्योंकि NDK में सभी लेवल के लिए हेडर नहीं होते. इस मामले में, असल लेवल को नीचे की ओर शिफ़्ट कर दिया जाता है.APP_MIN_PLATFORM_LEVEL
को आपके ऐप्लिकेशन के मेनिफ़ेस्ट मेंandroid:minSdkVersion
के तौर पर तय किया जाता है. (समस्या 39752) cpu-features.c
मेंandroid_getCpuIdArm()
औरandroid_setCpuArm()
तरीके जोड़े गए. इस बदलाव से, ARM CPUID की जानकारी को आसानी से वापस पाने में मदद मिलती है. (समस्या 53689)- Clang कंपाइल करने के लिए, GCC 4.7 के
as/ld
का इस्तेमाल करने के लिएndk-build
में बदलाव किया गया.ध्यान दें: GCC 4.7 में,
monotonic_clock
औरis_monotonic
का नाम बदलकर,steady_clock
औरis_steady
कर दिया गया है. ndk-build
स्क्रिप्ट में ये नई चेतावनियां जोड़ी गईं:- अगर स्टैटिक लाइब्रेरी मॉड्यूल में
LOCAL_LDLIBS/LDFLAGS
का इस्तेमाल किया जाता है, तो चेतावनियां जोड़ी गईं. - अगर किसी कॉन्फ़िगरेशन में बनाने के लिए कोई मॉड्यूल नहीं है, तो चेतावनी जोड़ी गई है.
- शेयर की गई लाइब्रेरी या एक्ज़ीक्यूटेबल मॉड्यूल के
LOCAL_LDLIBS/LDFLAGS
में इस्तेमाल की जा रही नॉन-सिस्टम लाइब्रेरी के लिए चेतावनी जोड़ी गई है.
- अगर स्टैटिक लाइब्रेरी मॉड्यूल में
- बिल्ड स्क्रिप्ट अपडेट की गई हैं, ताकि अगर
APP_MODULES
को तय नहीं किया गया है औरAndroid.mk
में सिर्फ़ स्टैटिक लाइब्रेरी शामिल हैं, तो स्क्रिप्ट उन सभी को फ़ोर्स-बिल्ड कर दे. (समस्या 53502) ndk-build
को अपडेट किया गया है, ताकिLOCAL_SRC_FILES
में ऐब्सलूट पाथ का इस्तेमाल किया जा सके.*-gdbtui
के उन एक्ज़ीक्यूटेबल को हटा दिया गया है जो*-gdb
के एक्ज़ीक्यूटेबल के डुप्लीकेट हैं. इनमें-tui
विकल्प चालू है.- बिल्ड स्क्रिप्ट को अपडेट किया गया है, ताकि Edison Design Group (EDG) कंपाइलर का फ़्रंट-एंड
_STLP_HAS_INCLUDE_NEXT
फिर से चालू होने पर आपको चेतावनी दी जा सके. (समस्या 53646) - एनवायरमेंट वैरिएबल
NDK_LIBS_OUT
जोड़ा गया, ताकि डिफ़ॉल्ट$PROJECT/libs
सेlibraries/gdbserver
के पाथ को बदला जा सके. ज़्यादा जानकारी के लिए,OVERVIEW.html
देखें. - ndk-build स्क्रिप्ट के डिफ़ॉल्ट सेटिंग में बदलाव किया गया है, ताकि फ़ॉर्मैट स्ट्रिंग प्रोटेक्शन
-Wformat -Werror=format-security
के साथ कोड कंपाइल किया जा सके. इसे बंद करने के लिए,LOCAL_DISABLE_FORMAT_STRING_CHECKS=true
सेट करें. ज़्यादा जानकारी के लिए,ANDROID-MK.html
देखें ndk-gdb-py
में, STL को बेहतर तरीके से प्रिंट करने की सुविधा जोड़ी गई. ज़्यादा जानकारी के लिए,NDK-GDB.html
देखें.- googletest फ़्रेमवर्क के आधार पर टेस्ट जोड़े गए.
- टूलचेन की बिल्ड स्क्रिप्ट में एक सूचना जोड़ी गई है. इससे आपको चेतावनी मिलती है कि अगर मौजूदा शेल
bash
नहीं है.
- हेडर से जुड़ी समस्याएं ठीक की गईं
Android NDK r8e (मार्च 2013)
- अहम बदलाव:
-
- 64-बिट होस्ट टूलचेन सेट (पैकेज के नाम का सफ़िक्स
*-x86_64.*
) जोड़ा गया. ज़्यादा जानकारी के लिए,CHANGES.HTML
औरNDK-BUILD.html
देखें. - Clang 3.2 कंपाइलर जोड़ा गया. GCC 4.6 अब भी डिफ़ॉल्ट है. Clang कंपाइलर का इस्तेमाल करने के बारे में जानकारी के लिए,
CHANGES.HTML
देखें. - Linux/MacOSX होस्ट के लिए स्टैटिक कोड ऐनलाइज़र जोड़ा गया. विश्लेषण करने वाले टूल को इस्तेमाल करने के बारे में जानने के लिए,
CHANGES.HTML
पर जाएं. - Linux/MacOSX होस्ट के लिए, MCLinker को एक्सपेरिमेंटल सुविधा के तौर पर जोड़ा गया है.
ld.gold
लिंकर, डिफ़ॉल्ट रूप से उपलब्ध होता है. इसलिए, आपको इसे साफ़ तौर पर चालू करना होगा. ज़्यादा जानकारी के लिए,CHANGES.HTML
देखें. - मॉड्यूल की डिपेंडेंसी के लिए, ndk-build को टोपोलॉजिकल सॉर्ट का इस्तेमाल करने के लिए अपडेट किया गया है. इसका मतलब है कि बिल्ड,
LOCAL_STATIC_LIBRARIES
,LOCAL_WHOLE_STATIC_LIBRARIES
, औरLOCAL_SHARED_LIBRARIES
में बताई गई लाइब्रेरी के क्रम को अपने-आप सॉर्ट कर देता है. ज़्यादा जानकारी के लिए,CHANGES.HTML
देखें. (समस्या 39378)
- 64-बिट होस्ट टूलचेन सेट (पैकेज के नाम का सफ़िक्स
- गड़बड़ियां ठीक की गई हैं:
-
-O2
में सभी टूलचेन बनाने के लिए, बिल्ड स्क्रिप्ट को ठीक किया गया है. पिछली रिलीज़ में टूलचेन को बिना ऑप्टिमाइज़ेशन के गलत तरीके से बनाया गया था.- बिल्ड स्क्रिप्ट को ठीक किया गया है. यह स्क्रिप्ट, MacOSX के लिए 64-बिट में Clang/llvm को बिना किसी शर्त के बिल्ड करती है.
- GCC 4.6/4.7 में कंपाइलर से जुड़ी गड़बड़ी को ठीक किया गया है:
gen_thumb_movhi_clobber at config/arm/arm.md:5832
. (समस्या 52732) - बिल्ड से जुड़ी समस्या को ठीक किया गया है. इसमें GCC/ARM 4.6/4.7, 64-बिट एटॉमिक बिल्ट-इन फ़ंक्शन का इस्तेमाल करके कोड को लिंक नहीं कर पाता था. (समस्या 41297)
- GCC 4.7 लिंकर में, DIV के इस्तेमाल से जुड़ी गड़बड़ियों को ठीक किया गया है. (Sourceware से जुड़ी समस्या)
- GCC 4.7 में कंपाइलर से जुड़ी अंदरूनी गड़बड़ी को ठीक किया गया
build_data_member_initialization, at cp/semantics.c:5790
. - GCC 4.7 में कंपाइलर से जुड़ी अंदरूनी गड़बड़ी को ठीक किया गया
redirect_eh_edge_1, at tree-eh.c:2214
. (समस्या 52909) - GCC 4.7 में होने वाली गड़बड़ी को ठीक किया गया. (जीसीसी से जुड़ी समस्या)
<chrono>
क्लॉक रिज़ॉल्यूशन को ठीक किया गया औरsteady_clock
को चालू किया गया. (समस्या 39680)- GCC 4.7 libstdc++ के लिए
_GLIBCXX_HAS_GTHREADS
को चालू करने के लिए, टूलचेन को ठीक किया गया. (Issue 41770, Issue 41859) - X86 MXX/SSE कोड को लिंक करने में आ रही समस्या को ठीक किया गया है. यह समस्या,
posix_memalign
के मौजूद न होने की वजह से आ रही थी. (51872 बदलें) i386.c
में GCC4.7/X86 सेगमेंटेशन फ़ॉल्ट ठीक किया गया. फ़ंक्शनdistance_non_agu_define_in_bb()
. (50383 बदलें)- GCC4.7/X86 में समस्या ठीक की गई है, ताकि
cmov
को पहले की तरह इस्तेमाल किया जा सके. (जीसीसी से जुड़ी समस्या) - libstdc++/GCC4.7 में
setlocale()
की NULL वैल्यू को हैंडल करने की समस्या ठीक की गई. (समस्या 46718) ld.gold
के लिए, रनटाइम के दौरान__exidx_start
और__exidx_start_end
के अनडिफ़ाइंड रेफ़रंस की समस्या ठीक की गई. (52134 बदलें)- Eigen लाइब्रेरी का इस्तेमाल करते समय, Clang 3.1 में कंपाइलर से जुड़ी अंदरूनी गड़बड़ी को ठीक किया गया. (समस्या 41246)
- Clang 3.1 में कंपाइलर से जुड़ी गड़बड़ी को ठीक किया गया है. इसमें C++11 मोड में
<chrono>
शामिल है. (समस्या 39600) - Clang 3.1 में कंपाइलर से जुड़ी गड़बड़ी को ठीक किया गया है. यह गड़बड़ी,
rvalue
को यूनिफ़ॉर्म तरीके से शुरू करने के लिए, किसी मेथड कॉल का ऑब्जेक्ट कोड जनरेट करते समय होती थी. (समस्या 41387) - Clang 3.1/X86 स्टैक को फिर से अलाइन करने की समस्या ठीक की गई. (बदलाव 52154)
- Android 4.1.2 पर डीबग करते समय, GNU Debugger (GDB) SIGILL से जुड़ी समस्या ठीक की गई. (समस्या 40941)
- उस समस्या को ठीक किया गया है जिसमें सिंबल में लंबे और इनडायरेक्ट फ़ाइल पाथ होने पर, GDB
source:line
ब्रेकपॉइंट सेट नहीं कर पाता था. (समस्या 42448) - MIPS PIE एक्ज़ीक्यूटेबल के लिए, GDB
read_program_header
को ठीक किया गया. (बदलाव 49592) uncaught_exception()
मेंSTLport
सेगमेंटेशन फ़ॉल्ट को ठीक किया गया. (बदलाव 50236)STLport
,DW_EH_PE_udata4
, औरDW_EH_PE_udata8
के अलाइन न होने की वजह से, अपवाद हैंडलिंग मेंSTLport
बस की गड़बड़ी को ठीक किया गया.DW_EH_PE_udata2
nothrow new[]
ऑपरेटर के साथ Gabi++ में बार-बार होने वाली रिकर्सन की समस्या को ठीक किया गया. (समस्या 52833)- Gabi++ में, एक्सेप्शन हैंडलर पॉइंटर के ऑफ़सेट की गलत जानकारी को ठीक किया गया. (53446 बदलें)
- Gabi++ के फ़ालतू फ़्री ऑन एक्सेप्शन ऑब्जेक्ट को हटाया गया (बदलाव 53447)
- अन्य गड़बड़ियां ठीक की गईं:
-
- एनडीके हेडर से जुड़ी समस्याएं ठीक की गईं:
size_t
,ssize_t
, औरptrdiff_t
की गैर-ज़रूरी परिभाषाएं हटा दी गई हैं.- एमआईपीएस और एआरएम
fenv.h
हेडर को पिन किया गया है. stddef.h
को ठीक किया गया है, ताकिoffsetof
को फिर से तय न किया जाए, क्योंकि यह टूलचेन में पहले से मौजूद है.elf.h
कोElf32_auxv_t
औरElf64_auxv_t
के हिसाब से तय किया गया है. (समस्या 38441)#ifdef
हेडर फ़ाइल में#ifdef
C++ की परिभाषाओं को ठीक किया गया.OpenSLES_AndroidConfiguration.h
(समस्या 53163)
- मेमोरी खत्म होने की गड़बड़ी के बाद,
STLport
को चुपचाप बंद होने के बजाय बंद करने की सुविधा को ठीक किया गया. - सिस्टम और Gabi++ हेडर को ठीक किया गया है, ताकि इन्हें एपीआई लेवल 8 और इससे पहले के वर्शन के साथ कंपाइल किया जा सके.
cpufeatures
को ठीक किया गया, ताकि वह/proc/self/auxv
को पार्स न करे. (समस्या 43055)ld.gold
को ठीक किया गया है, ताकि यह होस्ट libstdc++ और Windows प्लैटफ़ॉर्म पर निर्भर न रहे. साथ ही,libgcc_sjlj_1.dll
लाइब्रेरी पर निर्भर न रहे.- Clang 3.1 को ठीक किया गया है. यह
.vsave
में रजिस्टर की सूची को अलग-अलग तरीके से दिखाता है और असेंबलर में काम नहीं करता. (49930 में बदलाव करें) - Clang 3.1 को ठीक किया गया है, ताकि libgabi++ को कंपाइल किया जा सके और MIPS बिल्ड टारगेट के लिए
test-stlport
टेस्ट पास किए जा सकें. (बदलाव 51961) - Clang 3.1 को ठीक किया गया है, ताकि डिफ़ॉल्ट रूप से सिर्फ़ C++ के लिए अपवाद चालू हो, न कि C के लिए.
- GNU अपवाद के ज़्यादातर टेस्ट पास करने के लिए, Clang 3.1 में कई समस्याएं ठीक की गईं.
- स्टैंडअलोन एनडीके कंपाइलर में
clang
औरclang++
स्क्रिप्ट को ठीक किया गया है, ताकि-cc1
का पता लगाया जा सके. साथ ही,-cc1
मिलने पर-target
को न दिखाया जा सके. Application.mk
में सेट किए गएNDK_APP_OUT
को देखने के लिए,ndk-build
को फ़िक्स किया गया.- X86
libc.so
औरlib.a
को ठीक किया गया है. इनमेंsigsetjmp
औरsiglongjmp
फ़ंक्शन मौजूद नहीं थे. ये फ़ंक्शन,setjmp.h
में पहले से ही तय किए गए हैं. (समस्या 19851) - GCC 4.4.3/4.6/4.7 libstdc++ को C++ 11 में Clang के साथ काम करने के लिए पैच किया गया. (Clang की समस्या)
HOST_AWK
को पास किए गए आर्ग्युमेंट में cygwin पाथ ठीक किया गया.- विंडोज़ में, प्रोजेक्ट की JNI डायरेक्ट्री से स्क्रिप्ट चलाने पर,
ndk-build
स्क्रिप्ट की चेतावनी से जुड़ी समस्या ठीक की गई. (समस्या 40192) - उस समस्या को ठीक किया गया है जिसमें
LOCAL_PATH
की परिभाषा में ट्रेलिंग व्हाइटस्पेस होने पर,ndk-build
स्क्रिप्ट नहीं बनती है. (समस्या 42841)
- एनडीके हेडर से जुड़ी समस्याएं ठीक की गईं:
- अन्य बदलाव:
-
- GCC/MIPS टूलचेन में थ्रेडिंग की सुविधा चालू की गई.
- GCC के अपवादों को हैंडल करने वाले हेल्पर
__cxa_begin_cleanup
और__cxa_type_match
को अपडेट किया गया है. अब ये GNU libstdc++ में, पहले छिपी हुई सेटिंग के बजाय डिफ़ॉल्ट सेटिंग के साथ दिखेंगे. ज़्यादा जानकारी के लिए,CHANGES.HTML
देखें. - बिल्ड स्क्रिप्ट अपडेट की गई हैं, ताकि Gabi++ और STLport स्टैटिक लाइब्रेरी अब छिपी हुई विज़िबिलिटी के साथ बनाई जाएं. हालांकि, अपवाद हैंडलिंग हेल्पर के लिए ऐसा नहीं किया जाएगा.
- बिल्ड को अपडेट किया गया है, ताकि
STLport
को थंब मोड में एआरएम के लिए बनाया जा सके. - Gabi++ में
std::set_new_handler
के लिए सहायता जोड़ी गई. (समस्या 52805) - GNU libstdc++ में
FUTEX
सिस्टम कॉल की सुविधा चालू की गई. ndk-build
को अपडेट किया गया है, ताकि यह पहले से बनी स्टैटिक लाइब्रेरी को प्रोजेक्ट कीndk-build
डायरेक्ट्री में कॉपी न करे.obj/local/<abi>/
(समस्या 40302)__ARM_ARCH_5*__
को एआरएमtoolchains/*/setup.mk
स्क्रिप्ट से हटाया गया. (समस्या 21132)- ARM के लिए, थंब में GNU libstdc++ की अतिरिक्त लाइब्रेरी बनाई गई हैं.
- 32-बिट FPU के साथ, MIPS फ़्लोटिंग-पॉइंट
madd/msub/nmadd/nmsub/recip/rsqrt
निर्देश चालू किए गए हैं. - GCC 4.6 और 4.7 में ग्रेफ़ाइट लूप ऑप्टिमाइज़र चालू किया गया है, ताकि ज़्यादा ऑप्टिमाइज़ेशन किए जा सकें:
-fgraphite
,-fgraphite-identity
,-floop-block
,-floop-flatten
,-floop-interchange
,-floop-strip-mine
,-floop-parallelize-all
, और-ftree-loop-linear
. (info) - Linux और Max OS X के 32-बिट होस्ट पर Clang 3.1 के लिए
polly
चालू किया गया है. यह मेमोरी ऐक्सेस का विश्लेषण करता है और उसे ऑप्टिमाइज़ करता है. (info) - Linux पर GCC 4.7, 4.6, Clang 3.2, और Clang 3.1 में
-flto
चालू है. (LLVMgold.so के ज़रिए Clang LTO). MIPS कंपाइलर टारगेट काम नहीं करते, क्योंकिld.gold
उपलब्ध नहीं है. - GCC 4.6/4.7 में
ld.gold
के लिए,--plugin
और--plugin-opt
चालू किया गया. - GCC 4.7 में
ld.gold
के लिए--text-reorder
चालू किया गया. - GNU libstdc++ को
_GLIBCXX_USE_C99_MATH
के साथ कॉन्फ़िगर किया गया है. इससे बायोनिक हेडर मेंisinf
स्क्रिप्ट को अनडिफ़ाइन किया जाता है. ज़्यादा जानकारी के लिए,CHANGES.html
देखें. - बिल्ड स्क्रिप्ट में
APP_LDFLAGS
जोड़ा गया. ज़्यादा जानकारी के लिए,ANDROID-MK.html
देखें. - बिल्ड स्क्रिप्ट को अपडेट किया गया है, ताकि
NDK_LOG=0
,NDK_LOG
को बंद कर सके. - बिल्ड स्क्रिप्ट को अपडेट किया गया है, ताकि
NDK_HOST_32BIT=0
, होस्ट डेवलपर एनवायरमेंट के 32-बिट टूलचेन को बंद कर सके. - डिफ़ॉल्ट GCC/X86 फ़्लैग
-march=
और-mtune=
कोpentiumpro
औरgeneric
से बदलकरi686
औरatom
कर दिया गया है. - बेहतर टूलचेन बिल्ड स्क्रिप्ट:
mingw
बिल्ड टाइप के लिए,build-gcc.sh
में रेस कंडीशन की समस्या को ठीक किया गया है. इस समस्या की वजह से, पैरलल बिल्ड प्रोसेसिंग में काफ़ी रुकावट आ रही थी.build-gabi++.sh
औरbuild-stlport.sh
को अपडेट किया गया है, ताकि अब वे NDK पैकेज से चल सकें. (समस्या 52835)MSys
यूटिलिटी कलेक्शन मेंrun-tests.sh
को ठीक किया गया.- 64-बिट वाले होस्ट टूलचेन और कैनेडियन क्रॉस बिल्ड के लिए बेहतर सहायता.
build-mingw64-toolchain.sh
स्क्रिप्ट को नए वर्शन में अपडेट किया गया.libgnustl_static.a
औरstlport_static.a
को बिना छिपाए दिखाने का विकल्प जोड़ा गया.
Android NDK r8d (दिसंबर 2012)
- अहम बदलाव:
-
- NDK में GNU कंपाइलर कलेक्शन (GCC) 4.7 कंपाइलर जोड़ा गया. GCC 4.6 कंपाइलर अब भी डिफ़ॉल्ट कंपाइलर है. इसलिए, आपको नए वर्शन को इस तरह से चालू करना होगा:
ndk-build
के लिए,NDK_TOOLCHAIN_VERSION=4.7
वैरिएबल एक्सपोर्ट करें या इसेApplication.mk
में जोड़ें.- स्टैंडअलोन बिल्ड के लिए,
--toolchain=
विकल्प कोmake-standalone-toolchain.sh
में जोड़ें. उदाहरण के लिए:--toolchain=arm-linux-androideabi-4.7
ध्यान दें: यह सुविधा एक्सपेरिमेंट के तौर पर उपलब्ध है. कृपया इसे आज़माएं और किसी भी समस्या की शिकायत करें.
- gabi++ के ज़रिए
stlport
अपवाद की सुविधा जोड़ी गई. ध्यान दें कि नया gabi++dlopen
और उससे जुड़े कोड पर निर्भर करता है. इसका मतलब है कि:-static
विकल्प का इस्तेमाल करके, अब स्टैटिक एक्ज़ीक्यूटेबल नहीं बनाया जा सकता. इसके अलावा,APP_STL := stlport_static
का इस्तेमाल करकेlibstlport_static.a
को शामिल नहीं किया जा सकता. (हालांकि, अब भी स्टैंडअलोन टूलचेन के साथ-static
विकल्प का इस्तेमाल किया जा सकता है.)include $(BUILD_EXECUTABLE)
का इस्तेमाल करके डाइनैमिक एक्ज़ीक्यूटेबल को कंपाइल करने की सुविधा काम करती रहेगी, क्योंकि कंपाइलर-ldl
विकल्प को अपने-आप जोड़ देता है.- अगर आपका प्रोजेक्ट
-nostdlib
और {-Wl,--no-undefined} का इस्तेमाल करके लिंक करता है, तो आपको-nostdlib
विकल्प को मैन्युअल तरीके से शामिल करना होगा.-ldl
CPLUSPLUS-SUPPORT.html
देखें.ध्यान दें: यह सुविधा एक्सपेरिमेंट के तौर पर उपलब्ध है. यह GCC 4.4.3 या Clang 3.1 की तुलना में, GCC 4.6/4.7 कंपाइलर के साथ बेहतर तरीके से काम करती है. कृपया इसे आज़माएं और किसी भी समस्या की शिकायत करें.
- x86 के लिए
-mstack-protector-guard=
विकल्प जोड़ा गया है. इसकी मदद से, इन दोनों में से कोई एक विकल्प चुना जा सकता है: a ग्लोबल डिफ़ॉल्ट पाथ, जो पुराने Android C लाइब्रेरी (बायोनिक) के साथ काम करता है और-fstack-protector
,-fstack-protector-all
, और-fstack-protector-strong
के लिए नया tls पाथ (%gs:20). इसके लिए, GCC 4.6 और इससे ऊपर के कंपाइलर का इस्तेमाल किया जाता है.ध्यान दें:
-mstack-protector-guard
सेटिंग से,-fstack-protector*
के कोई भी विकल्प चालू नहीं होते. - Android 4.1 और इसके बाद के वर्शन में,
/proc
के ज़रिए अपने-आप पता लगाने की सुविधा काम नहीं करती. इसलिए,android_setCpu()
फ़ंक्शन कोsources/android/cpufeatures/cpu-features.c
में जोड़ा गया है, ताकि इसका इस्तेमाल किया जा सके. (Chromium Issue 164154)
- NDK में GNU कंपाइलर कलेक्शन (GCC) 4.7 कंपाइलर जोड़ा गया. GCC 4.6 कंपाइलर अब भी डिफ़ॉल्ट कंपाइलर है. इसलिए, आपको नए वर्शन को इस तरह से चालू करना होगा:
- गड़बड़ियां ठीक की गई हैं:
-
ndk-build
स्क्रिप्ट का इस्तेमाल करते समय, ऑब्जेक्ट फ़ाइलों को बिना वजह फिर से बनाने की समस्या ठीक की गई. (समस्या 39810)- Mac OS X 10.6.x के लिए NDK 8c रिलीज़ के साथ, लिंकर की गड़बड़ी को ठीक किया गया है. इससे यह गड़बड़ी होती थी:
यह समस्या Mac OS X 10.7 पर बिल्ड करने की वजह से हुई. इससे ऐसे बाइनरी फ़ाइलें बनीं जो Mac OS 10.6.x और NDK के साथ काम नहीं करती थीं.dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
- Clang++ की स्टैंडअलोन बिल्ड स्क्रिप्ट से
-x c++
विकल्प हटा दिए गए हैं. (समस्या 39089) - Cygwin में
NDK_TOOLCHAIN_VERSION=clang3.1
विकल्प का इस्तेमाल करके समस्याएं ठीक की गईं. (समस्या 39585) - Cygwin या MinGW एनवायरमेंट का इस्तेमाल करके, स्टैंडअलोन टूलचेन जनरेट करने की अनुमति देने के लिए,
make-standalone-toolchain.sh
स्क्रिप्ट को ठीक किया गया है. इस टूलचेन का इस्तेमाल Cygwin, MingGW या CMD.exe एनवायरमेंट में किया जा सकता है. (समस्या 39915, समस्या 39585) - ARM और X86 के लिए, Android 14 के बिल्ड में
SL_IID_ANDROIDBUFFERQUEUESOURCE
विकल्प जोड़ा गया. (समस्या 40625) ANDROID_CPU_X86_FEATURE_MOVBE
सुविधा के लिए, x86 सीपीयू की पहचान करने से जुड़ी समस्या ठीक की गई. (समस्या 39317)- उस समस्या को ठीक किया गया है जिसकी वजह से स्टैंडर्ड टेंप्लेट लाइब्रेरी (एसटीएल), C++ के उन सोर्स का इस्तेमाल नहीं कर पा रही थी जिनमें
.cpp
फ़ाइल एक्सटेंशन नहीं है. - GCC 4.6 ARM में कंपाइलर से जुड़ी अंदरूनी गड़बड़ी को ठीक किया गया है. यह गड़बड़ी at reload1.c:1061 पर हुई थी. (समस्या 20862)
- GCC 4.4.3 ARM में कंपाइलर से जुड़ी अंदरूनी गड़बड़ी को ठीक किया गया है. यह गड़बड़ी at emit-rtl.c:1954 पर हुई थी. (समस्या 22336)
- GCC 4.4.3 ARM में कंपाइलर से जुड़ी अंदरूनी गड़बड़ी को ठीक किया गया है. यह गड़बड़ी postreload.c:396 पर हुई थी. (समस्या 22345)
- GCC 4.6/4.7 में लैम्डा फ़ंक्शन स्किप करने की समस्या ठीक की गई. (समस्या 35933)
- अन्य गड़बड़ियां ठीक की गईं:
-
- NDK हेडर फ़ाइल से जुड़ी गड़बड़ियां ठीक की गईं:
- तय की गई
__WINT_TYPE__
औरwint_t
एक ही तरह की होनी चाहिए. android/bitmap.h
में टाइपिंग की गड़बड़ी को ठीक किया गया. (समस्या 15134)errno.h
में टाइपिंग की गड़बड़ी को ठीक किया गया.sys/cdefs.h
में__STDC_VERSION__
की मौजूदगी की जांच करने की सुविधा जोड़ी गई है. (समस्या 14627)byteswap.h
औरdirent.h
में हेडर को फिर से व्यवस्थित किया गया है.limits.h
को ठीक किया गया है, ताकि इसमेंpage.h
शामिल किया जा सके. इससेPAGE_SIZE
सेटिंग मिलती हैं. (समस्या 39983)glGetAttribLocation()
औरglGetUniformLocation()
के लिए, सामान लौटाने का टाइपint
से बदलकरGLint
किया गया.- x86 बिल्ड के लिए,
__BYTE_ORDER
कॉन्सटेंट को ठीक किया गया. (समस्या 39824)
- तय की गई
- ARM बिल्ड के लिए,
ndk-build
स्क्रिप्ट में यह बदलाव किया गया है कि वह-Os
को-O2
से न बदले. HOST_AWK
,HOST_SED
, औरHOST_MAKE
सेटिंग को बदलने की अनुमति देने के लिए, बिल्ड स्क्रिप्ट ठीक की गई हैं.ld.gold
के लिए,fsck_msdos
बिल्ड में Intel C/C++ कंपाइलर (ICC) से बनाए गए ऑब्जेक्ट को लिंक करने से जुड़ी समस्या को ठीक किया गया है.- Clang में, एआरएम ईएचएबीआई के लिए तय की गई शर्तों के मुताबिक काम करने की सुविधा को ठीक किया गया है.
- GNU Debugger (GDB) को ठीक किया गया है, ताकि
solib
इवेंट के दौरान टारगेट के लिंक मैप पर कम समय खर्च हो. (समस्या 38402) - शेयर की गई फ़ोटो लाइब्रेरी को लिंक करते समय,
libgcc.a
फ़ाइल के मौजूद न होने की समस्या को ठीक किया गया है.
- NDK हेडर फ़ाइल से जुड़ी गड़बड़ियां ठीक की गईं:
- अन्य बदलाव:
-
- GCC 4.6 के लिए, ARM में पहले से मौजूद 64-बिट वाले एटॉमिक फ़ंक्शन को बैकपोर्ट किया गया.
- ऑडियो आउटपुट में होने वाली देरी के बारे में दस्तावेज़ जोड़ा गया है. साथ ही, अन्य दस्तावेज़ और गड़बड़ियों को ठीक किया गया है.
- Clang के साथ डीबग बिल्ड को ठीक किया गया है, ताकि अब नॉन-वॉइड फ़ंक्शन, रिटर्न स्टेटमेंट के बिना पाथ के लिए
SIGILL
सिग्नल जनरेट करें. - सफ़िक्स
-clang3.1
स्वीकार करने के लिएmake-standalone-toolchain.sh
को अपडेट किया गया है. यह GCC 4.6 टूलचेन में--llvm-version=3.1
जोड़ने के बराबर है. - GCC और Clang की गड़बड़ी की रिपोर्ट के यूआरएल को अपडेट करके यह कर दिया गया है: https://source.android.com/source/report-bug s.html
llvm-objdump
में ARM ELF के लिए सहायता जोड़ी गई.- Clang बिल्ड के लिए, treating c input as c++ चेतावनी को बंद किया गया.
- बिल्ड को अपडेट किया गया है, ताकि
libiberty.a
का सिर्फ़ 32-बिट वर्शन बनाया जा सके और उसेlib32/
में रखा जा सके.
Android NDK r8c (नवंबर 2012)
- अहम बदलाव:
-
- NDK में Clang 3.1 कंपाइलर जोड़ा गया. GNU कंपाइलर कलेक्शन (GCC) 4.6 अब भी डिफ़ॉल्ट कंपाइलर है. इसलिए, आपको Clang कंपाइलर के विकल्प को साफ़ तौर पर चालू करना होगा. इसके लिए, यह तरीका अपनाएं:
ndk-build
के लिए,NDK_TOOLCHAIN_VERSION=clang3.1
एक्सपोर्ट करें या इस एनवायरमेंट वैरिएबल सेटिंग कोApplication.mk
में जोड़ें.- स्टैंडअलोन बिल्ड के लिए,
--llvm-version=3.1
कोmake-standalone-toolchain.sh
में जोड़ें. इसके बाद, अपने मेकफ़ाइल मेंCC
औरCXX
को<tool-path>/bin/clang
और<tool-path>/bin/clang++
से बदलें. ज़्यादा जानकारी के लिए,STANDALONE-TOOLCHAIN.html
पर जाएं.
ध्यान दें: यह सुविधा एक्सपेरिमेंट के तौर पर उपलब्ध है. कृपया इसे आज़माएं और किसी भी समस्या की शिकायत करें.
- Windows टूलचेन के लिए, गोल्ड लिंकर
ld.gold
जोड़ा गया. सभी होस्ट पर, ARM और X86 के लिए Gold linker भी डिफ़ॉल्ट रूप से उपलब्ध होता है.ld.bfd
लिंकर का इस्तेमाल करने के लिए, इसे बदला जा सकता है. इसके लिए,Android.mk
मेंLOCAL_LDFLAGS += -fuse-ld=bfd
जोड़ें या लिंक करने वाली g++/clang++ कमांड लाइन में-fuse-ld=bfd
पास करें. ndk-build[.cmd]
औरndk-gdb
स्क्रिप्ट में, NDK पाथ में मौजूद स्पेस की जांच करने की सुविधा जोड़ी गई है. इससे, ऐसी बिल्ड गड़बड़ियों को रोका जा सकेगा जिनका पता लगाना मुश्किल होता है.- एपीआई लेवल को मैनेज करने के तरीके में ये बदलाव किए गए हैं:
- बिल्ड लॉजिक में बदलाव किया गया है, ताकि
APP_PLATFORM
,project.properties
याdefault.properties
मेंandroid-13
के ज़रिएandroid-10
तय करने वाले प्रोजेक्ट,android-14
के बजायandroid-9
के साथ लिंक हो सकें. - अपडेट किया गया बिल्ड, ताकि android-16 (Jelly Bean) या इसके बाद के वर्शन का इस्तेमाल करने वाले एक्ज़ीक्यूटेबल,
-fPIE
विकल्प के साथ कंपाइल किए जा सकें. यह विकल्प, पोज़िशन से अलग एक्ज़ीक्यूटेबल (पीआईई) के लिए होता है.APP_PIE
विकल्प की मदद से, इस सेटिंग को कंट्रोल किया जा सकता है. ज़्यादा जानकारी के लिए,APPLICATION-MK.html
पर जाएं.ध्यान दें: 14 से ऊपर के सभी एपीआई लेवल अब भी
platforms/android-14
के साथ लिंक होते हैं. साथ ही, कोई नयाplatforms/android-N
नहीं जोड़ा गया है. ndk-build
में बदलाव किया गया है, ताकि अगर अडजस्ट किया गया एपीआई लेवल, प्रोजेक्ट केAndroidManifest.xml
में मौजूदandroid:minSdkVersion
से ज़्यादा हो, तो चेतावनियां दी जा सकें.
- बिल्ड लॉजिक में बदलाव किया गया है, ताकि
cpu-features
हेल्पर लाइब्रेरी को अपडेट किया गया है, ताकि इसमें एआरएम से जुड़ी ज़्यादा सुविधाएं शामिल की जा सकें. ज़्यादा जानकारी के लिए,sources/android/cpufeatures/cpu-features.h
पर जाएं.- X86 प्लैटफ़ॉर्म पर, long double को 8 बाइट में बदला गया. अब इस डेटा टाइप का साइज़, डबल डेटा टाइप के साइज़ के बराबर है. हालांकि, इसे अब भी एक अलग टाइप माना जाता है.
APP_ABI=armeabi-v7a
के लिए अपडेट किया गया बिल्ड:- इस बिल्ड टाइप में बदलाव किया गया है, ताकि लिंकर को
-march=armv7-a
पैरामीटर भेजा जा सके. इस बदलाव से यह पक्का होता है कि v7 के लिए खास तौर पर बनाई गई लाइब्रेरी औरcrt*.o
सही तरीके से लिंक किए गए हैं. - पिछली रिलीज़ में इस्तेमाल किए गए
-mfpu=vfp
विकल्प के बजाय,ndk-build
में-mfpu=vfpv3-d16
जोड़ा गया.
- इस बिल्ड टाइप में बदलाव किया गया है, ताकि लिंकर को
- NDK में Clang 3.1 कंपाइलर जोड़ा गया. GNU कंपाइलर कलेक्शन (GCC) 4.6 अब भी डिफ़ॉल्ट कंपाइलर है. इसलिए, आपको Clang कंपाइलर के विकल्प को साफ़ तौर पर चालू करना होगा. इसके लिए, यह तरीका अपनाएं:
- गड़बड़ियां ठीक की गई हैं:
-
- उस समस्या को ठीक किया गया है जिसमें रूट के तौर पर
make-standalone-toolchain.sh
चलाने पर, कुछ उपयोगकर्ताओं के लिए स्टैंड अलोन टूल चेन ऐक्सेस नहीं की जा सकती थी. (समस्या 35279)- NDK रिलीज़ पैकेज में मौजूद सभी फ़ाइलों और एक्ज़ीक्यूटेबल के लिए, सभी को पढ़ने और एक्ज़ीक्यूट करने की अनुमतियां सेट की जाती हैं.
libstdc++.a
को कॉपी करने पर, उसके मालिकाना हक/ग्रुप की जानकारी अब सुरक्षित रखी जाती है.
- Windows के प्रीबिल्ट
echo.exe
से, काम के न रहने वाले\r
को हटाया गया. फ़ालतू\r
की वजह से, GNU Debugger (GDB) मेंgdb.setup
काम नहीं कर सका. ऐसा इसलिए हुआ, क्योंकि यह गलत तरीके से पाथ का हिस्सा बन गया था. (समस्या 36054) - Windows के पैरलल बिल्ड से जुड़ी समस्या ठीक की गई है.
host-mkdir
को लागू करने में समय से जुड़ी समस्याओं की वजह से, कभी-कभी ये बिल्ड पूरे नहीं हो पाते थे. (समस्या 25875) - GCC 4.4.3 GNU
libstdc++
को डिफ़ॉल्ट रूप सेtypeinfo
नामों को मर्ज नहीं करने के लिए ठीक किया गया. ज़्यादा जानकारी के लिए,toolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo
देखें. (समस्या 22165) - GCC 4.6 में
null
कॉन्टेक्स्ट से जुड़ी समस्या ठीक की गई हैcp/mangle.c::write_unscoped_name
. इस समस्या की वजह से, कॉन्टेक्स्टnull
होने पर GCC क्रैश हो सकता था. साथ ही,TREE_CODE
में डीरेफ़रंस किया जा सकता था. - फ़्लोट के लिए, एआरएम नीयॉन के हिसाब से टाइप की गई परिभाषाओं के लिए, GCC 4.4.3 के क्रैश होने की समस्या ठीक की गई. (समस्या 34613)
STLport
के_IteWrapper::operator*()
इंटरनल इंप्लीमेंटेशन से जुड़ी समस्या ठीक की गई है. इस समस्या में, डीरेफ़रंस की गई वैल्यू को होल्ड करने वाली पुरानी स्टैक लोकेशन को वापस कर दिया जाता था. इससे रनटाइम क्रैश हो जाते थे. (समस्या 38630)- ARM से जुड़ी गड़बड़ियां ठीक की गईं:
- ARM GCC 4.4.3/4.6
g++
में यह समस्या ठीक की गई है कि GCC 4.4 में <va_list> के मैंगलिंग में बदलाव किया गया था. इस चेतावनी से बचने के लिए,-Wno-psabi
स्विच का इस्तेमाल करने की अब ज़रूरत नहीं है. - उस समस्या को ठीक किया गया है जिसमें
LOCAL_SRC_FILES
में.arm
या.neon
सफ़िक्स वाले प्रोजेक्ट मेंAPP_STL
का भी इस्तेमाल किया जाता था.APP_STL
की मदद से,ndk-build
स्क्रिप्ट, कंपाइल करने के लिए STLheader/lib
पाथ जोड़ने से पहले,LOCAL_SRC_FILES
में C++ फ़ाइलें खोजती है. खोज से पहले.arm
और.neon
सफ़िक्स को फ़िल्टर करने के लिए,ndk-build
में बदलाव किया गया. ऐसा न करने पर,LOCAL_SRC_FILES
में मौजूद आइटम, जैसे किmyfile.cpp.arm.neon
को C++ कोड के तौर पर कंपाइल नहीं किया जाएगा. binutils-2.21/ld.bfd
को ठीक किया गया है, ताकि यहtag_FP_arch
के बिना पुराने binutils से ऑब्जेक्ट को लिंक कर सके. इससे GNU Binutils में assertion fail गड़बड़ी के मैसेज दिख रहे थे. (समस्या 35209)binutils-2.19/ld
, नएbinutils-2.21
की मदद से पहले से बनाए गए ऑब्जेक्ट को लिंक करता है, तब Unknown EABI object attribute 44 वाली चेतावनी को हटाया गया- GNU
stdc++
कंपाइलेशन में-mthumb
और-march=armv7-a
, दोनों के साथ समस्या ठीक की गई. इसके लिए,make-standalone-toolchain.sh
में बदलाव करके,armv7-a/thumb
सब-डायरेक्ट्री मेंheaders/libs
को पॉप्युलेट किया गया. (समस्या 35616) - unresolvable R_ARM_THM_CALL relocation गड़बड़ी को ठीक किया गया. (समस्या 35342)
- कंपाइलर की अंदरूनी गड़बड़ी को ठीक किया गया है. यह गड़बड़ी
reload1.c:3633
पर हुई थी. इसकी वजह यह थी कि एआरएम बैक-एंड,char
से साइन-एक्सटेंड करते समय गलत ऑपरेंड टाइप की उम्मीद कर रहा था. (GCC Issue 50099) - शिफ़्ट की गई नेगेटिव वैल्यू की वजह से कंपाइलर में होने वाली अंदरूनी गड़बड़ी को ठीक किया गया. (जीसीसी से जुड़ी समस्या)
- ARM GCC 4.4.3/4.6
- X86 के लिए
-fstack-protector
को ठीक किया गया है. यहndk-build
x86 ABI टारगेट के लिए भी डिफ़ॉल्ट है. - MIPS से जुड़ी समस्याएं ठीक की गईं:
- MIPS
libstlport_*
को कंपाइल करते समय,_STLP_LITTLE_ENDIAN
को 1 पर सेट करके,STLport
एंडियन-नेस को ठीक किया गया. - LLVM को कंपाइल करते समय, GCC
__builtin_unreachable
से जुड़ी समस्या को ठीक किया गया है. (GCC Issue 54369) cc1
को कंपाइल करने की प्रोसेस में 100% सीपीयू इस्तेमाल होने की समस्या को ठीक करने के लिए, बैकपोर्ट किया गया फ़िक्स. (GCC Issue 50380)
- MIPS
- GNU Debugger से जुड़ी गड़बड़ियां ठीक की गईं:
- gdb-7.x में, बिल्ड के समय Python के साथ काम करने की सुविधा बंद कर दी गई है. ऐसा इसलिए किया गया है, ताकि gdb-7.x कॉन्फ़िगर फ़ंक्शन, होस्ट पर उपलब्ध Python के किसी भी वर्शन को न चुन ले. साथ ही,
gdb
को Python के किसी खास वर्शन पर निर्भर न रहना पड़े. (समस्या 36120) ndk-gdb
को तब ठीक किया गया, जबAPP_ABI
मेंall
मौजूद हो और वह किसी भी जाने-पहचाने आर्किटेक्चर से मेल न खाता हो. (समस्या 35392)- Windows के पाथनेम के लिए सहायता को ठीक किया गया है. इसके लिए,
:
वर्ण को तब तक रखा जाता है, जब तक यह ड्राइव लेटर से शुरू होने वाले Windows पाथ का हिस्सा न हो. (GDB Issue 12843) gdbserver
में, ARM के लिए हार्डवेयर ब्रेकपॉइंट जोड़ने की सुविधा से जुड़ी समस्या ठीक की गई. (GDB से जुड़ी समस्या)- लिंकर के काम करने पर, सिर्फ़ मौजूदा
solibs
को पढ़ने की सुविधा जोड़ी गई. इस बदलाव से,solib
इवेंट को तेज़ी से हैंडल किया जा सकेगा. (समस्या 37677) solib
ब्रेकपॉइंट ढूंढने के लिए, बार-बार कोशिश करने की सुविधा जोड़ी गई है. GDB अबsvr4_current_sos()
को कॉल करने पर,enable_break()
को तब तक फिर से कोशिश करता है, जब तक वह सफल नहीं हो जाता. (बदलाव 43563)- उस समस्या को ठीक किया गया है जिसकी वजह से
gdb
,dlopen-ed
लाइब्रेरी में रखे गए ब्रेकपॉइंट पर नहीं रुकता था. (समस्या 34856) - सिस्टम पर
dlopen()
को कॉल करते समय, डाइनैमिक लिंकर मेंSIGILL
को ठीक किया गया है. ऐसा इसलिए किया गया है, क्योंकिsym_addr
केLSB
को सुरक्षित नहीं रखा गया था. इस वजह से,/system/bin/linker
से सिंबल हटा दिए गए थे औरrtld_db_dlactivity()
कोThumb
के तौर पर लागू किया गया था. (समस्या 37147)
- gdb-7.x में, बिल्ड के समय Python के साथ काम करने की सुविधा बंद कर दी गई है. ऐसा इसलिए किया गया है, ताकि gdb-7.x कॉन्फ़िगर फ़ंक्शन, होस्ट पर उपलब्ध Python के किसी भी वर्शन को न चुन ले. साथ ही,
- उस समस्या को ठीक किया गया है जिसमें रूट के तौर पर
- अन्य गड़बड़ियां ठीक की गईं:
-
- एनडीके हेडर से जुड़ी समस्याएं ठीक की गईं:
arch-mips/include/asm/*
कोड को ठीक किया गया है. इसे ओरिजनल कर्नल से गलती से हटा दिया गया था. (बदलें 43335)linux/sysctl.h
औरlinux/icmp.h
में, स्ट्रक्ट मेंबर डेटा__unused
को__linux_unused
से बदल दिया गया है, ताकिsys/cdefs.h
में#define __unused
के साथ कॉन्फ़्लिक्ट न हो.__BEGIN_DECLS
और__END_DECLS
के साथ शामिल किए गए C फ़ंक्शन के लिए,fenv.h
को ठीक किया गया.malloc.h
में, लागू नहीं किए गए फ़ंक्शन हटा दिए गए हैं.- एएनएसआई कंपाइलर के लिए,
uint64_t
की तय की गईstdint.h
परिभाषा. (साल 1952 का अंक) <arch>/include/machine/*
में प्रीप्रोसेसर मैक्रो से जुड़ी समस्या ठीक की गई.- MIPS के लिए,
link.h
को ऐसे नए वर्शन से बदल दिया गया है जो सभी प्लैटफ़ॉर्म पर काम करता है. linux-unistd.h
को हटाया गया- GLibc के लिए खास तौर पर बनाए गए मैक्रो
LONG_LONG_MIN
,LONG_LONG_MAX
, औरULONG_LONG_MAX
को<pthread.h>
से<limits.h>
में ले जाएं.
ndk-stack-parser
में बफ़र ओवरफ़्लो की समस्या को ठीक किया गया है.- अगर
_STLP_USE_EXCEPTIONS
को तय नहीं किया गया है, तो सभी एलान और__Named_exception
के इस्तेमाल को हटाने के लिए,_STLP_USE_EXCEPTIONS
को ठीक किया गया.__Named_exception
सेटिंग को कंपाइल और इस्तेमाल सिर्फ़ तब किया जाता है, जबSTLport
को अपवादों का इस्तेमाल करने की अनुमति दी गई हो. - सिर्फ़ Linux के लिए NDK पैकेज बनाने की सुविधा को ठीक किया गया है. अब Windows के लिए कोड नहीं बनाया जाएगा. इस तरह का बिल्ड बनाने के लिए, इन सेटिंग का इस्तेमाल करें:
./build/tools/make-release.sh --force --systems=linux-x86
libc.so
को ठीक किया गया है, ताकि यहatexit()
और__do_handler
को एक्सपोर्ट न करे. इन सिंबल को C लाइब्रेरी के सिस्टम वर्शन से ARM बिल्ड के लिए एक्सपोर्ट किया जाता है, ताकि लेगसी नेटिव लाइब्रेरी के साथ काम किया जा सके. एनडीके से जनरेट किए गए कोड में, सीधे तौर पर इनका रेफ़रंस नहीं होना चाहिए. इसके बजाय, हर शेयर की गई लाइब्रेरी या एक्ज़ीक्यूटेबल को इन सिंबल के अपने वर्शन को एम्बेड करना चाहिए. ये वर्शन,crtbegin_*.o
उपलब्ध कराता है.अगर आपका प्रोजेक्ट
-nostdlib -Wl,--no-undefined
विकल्पों से लिंक है, तो आपको अपना__dso_handle
देना होगा, क्योंकि इस मामले मेंcrtbegin_so.o
लिंक नहीं है.__dso_handle
के कॉन्टेंट से कोई फ़र्क़ नहीं पड़ता. उदाहरण के तौर पर दिया गया यह कोड देखें:extern "C" { extern void *__dso_handle __attribute__((__visibility__ ("hidden"))); void *__dso_handle; }
- ARM के लिए फ़िक्स्ड सिंबल डिकोडर का इस्तेमाल किया जाता है. इसका इस्तेमाल
objdump
मेंplt
एंट्री के लिए किया जाता है, ताकि पढ़ने में आसान फ़ॉर्मfunction@plt
जनरेट किया जा सके. - GCC 4.6
libgcc.a
में जोड़े गए इन सिंबल को X86 प्लैटफ़ॉर्मlibc.so
लाइब्रेरी से हटा दिया गया है:__aeabi_idiv0
,__aeabi_ldiv0
,__aeabi_unwind_cpp_pr1
, और__aeabi_unwind_cpp_pr2
. - MIPS
crt*_so.S
में इस्तेमाल नहीं किए गए.ctors
,.dtors
, और.eh_frame
हटा दिए गए हैं. ndk-gdb
को अपडेट किया गया है, ताकि यहndk-build
DUMP_XXXX
के लिए सिर्फ़ आउटपुट की आखिरी लाइन ले. इस बदलाव से यह पक्का होता है कि अगरApplication.mk
याAndroid.mk
$(info ...)
सिंटैक्स का इस्तेमाल करके कुछ प्रिंट करता है, तो उसेDUMP_XXXX
के नतीजे में शामिल नहीं किया जाएगा. (ज़्यादा जानकारी)
- एनडीके हेडर से जुड़ी समस्याएं ठीक की गईं:
- अन्य बदलाव:
-
platforms/android-[3,4,5,8]
सेarch-x86
औरarch-mips
हेडर हटा दिए गए हैं. ये हेडर अधूरे थे, क्योंकि X86 और MIPS ABI, दोनों सिर्फ़ API 9 या इसके बाद के वर्शन पर काम करते हैं.- स्टैंडअलोन पैकेज में, c++ के लिए शामिल किए गए पाथ को आसान बनाया गया है. इसे यहां दिखाया गया है.
(समस्या 35279)
<path>/arm-linux-androideabi/include/c++/4.6.x-google to: <path>/include/c++/4.6/
- डिफ़ॉल्ट रूप से ज़्यादा C++ फ़ाइल एक्सटेंशन को पहचानने के लिए,
ndk-build
को ठीक किया गया:.cc .cp .cxx .cpp .CPP .c++ .C
. हालांकि, इन एक्सटेंशन सेटिंग को बदलने के लिए,LOCAL_CPP_EXTENSION
का इस्तेमाल किया जा सकता है. samples/san-angeles
में मौजूद उस समस्या को ठीक कर दिया गया है जिसकी वजह से, फिर से लॉन्च करने पर ब्लैक स्क्रीन दिखती थी या फ़्रेम फ़्रीज़ हो जाता था.- एनडीके के सैंपल में, बंद किए गए एपीआई को बदल दिया गया है.
(समस्या 20017)
hello-gl2
Android 5 से Android 7 परnative-activity
android-9 से android-10 परnative-audio
android-9 से android-10 परnative-plasma
android-9 से android-10 पर
- Android के एक्ज़ीक्यूटेबल के लिए नई ब्रैंडिंग जोड़ी गई है. साथ ही, सेक्शन
.note.android.ident
(crtbegin_static/dynamic.o
में तय किया गया) में आसान स्कीम जोड़ी गई है, ताकि डीबग करने वाले टूल उसके हिसाब से काम कर सकें. स्ट्रक्चर के सदस्य और वैल्यू इस तरह से तय की जाती हैं: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
में मौजूद ब्रैंडिंग के पिछले विकल्प अब काम नहीं करेंगे. - एक नई स्क्रिप्ट
run-tests-all.sh
जोड़ी गई है, जो अलग-अलग शर्तों के साथrun-tests.sh
औरstandalone/run.sh
को कॉल करती है. यह स्क्रिप्टrun-tests.sh
विकल्प के बिना चलती है. साथ ही, इसे बेहतर बनाया गया है, ताकि यह सभी सपोर्ट किए गए एबीआइ के लिए ज़्यादातर टेस्ट कंपाइल कर सके और अटैच किए गए सभी डिवाइसों पर चल सके--abi
Android NDK r8b (जुलाई 2012)
इस रिलीज़ की मुख्य सुविधाएं ये हैं: नई GNU कंपाइलर कलेक्शन (GCC) 4.6 टूलचेन और GNU डिबगर (GDB) 7.3.x. इससे Android 4.1 (एपीआई लेवल 16) सिस्टम इमेज के लिए डीबग करने की सुविधा मिलती है.
- गड़बड़ियां ठीक की गई हैं:
-
- Mac OS और Windows Cygwin एनवायरमेंट में स्टैटिक लाइब्रेरी के लिए,
LOCAL_SHORT_COMMANDS
से जुड़ी समस्याएं ठीक की गईं. सूची वाली फ़ाइल को तेज़ी से जनरेट किया जाता है. साथ ही, इसे बार-बार जनरेट नहीं किया जाता, ताकि प्रोजेक्ट को बार-बार फिर से न बनाना पड़े. ndk-gdb
में कई समस्याएं ठीक की गईं:- adb को ज़्यादा लगातार फ़्लैग
-e
,-d
, और-s
पास करने के लिए, टूल को अपडेट किया गया. - डिवाइस के सीरियल नंबर में मौजूद स्पेस को स्वीकार करने के लिए, टूल को अपडेट किया गया है.
/system/bin/link
की जानकारी पाने के लिए अपडेट किया गया टूल. इससे होस्ट पर मौजूदgdb
,__dl_rtld_db_dlactivity
में ब्रेकपॉइंट सेट कर सकता है. साथ ही, उसे लिंकर की गतिविधि के बारे में पता चल सकता है. उदाहरण के लिए,dlopen()
को कॉल किए जाने परsolib
सिंबल को फिर से स्कैन करना.
- adb को ज़्यादा लगातार फ़्लैग
- Windows पर
ndk-build clean
से जुड़ी समस्या ठीक की गई है. इसकी वजह से,./libs/*/lib*.so
को हटाया नहीं जा सका था. ndk-build.cmd
को ठीक किया गया है, ताकिmake
के काम न करने पर, शून्य से अलगERRORLEVEL
वैल्यू दिखे.libc.so
को ठीक किया गया है, ताकि__exidx_start
और__exidx_end
सिंबल को गलत तरीके से एक्सपोर्ट न किया जा सके.- एआरएम और एमआईपीएस के लिए,
__libc_init
के बाद स्टैक को अनवाइंड करते समयSEGV
को ठीक किया गया.
- Mac OS और Windows Cygwin एनवायरमेंट में स्टैटिक लाइब्रेरी के लिए,
- अहम बदलाव:
-
- GCC 4.6 टूलचेन (
binutils
2.21 withgold
and GDB 7.3.x) को जोड़ा गया है, ताकि यह ओरिजनल GCC 4.4.3 टूलचेन (binutils
2.19 and GDB 6.6) के साथ काम कर सके.- GCC 4.6 अब डिफ़ॉल्ट टूलचेन है. ओरिजनल फ़ाइल चुनने के लिए,
NDK_TOOLCHAIN_VERSION=4.4.3
मेंNDK_TOOLCHAIN_VERSION=4.4.3
सेट करें.Application.mk
gold
लिंकर की सुविधा, Linux और Mac OS होस्ट पर सिर्फ़ ARM और x86 आर्किटेक्चर के लिए उपलब्ध है. यह सुविधा डिफ़ॉल्ट रूप से बंद होती है. इसे चालू करने के लिए,Android.mk
मेंLOCAL_LDLIBS += -fuse-ld=gold
जोड़ें.-fPIE
के साथ कंपाइल किए गए प्रोग्राम को डीबग करने के लिए, नएGDB
की ज़रूरत होती है. इसमें Android 4.1 (एपीआई लेवल 16) सिस्टम इमेज में मौजूद बाइनरी भी शामिल हैं.binutils
2.21ld
टूल में, वर्शन 2.22 से बैक-पोर्ट किए गए फ़िक्स शामिल हैं:ld --gc-sections
को ठीक किया गया है. यह बाहरी लाइब्रेरी के ज़ॉम्बी रेफ़रंस को गलत तरीके से बनाए रखता है. (ज़्यादा जानकारी).- अगर
p_align
औरp_flags
मान्य हैं, तोGNU_RELRO
सेक्शन में उन्हें सुरक्षित रखने के लिए, एआरएमstrip
कमांड को ठीक किया गया है. इस फ़िक्स के बिना,-fPIE
की मदद से बनाए गए प्रोग्राम को डीबग नहीं किया जा सकता था. (ज़्यादा जानकारी)
- पुराने प्लैटफ़ॉर्म के साथ काम करने के लिए,
sincos()
ऑप्टिमाइज़ेशन की सुविधा बंद कर दी गई है.
- GCC 4.6 अब डिफ़ॉल्ट टूलचेन है. ओरिजनल फ़ाइल चुनने के लिए,
- डिफ़ॉल्ट रूप से, Never eXecute (NX) बिट और
relro
/bind_now
सुरक्षा को चालू करने के लिए, बिल्ड के विकल्पों को अपडेट किया गया है:- असेंबलर में
--noexecstack
और लिंकर में-z noexecstack
जोड़ा गया है. इससे स्टैक और हीप पर NX बिट चालू करके, बफ़र ओवरफ़्लो हमलों से NX सुरक्षा मिलती है. - मेमोरी करप्शन की वजह से होने वाले सुरक्षा जोखिमों से बचने के लिए, लिंक करने के बाद इंटरनल डेटा सेक्शन को सुरक्षित बनाने के लिए, लिंकर में
-z relro
और-z now
जोड़ा गया. (ज़्यादा जानकारी: 1, 2) - इन सुविधाओं को बंद करने के लिए, इन विकल्पों का इस्तेमाल किया जा सकता है:
- असेंबलर के लिए
--execstack
और लिंकर के लिए-z execstack
विकल्प सेट करके, NX सुरक्षा को बंद करें. - लिंकर के लिए
-z norelro
और-z lazy
विकल्प सेट करके, इंटरनल डेटा को सुरक्षित रखने की सुविधा बंद करें. - NDK
jni/Android.mk
में इन सुरक्षा सुविधाओं को बंद करने के लिए, ये विकल्प सेट करें:LOCAL_DISABLE_NO_EXECUTE=true # disable "--noexecstack" and "-z noexecstack" DISABLE_RELRO=true # disable "-z relro" and "-z now"
ज़्यादा जानकारी के लिए,
docs/ANDROID-MK.html
पर जाएं. - असेंबलर के लिए
- असेंबलर में
- Android एक्ज़ीक्यूटेबल के लिए
.note.ABI-tag
सेक्शन (crtbegin_static/dynamic.o
में) के साथ ब्रैंडिंग जोड़ी गई है, ताकि डीबग करने वाले टूल उसके हिसाब से काम कर सकें. स्ट्रक्चर मेंबर और वैल्यू के बारे में यहां बताया गया है: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 टूलचेन (
- अन्य गड़बड़ियां ठीक की गईं:
-
mips-linux-gnu
कोR_MIPS_TLS_LDM
में फ़िट करने के लिए, छोटा किए जाने की समस्या ठीक की गई. (ज़्यादा जानकारी)--gc-sections
का इस्तेमाल करते समय,ld
टूल के सेगफ़ॉल्ट की समस्या ठीक की गई. (ज़्यादा जानकारी)- एमआईपीएस
GOT_PAGE
को गिनने से जुड़ी समस्या ठीक की गई. (ज़्यादा जानकारी) mips_elf_count_got_symbols
के लिए, फ़ॉलो करने से जुड़ी चेतावनी वाले निशान के लिंक को ठीक किया गया.mips_elf_allocate_lazy_stub
के लिए, फ़ॉलो करने से जुड़ी चेतावनी वाले निशान के लिंक को ठीक किया गया.- MIPS
.dynamic
को डेटा सेगमेंट में ले जाया गया है, ताकि इसे लिखा जा सके. - सिंबल के लिए हार्ड-कोड की गई वैल्यू को, एमआईपीएस के लिए सही सेगमेंट साइज़ से बदल दिया गया है.
- MIPS टूलचेन में, डिफ़ॉल्ट सेटिंग से
-mno-shared
विकल्प हटा दिया गया है. Android टूलचेन के लिए डिफ़ॉल्ट वैल्यू-fPIC
होती है. अगर यह सुविधा काम करती है, तो-fpic
का इस्तेमाल किया जा सकता है. अगर आपने-mshared
,-fpic
,-fPIC
,-fpie
या-fPIE
को साफ़ तौर पर नहीं बताया है, तो MIPS कंपाइलर-mno-shared
जोड़ता है, जिससे पीआईसी बंद हो जाता है. इस मामले में, कंपाइलर को-mno-shared
जोड़ने से रोकने की समस्या ठीक की गई है. - सैंपल
hello-jni
औरtwo-libs
में पैकेज के गलत नामों को ठीक किया गया है, ताकि इसके नीचे मौजूदtests
प्रोजेक्ट को कंपाइल किया जा सके.
- अन्य बदलाव:
-
- बाइनरी की बदली गई जगहें:
gdbserver
कोtoolchain/<arch-os-ver>/prebuilt/gdbserver
सेprebuilt/android-<arch>/gdbserver/gdbserver
में ले जाया गया.- x86 टूलचेन प्रीफ़िक्स का नाम
i686-android-linux-
से बदलकरi686-linux-android-
कर दिया गया है. - GCC 4.6 के साथ कंपाइल किए जाने पर,
sources/cxx-stl/gnu-libstdc++/include
औरlib
कोsources/cxx-stl/gnu-libstdc++/4.6
पर ले जाया गया. वहीं, GCC 4.4.3 के साथ कंपाइल किए जाने पर,sources/cxx-stl/gnu-libstdc++/include
औरlib
कोsources/cxx-stl/gnu-libstdc++/4.4.3
पर ले जाया गया. libbfd.a
औरlibintl.a
कोlib/
सेlib32/
में ले जाया गया.
- एनडीके टूलचेन को फिर से बनाने और उसकी जांच करने के लिए, कई स्क्रिप्ट जोड़ी गई हैं और उन्हें बेहतर बनाया गया है:
- Win32 और Win64 एक्ज़ीक्यूटेबल जनरेट करने वाले नए Linux-होस्ट किए गए टूलचेन को जनरेट करने के लिए,
build-mingw64-toolchain.sh
जोड़ा गया. clone
कमांड का इस्तेमाल करके,download-toolchain-sources.sh
की स्पीड को बेहतर बनाया गया है. साथ ही, NDK टूलचेन बाइनरी बनाने के लिए ज़रूरी डायरेक्ट्री के लिए हीcheckout
का इस्तेमाल किया गया है.build-host-gcc.sh
औरbuild-host-gdb.sh
स्क्रिप्ट जोड़ी गईं.- किसी NDK इंस्टॉलेशन डायरेक्ट्री या मौजूदा NDK पैकेज के कॉन्टेंट की जांच करने के लिए,
tests/check-release.sh
जोड़ा गया. tests/standalone/run.sh
स्टैंडअलोन टेस्ट को फिर से लिखा गया है .
- Win32 और Win64 एक्ज़ीक्यूटेबल जनरेट करने वाले नए Linux-होस्ट किए गए टूलचेन को जनरेट करने के लिए,
- सभी प्लैटफ़ॉर्म और आर्किटेक्चर से
if_dl.h
हेडर हटा दिया गया है. इसमें बताए गएAF_LINK
औरsockaddr_dl
एलिमेंट, BSD के लिए खास तौर पर बनाए गए हैं. इसका मतलब है कि ये Linux में मौजूद नहीं हैं.
- बाइनरी की बदली गई जगहें:
Android NDK r8 (मई 2012)
NDK के इस वर्शन में, MIPS ABI के लिए सहायता शामिल है. साथ ही, इसमें कुछ और गड़बड़ियां ठीक की गई हैं.
- नई सुविधाएं:
-
- MIPS ABI के लिए सहायता जोड़ी गई है. इससे, आपको ऐसा मशीन कोड जनरेट करने की अनुमति मिलती है जो MIPS पर आधारित Android डिवाइसों पर काम करता है. MIPS के लिए मुख्य सुविधाओं में, MIPS के लिए खास टूलचेन, सिस्टम हेडर, लाइब्रेरी, और डीबग करने की सुविधा शामिल है. MIPS सपोर्ट के बारे में ज़्यादा जानकारी के लिए, NDK पैकेज में
docs/CPU-MIPS.html
देखें.डिफ़ॉल्ट रूप से, कोड ARM पर आधारित डिवाइसों के लिए जनरेट होता है. MIPS प्लैटफ़ॉर्म के लिए, अपनी
Application.mk
फ़ाइल मेंAPP_ABI
की परिभाषा मेंmips
जोड़ा जा सकता है. उदाहरण के लिए, यहां दी गई लाइन,ndk-build
को तीन अलग-अलग एबीआइ के लिए कोड बनाने का निर्देश देती है:APP_ABI := armeabi armeabi-v7a mips
अगर आपको आर्किटेक्चर के हिसाब से असेंबली सोर्स, जैसे कि एआरएम असेंबली कोड का इस्तेमाल नहीं करना है, तो आपको MIPS मशीन कोड बनाने के लिए, अपनी
Android.mk
फ़ाइलों में बदलाव करने की ज़रूरत नहीं है. --arch=mips
विकल्प का इस्तेमाल करके, स्टैंडअलोन MIPS टूलचेन बनाया जा सकता है. इसके लिए,make-standalone-toolchain.sh
को कॉल करें. ज़्यादा जानकारी के लिए,docs/STANDALONE-TOOLCHAIN.html
पर जाएं.
ध्यान दें: यह पक्का करने के लिए कि आपके ऐप्लिकेशन सिर्फ़ उन उपयोगकर्ताओं के लिए उपलब्ध हों जिनके डिवाइसों पर वे चल सकते हैं, Google Play, ऐप्लिकेशन को फ़िल्टर करता है. यह फ़िल्टरिंग, आपके ऐप्लिकेशन में शामिल निर्देश सेट की जानकारी के आधार पर की जाती है ? फ़िल्टर करने की सुविधा चालू करने के लिए, आपको कुछ नहीं करना है. इसके अलावा, Android सिस्टम भी इंस्टॉल करते समय आपके ऐप्लिकेशन की जांच करता है. साथ ही, सिर्फ़ तब इंस्टॉल करने की अनुमति देता है, जब ऐप्लिकेशन ऐसी लाइब्रेरी उपलब्ध कराता है जिसे डिवाइस के सीपीयू आर्किटेक्चर के लिए कंपाइल किया गया हो.
- MIPS ABI के लिए सहायता जोड़ी गई है. इससे, आपको ऐसा मशीन कोड जनरेट करने की अनुमति मिलती है जो MIPS पर आधारित Android डिवाइसों पर काम करता है. MIPS के लिए मुख्य सुविधाओं में, MIPS के लिए खास टूलचेन, सिस्टम हेडर, लाइब्रेरी, और डीबग करने की सुविधा शामिल है. MIPS सपोर्ट के बारे में ज़्यादा जानकारी के लिए, NDK पैकेज में
- गड़बड़ियां ठीक की गई हैं:
-
- GAbi++ को लागू करने के दौरान हुई टाइपिंग की गड़बड़ी को ठीक किया गया है. इसमें, बेस क्लास ऑब्जेक्ट
b
केdynamic_cast<D>(b)
का नतीजा, डिराइव की गई क्लासD
में बेस क्लास से उलट दिशा में गलत तरीके से अडजस्ट किया गया था. (समस्या 28721) - उस समस्या को ठीक कर दिया गया है जिसमें
make-standalone-toolchain.sh
,libsupc++.*
को कॉपी नहीं कर पाता था.
- GAbi++ को लागू करने के दौरान हुई टाइपिंग की गड़बड़ी को ठीक किया गया है. इसमें, बेस क्लास ऑब्जेक्ट
- अन्य गड़बड़ियां ठीक की गईं:
-
ndk-build.cmd
को ठीक किया गया है, ताकि यह पक्का किया जा सके किndk-build.cmd
सही तरीके से काम करे. ऐसा तब भी हो, जब उपयोगकर्ता नेSHELL
एनवायरमेंट वैरिएबल को फिर से तय किया हो. Windows एनवायरमेंट में अलग-अलग डेवलपमेंट टूल इंस्टॉल करते समय, इसे बदला जा सकता है.
Android NDK r7c (अप्रैल 2012)
NDK के इस वर्शन में, Tegra2 पर आधारित डिवाइसों के लिए एक ज़रूरी सुधार किया गया है. साथ ही, कुछ अन्य सुधार भी किए गए हैं:
- गड़बड़ियां ठीक की गई हैं:
-
- GNU STL armeabi-v7a बाइनरी को ठीक किया गया है, ताकि वे नॉन-NEON डिवाइसों पर क्रैश न हों. NDK r7b के साथ दी गई फ़ाइलों को ठीक से कॉन्फ़िगर नहीं किया गया था. इस वजह से, फ़्लोटिंग-पॉइंट फ़ंक्शन (जैसे कि
cosf
,sinf
,expf
).
- GNU STL armeabi-v7a बाइनरी को ठीक किया गया है, ताकि वे नॉन-NEON डिवाइसों पर क्रैश न हों. NDK r7b के साथ दी गई फ़ाइलों को ठीक से कॉन्फ़िगर नहीं किया गया था. इस वजह से, फ़्लोटिंग-पॉइंट फ़ंक्शन (जैसे कि
- अहम बदलाव:
-
NDK_OUT
एनवायरमेंट वैरिएबल की मदद से, कस्टम आउटपुट डायरेक्ट्री के लिए सहायता जोड़ी गई. इस वैरिएबल को तय करने पर, इसका इस्तेमाल$PROJECT_PATH/obj
के बजाय, जनरेट की गई सभी इंटरमीडिएट फ़ाइलों को सेव करने के लिए किया जाता है. इस वैरिएबल कोndk-gdb
भी पहचानता है.Android.mk
मेंLOCAL_SHORT_COMMANDS
कोtrue
के तौर पर तय करके, सैकड़ों या यहां तक कि हज़ारों सोर्स फ़ाइलों वाले मॉड्यूल बनाने की सुविधा जोड़ी गई.इस बदलाव से, NDK बिल्ड सिस्टम को ज़्यादातर लिंकर या आर्काइवर विकल्पों को सूची फ़ाइलों में डालना पड़ता है. ऐसा कमांड-लाइन की लंबाई की सीमाओं को हल करने के लिए किया जाता है. ज़्यादा जानकारी के लिए,
docs/ANDROID-MK.html
पर जाएं.
- अन्य गड़बड़ियां ठीक की गईं:
-
cpufeatures
सहायता लाइब्रेरी मेंandroid_getCpuCount()
लागू करने की समस्या ठीक की गई. कुछ डिवाइसों पर, सिस्टम के ज़रिए डाइनैमिक तरीके से कोर चालू की जाती हैं. ऐसे में, फ़ंक्शन को पहली बार कॉल करने पर, पिछले वर्शन में चालू कोर की कुल संख्या रिपोर्ट की जाती थी. हालांकि, फ़िज़िकल तौर पर उपलब्ध कोर की कुल संख्या रिपोर्ट नहीं की जाती थी.
Android NDK r7b (फ़रवरी 2012)
NDK के इस वर्शन में, Windows के नेटिव बिल्ड, Cygwin, और कई अन्य सुधारों से जुड़ी समस्याएं ठीक की गई हैं:
- गड़बड़ियां ठीक की गई हैं:
-
- कुछ मल्टी-कोर ARM डिवाइसों पर, सही तरीके से काम न करने की समस्याओं से बचने के लिए,
sys/atomics.h
को अपडेट किया गया है. एनडीके के इस वर्शन का इस्तेमाल करके, बिना बदलाव किए गए सोर्स फिर से बनाएं. इससे यह समस्या पूरी तरह से ठीक हो जाएगी. ज़्यादा जानकारी के लिए,docs/ANDROID-ATOMICS.html
पढ़ें. - डीबग करने से जुड़ी उन समस्याओं को ठीक करने के लिए,
binutils
2.19 पर वापस आ गए हैं जो NDK r7 में दिखती थीं. NDK r7,binutils
2.20.1 पर स्विच हो गया था. - 32-बिट Linux पर
ndk-build
की समस्या ठीक की गई. पैकेजिंग से जुड़ी गड़बड़ी की वजह से, NDK r7 मेंprebuilt/linux-x86/bin
के 64-बिट वर्शन कोawk
में रखा गया था. - नेटिव Windows बिल्ड (
ndk-build.cmd
) को ठीक किया गया. अन्य बिल्ड मोड पर इसका कोई असर नहीं पड़ा. इनमें ये सुधार शामिल हैं:- अनंत लूप / स्टैक ओवरफ़्लो की उस गड़बड़ी को ठीक किया गया है जो प्रोजेक्ट पाथ के टॉप लेवल पर नहीं मौजूद डायरेक्ट्री से
ndk-build.cmd
को कॉल करने की कोशिश करते समय होती थी. जैसे, प्रोजेक्ट पाथ की किसी भी सब-डायरेक्ट्री में. - अपने-आप जनरेट होने वाली डिपेंडेंसी फ़ाइलों को अनदेखा किए जाने की समस्या को ठीक किया गया है. इसका मतलब यह था कि हेडर अपडेट करने पर, उन सोर्स को फिर से कंपाइल नहीं किया जाता था जिनमें वह हेडर शामिल होता था.
- फ़ाइलों या पाथ में मौजूद स्पेस और कोटेशन के अलावा अन्य खास वर्णों को सही तरीके से हैंडल न किए जाने की समस्या को ठीक किया गया है.
- अनंत लूप / स्टैक ओवरफ़्लो की उस गड़बड़ी को ठीक किया गया है जो प्रोजेक्ट पाथ के टॉप लेवल पर नहीं मौजूद डायरेक्ट्री से
- स्टैंडअलोन टूलचेन में यह समस्या ठीक की गई है, ताकि
-lstdc++
का इस्तेमाल करते समय सही बाइनरी जनरेट की जा सकें. जैसे, GNUlibstdc++
C++ रनटाइम के ख़िलाफ़ लिंक करना. अगर आपको शेयर की गई लाइब्रेरी के वर्शन से लिंक करना है, तो-lgnustl_shared
का इस्तेमाल करें. वहीं, स्टैटिक वर्शन के लिए-lstdc++
का इस्तेमाल करें.इस समस्या को ठीक करने के बारे में ज़्यादा जानने के लिए,
docs/STANDALONE-TOOLCHAIN.html
पर जाएं. - Cygwin पर
gnustl_shared
को ठीक किया गया. लिंकर ने शिकायत की कि उसेlibsupc++.a
नहीं मिल सका, जबकि फ़ाइल सही जगह पर थी. APP_STL
के ज़रिए किसी खास C++ रनटाइम का इस्तेमाल न करने पर, Cygwin C++ लिंक की समस्या ठीक की गई.
- कुछ मल्टी-कोर ARM डिवाइसों पर, सही तरीके से काम न करने की समस्याओं से बचने के लिए,
- अन्य बदलाव:
-
- जब आपका ऐप्लिकेशन GNU
libstdc++
रनटाइम का इस्तेमाल करता है, तो कंपाइलर अब अपवादों और RTTI को ज़बरदस्ती चालू नहीं करेगा. इस बदलाव से कोड छोटा हो जाता है.अगर आपको इन सुविधाओं का इस्तेमाल करना है, तो इनमें से कोई एक काम करें:
- अपने मॉड्यूल में अपवादों और/या आरटीटीआई को साफ़ तौर पर चालू करें या
Application.mk
. (सुझाया गया) - अपने
Application.mk
मेंAPP_GNUSTL_FORCE_CPP_FEATURES
को'exceptions'
,'rtti'
या दोनों के तौर पर तय करें. ज़्यादा जानकारी के लिए,docs/APPLICATION-MK.html
पर जाएं.
- अपने मॉड्यूल में अपवादों और/या आरटीटीआई को साफ़ तौर पर चालू करें या
ndk-gdb
अब ठीक से काम करता है. ऐसा तब होता है, जब आपके ऐप्लिकेशन में निजी सेवाएं अलग-अलग प्रोसेस में चल रही हों. यहps
की ओर से दिखाई गई पहली प्रोसेस के बजाय, ऐप्लिकेशन की मुख्य प्रोसेस को डीबग करता है. आम तौर पर, यह प्रोसेस एक सेवा होती है.- एक ऐसी गड़बड़ी को ठीक किया गया है जो कभी-कभी होती थी. इसमें NDK r7,
LOCAL_ARM_MODE
वैल्यू का पालन नहीं करता था. साथ ही, कुछ सोर्स फ़ाइलों (लेकिन सभी नहीं) को हमेशा 32-बिट निर्देशों में कंपाइल करता था. STLport
: Android प्लैटफ़ॉर्म के वर्शन से मेल खाने के लिए, सोर्स रीफ़्रेश करें. इस अपडेट में, कुछ छोटी-मोटी गड़बड़ियां ठीक की गई हैं:- अधूरे टाइप का इंस्टैंटिएशन तय किया गया है
- "==" बनाम "=" टाइपो की छोटी समस्या ठीक की गई
string::assign
मेंmemcpy
के बजायmemmove
का इस्तेमाल किया गयाIsNANorINF
,IsINF
,IsNegNAN
वगैरह को बेहतर तरीके से हैंडल करने की सुविधा जोड़ी गई है
पूरी जानकारी के लिए, कमिट लॉग देखें.
STLport
: लाइब्रेरी से पांच ऐसे स्टैटिक इनिशियलाइज़र हटाए गए हैं जिनकी ज़रूरत नहीं थी.- armeabi-v7a के लिए GNU libstdc++ लाइब्रेरी को गलती से armeabi के लिए कंपाइल कर दिया गया था. इस बदलाव से, जवाब के सही होने पर कोई असर नहीं पड़ा. हालांकि, सही एबीआई का इस्तेमाल करने से, परफ़ॉर्मेंस थोड़ी बेहतर हो सकती है.
cpu-features
हेल्पर लाइब्रेरी को अपडेट किया गया है, ताकि तीन वैकल्पिक x86 सीपीयू सुविधाओं (SSSE3
,MOVBE
, औरPOPCNT
) के बारे में जानकारी दी जा सके. ज़्यादा जानकारी के लिए,docs/CPU-FEATURES.html
देखें.docs/NDK-BUILD.html
को अपडेट किया गया था, ताकि कस्टमApplication.mk
फ़ाइल चुनने के लिएNDK_APP_APPLICATION_MK
के बजायNDK_APPLICATION_MK
का इस्तेमाल किया जा सके.- Cygwin:
ndk-build
को चालू करने पर, अब मौजूदा डायरेक्ट्री में खाली "NUL" फ़ाइल नहीं बनती. - Cygwin: इसमें डिपेंडेंसी का अपने-आप पता लगाने की बेहतर सुविधा जोड़ी गई है. पिछले वर्शन में, यह इन मामलों में ठीक से काम नहीं करता था:
- जब Cygwin ड्राइव का प्रीफ़िक्स
/cygdrive
नहीं था. - ड्राइव-लेस माउंट का इस्तेमाल करते समय. उदाहरण के लिए, जब Cygwin
C:\Some\Dir
के बजाय/home
को\\server\subdir
में बदलता है.
- जब Cygwin ड्राइव का प्रीफ़िक्स
- Cygwin:
ndk-build
Cygwin और/या GNU Make के कुछ वर्शन के साथ,$NDK/prebuilt/windows/bin
में Windows के नेटिव टूल का इस्तेमाल करने की कोशिश नहीं करता.
- जब आपका ऐप्लिकेशन GNU
Android NDK r7 (नवंबर 2011)
NDK के इस वर्शन में, Android 4.0 प्लैटफ़ॉर्म के लिए नई सुविधाएं शामिल की गई हैं. साथ ही, इसमें कई अन्य सुविधाएं जोड़ी गई हैं और सुधार किए गए हैं:
- नई सुविधाएं
-
- Android 4.0 (एपीआई लेवल 14) के लिए आधिकारिक NDK एपीआई जोड़े गए हैं. इससे प्लैटफ़ॉर्म में ये नेटिव सुविधाएं जोड़ी गई हैं:
- Khronos Group OpenMAX AL 1.0.1 स्टैंडर्ड पर आधारित नेटिव मल्टीमीडिया एपीआई जोड़ा गया. नए
<OMXAL/OpenMAXAL.h>
और<OMXAL/OpenMAXAL_Android.h>
हेडर की मदद से, एपीआई लेवल 14 को टारगेट करने वाले ऐप्लिकेशन, Android के लिए खास तौर पर बनाए गए नए बफ़र क्यू इंटरफ़ेस का इस्तेमाल करके, सीधे तौर पर नेटिव कोड से मल्टीमीडिया आउटपुट जनरेट कर सकते हैं. ज़्यादा जानकारी के लिए,docs/openmaxal/index.html
और http://www.khronos.org/openmax/ देखें. - Khronos Group OpenSL ES 1.0.1 स्टैंडर्ड के आधार पर, नेटिव ऑडियो एपीआई को अपडेट किया गया है. एपीआई लेवल 14 के साथ, अब कंप्रेस किए गए ऑडियो (जैसे कि MP3, AAC, Vorbis) को पीसीएम में डिकोड किया जा सकता है. ज़्यादा जानकारी के लिए,
docs/opensles/index.html
और http://www.khronos.org/opensles/ देखें.
- Khronos Group OpenMAX AL 1.0.1 स्टैंडर्ड पर आधारित नेटिव मल्टीमीडिया एपीआई जोड़ा गया. नए
- CCache के लिए सहायता जोड़ी गई. बड़े रीबिल्ड को तेज़ी से पूरा करने के लिए,
NDK_CCACHE
एनवायरमेंट वैरिएबल कोccache
(याccache
बाइनरी का पाथ) पर सेट करें. घोषित किए जाने पर, NDK बिल्ड सिस्टम किसी भी सोर्स फ़ाइल को कंपाइल करते समय, CCache का इस्तेमाल अपने-आप करता है. उदाहरण के लिए:export NDK_CCACHE=ccache
ध्यान दें: CCache, NDK रिलीज़ में शामिल नहीं है. इसलिए, इसका इस्तेमाल करने से पहले आपको इसे इंस्टॉल करना होगा. CCache के बारे में ज़्यादा जानकारी के लिए, http://ccache.samba.org पर जाएं.
APP_ABI
कोall
पर सेट करने की सुविधा जोड़ी गई है. इससे यह पता चलता है कि आपको NDK के उस वर्शन के साथ काम करने वाले सभी ABI के लिए, NDK मॉड्यूल बनाने हैं. इसका मतलब है कि आपकीApplication.mk
में मौजूद इन दो लाइनों में से कोई एक लाइन, इस रिलीज़ के बराबर है:APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
यह तरीका तब भी काम करता है, जब कमांड-लाइन से
ndk-build
को कॉल करते समयAPP_ABI
को तय किया जाता है. इससे यह तुरंत पता चल जाता है कि आपका प्रोजेक्ट, सभी एबीआई के लिए बनाया गया है या नहीं. इसके लिए, प्रोजेक्ट केApplication.mk file
को बदलने की ज़रूरत नहीं होती. उदाहरण के लिए:ndk-build APP_ABI=all
Android.mk
में एकLOCAL_CPP_FEATURES
वैरिएबल जोड़ा गया है. इससे यह एलान किया जा सकता है कि आपका मॉड्यूल कौनसी C++ सुविधाएं (RTTI या Exceptions) इस्तेमाल करता है. इससे यह पक्का होता है कि अगर आपके पास पहले से बने ऐसे मॉड्यूल हैं जो इन सुविधाओं पर निर्भर करते हैं, तो फ़ाइनल लिंकिंग सही तरीके से काम करती है. ज़्यादा जानकारी के लिए,docs/ANDROID-MK.html
औरdocs/CPLUSPLUS-SUPPORT.html
देखें.- सोर्स और ऑब्जेक्ट फ़ाइलों के छोटे किए गए पाथ, जिनका इस्तेमाल बिल्ड कमांड में किया जाता है.
$NDK/ndk-build
को अपने प्रोजेक्ट पाथ से शुरू करने पर, अब सोर्स, ऑब्जेक्ट, और बाइनरी फ़ाइलों के पाथ काफ़ी छोटे हो गए हैं. ऐसा इसलिए है, क्योंकि इन्हें मौजूदा डायरेक्ट्री के हिसाब से पास किया जाता है. यह तब काम आता है, जब कई सोर्स फ़ाइलों वाले प्रोजेक्ट बनाए जा रहे हों. इससे, आपके होस्ट ऑपरेटिंग सिस्टम के साथ काम करने वाली कमांड लाइन की ज़्यादा से ज़्यादा लंबाई की सीमाओं से बचा जा सकता है. अगर आपने अपनी प्रोजेक्ट ट्री की किसी सब-डायरेक्ट्री सेndk-build
को शुरू किया है या आपनेndk-build
को किसी खास डायरेक्ट्री की ओर ले जाने के लिए तय किया है, तो इसके व्यवहार में कोई बदलाव नहीं होगा.NDK_PROJECT_PATH
- Android 4.0 (एपीआई लेवल 14) के लिए आधिकारिक NDK एपीआई जोड़े गए हैं. इससे प्लैटफ़ॉर्म में ये नेटिव सुविधाएं जोड़ी गई हैं:
- प्रयोग के तौर पर शुरू की गई सुविधाएं
-
अब Windows पर Cygwin के बिना NDK सोर्स फ़ाइलें बनाई जा सकती हैं. इसके लिए, अपने प्रोजेक्ट पाथ से कमांड लाइन में
ndk-build.cmd
स्क्रिप्ट को कॉल करें. स्क्रिप्ट में ठीक वही तर्क इस्तेमाल किए जाते हैं जो ओरिजनलndk-build
स्क्रिप्ट में इस्तेमाल किए जाते हैं. Windows NDK पैकेज में, GNU Make, Awk, और अन्य टूल के लिए पहले से बने बाइनरी होते हैं. ये टूल, बिल्ड के लिए ज़रूरी होते हैं. आपको काम करने वाला बिल्ड सिस्टम पाने के लिए, कुछ और इंस्टॉल करने की ज़रूरत नहीं होनी चाहिए.अहम जानकारी:
ndk-gdb
Windows पर काम नहीं करता. इसलिए, डीबग करने के लिए आपको अब भी Cygwin की ज़रूरत होगी.यह सुविधा, फ़िलहाल एक्सपेरिमेंट के तौर पर उपलब्ध है. इसलिए, इसे आज़माएं और सार्वजनिक बग डेटाबेस या सार्वजनिक फ़ोरम पर समस्याएं रिपोर्ट करें. एनडीके के साथ शिप किए गए सभी सैंपल और यूनिट टेस्ट, इस सुविधा के साथ सफलतापूर्वक कंपाइल हो जाते हैं.
- गड़बड़ियां ठीक की गईं
-
- इंपोर्ट की गई शेयर की गई लाइब्रेरी अब डिफ़ॉल्ट रूप से, टारगेट इंस्टॉलेशन की जगह (
libs/<abi>
) पर इंस्टॉल हो जाती हैं. ऐसा तब होता है, जबlibs/<abi>
को आपकेApplication.mk
में तय नहीं किया गया हो.APP_MODULES
उदाहरण के लिए, अगर टॉप-लेवल मॉड्यूलfoo
, मॉड्यूलbar
को इंपोर्ट करता है, तोlibfoo.so
औरlibbar.so
, दोनों को इंस्टॉल की गई जगह पर कॉपी किया जाता है. पहले, सिर्फ़libfoo.so
कॉपी किया जाता था. हालांकि, अगर आपनेbar
कोAPP_MODULES
में भी शामिल किया है, तो इसे भी कॉपी किया जाएगा. अगर आपनेAPP_MODULES
को साफ़ तौर पर तय किया है, तो इसके व्यवहार में कोई बदलाव नहीं होगा. ndk-gdb
अब उन गतिविधियों के लिए सही तरीके से काम करता है जिनके मुख्य इंटेंट फ़िल्टर में कई कैटगरी होती हैं.- स्टैटिक लाइब्रेरी के इंपोर्ट अब ठीक से ट्रांज़िटिव होते हैं. उदाहरण के लिए, अगर टॉप-लेवल का कोई मॉड्यूल
foo
, स्टैटिक लाइब्रेरीbar
को इंपोर्ट करता है और यह स्टैटिक लाइब्रेरीzoo
को इंपोर्ट करती है, तो अबlibfoo.so
कोlibbar.a
औरlibzoo.a
, दोनों के साथ लिंक किया जाएगा.
- इंपोर्ट की गई शेयर की गई लाइब्रेरी अब डिफ़ॉल्ट रूप से, टारगेट इंस्टॉलेशन की जगह (
- अन्य बदलाव
-
docs/NATIVE-ACTIVITY.HTML
: टाइपिंग की गड़बड़ी ठीक की गई. नेटिव ऐक्टिविटी के लिए, कम से कम एपीआई लेवल 9 होना चाहिए, न कि 8.docs/STABLE-APIS.html
: इसमें, एपीआई लेवल 9 से शुरू होने वाले, EGL को एक स्टेबल एपीआई के तौर पर शामिल करने वाला दस्तावेज़ जोड़ा गया है.download-toolchain-sources.sh
: टूलचेन के सोर्स को android.googlesource.com से डाउनलोड करने के लिए अपडेट किया गया है. यह AOSP सर्वर की नई जगह है.- C++ के साथ काम करने वाले नए रनटाइम को जोड़ा गया है. इसका नाम
gabi++
है. इसके बारे में ज़्यादा जानकारी, अपडेट किए गएdocs/CPLUSPLUS-SUPPORT.html
में उपलब्ध है. - C++ के साथ काम करने वाला नया रनटाइम जोड़ा गया है. इसका नाम
gnustl_shared
है. यह GNU libstdc++ v3 (GPLv3 लाइसेंस) के शेयर की गई लाइब्रेरी वर्शन से मेल खाता है. ज़्यादा जानकारी के लिए,docs/CPLUSPLUS-SUPPORT.html
पर जाएं - STLport C++ रनटाइम में RTTI के लिए सहायता जोड़ी गई. हालांकि, इसमें अपवादों के लिए सहायता नहीं है.
LOCAL_CPP_EXTENSION
में कई फ़ाइल एक्सटेंशन के लिए सहायता जोड़ी गई. उदाहरण के लिए,foo.cpp
औरbar.cxx
, दोनों को C++ सोर्स के तौर पर कंपाइल करने के लिए, यह एलान करें:LOCAL_CPP_EXTENSION := .cpp .cxx
- एनडीके की ओर से उपलब्ध कराई गई, लिंक-टाइम शेयर की गई सिस्टम लाइब्रेरी से एक्सपोर्ट किए गए कई अनचाहे सिंबल हटा दिए गए हैं. इससे यह पक्का होता है कि स्टैंडअलोन टूलचेन से जनरेट किया गया कोड, गलती से किसी ऐसे एबीआई सिंबल पर निर्भर न हो जाए जो स्थिर नहीं है. उदाहरण के लिए, कोई भी libgcc.a सिंबल जो प्लैटफ़ॉर्म बनाने के लिए इस्तेमाल की गई टूलचेन को बदलने पर बदल जाता है
- ज़्यादा एक्सटेंशन के साथ काम करने के लिए, EGL और OpenGLES Khronos हेडर को रीफ़्रेश किया गया. ध्यान दें कि इससे, संबंधित लाइब्रेरी के लिए NDK ABI में कोई बदलाव नहीं होता. ऐसा इसलिए, क्योंकि हर एक्सटेंशन को क्लाइंट ऐप्लिकेशन के ज़रिए रनटाइम में जांचा जाना चाहिए.
उपलब्ध एक्सटेंशन, आपके डिवाइस और जीपीयू ड्राइवर पर निर्भर करते हैं. ये इस बात पर निर्भर नहीं करते कि डिवाइस किस प्लैटफ़ॉर्म वर्शन पर काम करता है. हेडर में किए गए बदलावों से, नए कॉन्स्टेंट और टाइप जोड़े जाते हैं. इससे,
eglGetProcAddress()
याglGetProcAddress()
की मदद से जांच किए जाने के बाद, एक्सटेंशन का इस्तेमाल करना आसान हो जाता है. यहां उन नए एक्सटेंशन के बारे में बताया गया है जिनके साथ अब काम किया जा सकता है:- 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 (अगस्त 2011)
NDK के इस वर्शन में, r6 की तुलना में कोई नई सुविधा शामिल नहीं है. r6b रिलीज़ में, r6 रिलीज़ की इन समस्याओं को ठीक किया गया है:
- गड़बड़ियां ठीक की गईं
-
- मल्टी-आर्किटेक्चर बिल्ड के लिए
APP_ABI="armeabi x86"
का इस्तेमाल करने पर, बिल्ड की समस्या ठीक की गई. - एनडीके के रिलीज़ पैकेज में, पहले से बनाए गए STLport बाइनरी की जगह ठीक की गई. पैकेजिंग स्क्रिप्ट में मौजूद गड़बड़ी की वजह से, उन्हें गलत जगह पर रखा गया है.
- x86standalone टूलचेन के साथ शेयर की गई लाइब्रेरी में
atexit()
के इस्तेमाल से जुड़ी समस्या ठीक की गई है. make-standalone-toolchain.sh --arch=x86
को ठीक किया गया. यह सही GNU libstdc++ बाइनरी को सही जगह पर कॉपी नहीं कर पाता था.- स्टैंडअलोन टूलचेन लिंकर की उन चेतावनियों को ठीक किया गया है जिनमें
__dso_handle
सिंबल (सिर्फ़ ARM) के लिए, परिभाषा और साइज़ मौजूद नहीं था. - x86 बिल्ड के लिए,
$(SYSROOT)/usr/include
को शामिल करने का क्रम ठीक किया गया. ज़्यादा जानकारी के लिए, बग देखें. - x86-स्पेसिफ़िक सिस्टम में, x86 स्टैंडअलोन टूलचेन के साथ इस्तेमाल किए जाने पर,
ptrdiff_t
औरsize_t
की परिभाषाओं को ठीक किया गया.
- मल्टी-आर्किटेक्चर बिल्ड के लिए
Android NDK r6 (जुलाई 2011)
NDK के इस वर्शन में, x86 ABI के लिए सहायता और अन्य छोटे-मोटे बदलाव शामिल हैं.
इस रिलीज़ में हुए बदलावों के बारे में ज़्यादा जानकारी के लिए, NDK पैकेज में शामिल CHANGES.HTML
दस्तावेज़ पढ़ें.
- सामान्य जानकारी:
-
- x86 ABI के लिए सहायता जोड़ता है. इससे आपको ऐसा मशीन कोड जनरेट करने में मदद मिलती है जो x86 पर आधारित Android डिवाइसों पर काम करता है. x86 के लिए मुख्य सुविधाओं में, x86 के लिए खास टूलचेन, सिस्टम हेडर, लाइब्रेरी, और डीबग करने की सुविधा शामिल है. x86 सपोर्ट के बारे में पूरी जानकारी के लिए, NDK पैकेज में मौजूद
docs/CPU-X86.html
देखें.डिफ़ॉल्ट रूप से, कोड ARM पर आधारित डिवाइसों के लिए जनरेट होता है. हालांकि, x86 प्लैटफ़ॉर्म के लिए कोड बनाने के लिए, अपनी
Application.mk
फ़ाइल मेंAPP_ABI
की परिभाषा में x86 जोड़ा जा सकता है. उदाहरण के लिए, यहां दी गई लाइन,ndk-build
को तीन अलग-अलग एबीआइ के लिए कोड बनाने का निर्देश देती है:APP_ABI := armeabi armeabi-v7a x86
अगर आपको एआरएम पर आधारित असेंबली सोर्स का इस्तेमाल नहीं करना है, तो x86 मशीन कोड बनाने के लिए आपको अपनी
Android.mk
फ़ाइलों में बदलाव करने की ज़रूरत नहीं होगी. --toolchain=x86-4.4.3
विकल्प का इस्तेमाल करके, एक स्टैंडअलोन x86 टूलचेन बनाया जा सकता है. इसके लिए,make-standalone-toolchain.sh
को कॉल करें. ज़्यादा जानकारी के लिए,docs/STANDALONE-TOOLCHAIN.html
पर जाएं.ndk-stack
टूल की मदद से, नेटिव कोड से जनरेट होने वालेlogcat
में स्टैक ट्रेस का अनुवाद किया जा सकता है. यह टूल, निर्देश पतों को ऐसे फ़ॉर्मैट में बदलता है जिसे आसानी से पढ़ा जा सकता है. इसमें फ़ंक्शन, सोर्स फ़ाइल, और हर स्टैक फ़्रेम से जुड़ा लाइन नंबर जैसी चीज़ें शामिल होती हैं. ज़्यादा जानकारी और इस्तेमाल का उदाहरण देखने के लिए,docs/NDK-STACK.html
देखें.
- x86 ABI के लिए सहायता जोड़ता है. इससे आपको ऐसा मशीन कोड जनरेट करने में मदद मिलती है जो x86 पर आधारित Android डिवाइसों पर काम करता है. x86 के लिए मुख्य सुविधाओं में, x86 के लिए खास टूलचेन, सिस्टम हेडर, लाइब्रेरी, और डीबग करने की सुविधा शामिल है. x86 सपोर्ट के बारे में पूरी जानकारी के लिए, NDK पैकेज में मौजूद
- अन्य बदलाव:
arm-eabi-4.4.0
को NDK r5 के बाद से बंद कर दिया गया था. अब इसे NDK डिस्ट्रिब्यूशन से हटा दिया गया है.
Android NDK r5c (जून 2011)
NDK के इस वर्शन में, r5b की तुलना में कोई नई सुविधा शामिल नहीं है. r5c रिलीज़ में, r5b रिलीज़ की इन समस्याओं को ठीक किया गया है:
- गड़बड़ियां ठीक की गई हैं:
-
ndk-build
: हमने एक ऐसी गड़बड़ी को ठीक किया है जो डिबग किए जा सकने वाले प्रोजेक्ट के पैरलल बिल्ड बनाने की कोशिश करते समय दिखती थी.- टाइप करने में हुई एक गड़बड़ी को ठीक किया गया है. इस गड़बड़ी की वजह से, नई टूलचेन के साथ
LOCAL_WHOLE_STATIC_LIBRARIES
सही तरीके से काम नहीं कर रहा था. साथ ही,docs/ANDROID-MK.html
में इसके लिए दस्तावेज़ जोड़ा गया है. - गड़बड़ी ठीक की गई. इस गड़बड़ी में, एपीआई लेवल 8 (Android 2.2) से पहले की रिलीज़ वाले प्लैटफ़ॉर्म पर चलाने पर,
gnustl_static
से लिंक किया गया कोड क्रैश हो जाता था. ndk-gdb
: Android 3.0 या उसके बाद के वर्शन वाले डिवाइसों को डीबग करते समय सेगमेंटेशन फ़ॉल्ट की वजह बनने वाली गड़बड़ी को ठीक किया गया है.<android/input.h>
: एपीआई लेवल 9 (Android 2.3) में पेश किए गए दो फ़ंक्शन गलत थे. इन्हें ठीक कर दिया गया है. इससे सोर्स एपीआई काम नहीं करता, लेकिन सिस्टम के बाइनरी इंटरफ़ेस में कोई बदलाव नहीं होता. गलत फ़ंक्शन मेंhistory_index
पैरामीटर मौजूद नहीं था. सही परिभाषाएं यहां दी गई हैं: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);
- एपीआई लेवल 9 (Android 2.3) के लिए, C लाइब्रेरी के एआरएम बाइनरी को अपडेट किया गया है. इससे लिंक करने के समय, उस एपीआई लेवल में जोड़े गए नए फ़ंक्शन (जैसे,
pthread_rwlock_init
) सही तरीके से दिखेंगे.
- मामूली सुधार और गड़बड़ियां ठीक की गई हैं:
-
- ऑब्जेक्ट फ़ाइलें अब हमेशा उसी क्रम में लिंक की जाती हैं जिस क्रम में वे
LOCAL_SRC_FILES
में दिखती हैं. पहले ऐसा नहीं होता था, क्योंकि फ़ाइलों को सोर्स एक्सटेंशन के हिसाब से ग्रुप किया जाता था. import-module
के काम न करने पर, अब यह उन डायरेक्ट्री की सूची प्रिंट करता है जिनमें खोज की गई थी. इससे यह जांचने में मदद मिलती है कि बिल्ड सिस्टम नेNDK_MODULE_PATH
की सही परिभाषा का इस्तेमाल किया है या नहीं.import-module
के सफल होने पर, अब यह उस डायरेक्ट्री को लॉग में प्रिंट करता है जहां मॉड्यूल मिला था. यहNDK_LOG=1
के साथ दिखता है.- प्रोजेक्ट में बहुत ज़्यादा संख्या में शामिल की गई डायरेक्ट्री होने पर, डीबग किए जा सकने वाले ऐप्लिकेशन की बिल्ड स्पीड बढ़ाई गई.
ndk-gdb
:adb shell
की गड़बड़ियों का बेहतर तरीके से पता लगाया जा सकेगा. साथ ही, गड़बड़ी के मैसेज को बेहतर बनाया गया है.<pthread.h>
: एपीआई लेवल 9 (Android 2.3) और उसके बाद के वर्शन के लिए,PTHREAD_RWLOCK_INITIALIZER
की परिभाषा में बदलाव किया गया है.- उस समस्या को ठीक कर दिया गया है जिसकी वजह से कोई मॉड्यूल खुद को इंपोर्ट कर सकता था. इससे GNU Make में इनफ़िनिट लूप की समस्या हो सकती थी.
- ऐसी गड़बड़ी को ठीक किया गया है जिसकी वजह से,
LOCAL_ARM_NEON
को सही पर सेट करने पर बिल्ड नहीं हो पाता था.build/core/build-binary.mk
में टाइपिंग की गड़बड़ी की वजह से ऐसा होता था. - हमने एक गड़बड़ी को ठीक किया है. इस गड़बड़ी की वजह से,
.s
असेंबली फ़ाइलों को कंपाइल नहीं किया जा सका. हालांकि,.S
फ़ाइलें ठीक थीं.
- ऑब्जेक्ट फ़ाइलें अब हमेशा उसी क्रम में लिंक की जाती हैं जिस क्रम में वे
Android NDK r5b (जनवरी 2011)
NDK के इस वर्शन में, r5 की तुलना में कोई नई सुविधा शामिल नहीं है. r5b रिलीज़ में, r5 रिलीज़ की इन समस्याओं को ठीक किया गया है:
- r5 बाइनरी के लिए glibc 2.11 की ज़रूरत होती है. हालांकि, r5b बाइनरी को एक खास टूलचेन की मदद से जनरेट किया जाता है. यह टूलचेन, glibc 2.7 या इसके बाद के वर्शन को टारगेट करता है. Linux टूलचेन बाइनरी अब Ubuntu 8.04 या इसके बाद के वर्शन पर काम करती हैं.
- यह arm-linux-androideabi-4.4.3 टूलचेन में कंपाइलर से जुड़ी गड़बड़ी को ठीक करता है. पिछला बाइनरी, हस्ताक्षरित वर्णों को प्रोसेस करते समय थंब इंस्ट्रक्शन के अमान्य सीक्वेंस जनरेट करता था.
- APP_STL के लिए "gnustl_static" वैल्यू के लिए, छूटा हुआ दस्तावेज़ जोड़ता है. इससे GNU libstdc++ के स्टैटिक लाइब्रेरी वर्शन से लिंक किया जा सकता है. यह
ndk-build
से जुड़ी इन समस्याओं को ठीक किया गया है:- Windows पर कंपाइल करने के दौरान गड़बड़ी होने पर, डिपेंडेंसी फ़ाइलों में अंतर पैदा करने वाली गड़बड़ी को ठीक किया गया है. इस वजह से, सोर्स कोड में गड़बड़ी ठीक होने के बाद भी सही तरीके से बिल्ड नहीं हो पाया.
- Cygwin से जुड़ा एक ऐसा बग जिसमें Android NDK इंस्टॉलेशन या प्रोजेक्ट पाथ के लिए बहुत छोटे पाथ का इस्तेमाल करने पर, अमान्य डिपेंडेंसी फ़ाइलें जनरेट हो जाती हैं. इस वजह से, इंक्रीमेंटल बिल्ड बनाना मुमकिन नहीं था.
- टाइप करने में हुई गड़बड़ी की वजह से, cpufeatures लाइब्रेरी, नए NDK टूलचेन के साथ ठीक से काम नहीं कर पा रही थी.
- Cygwin में बिल्ड तेज़ी से होते हैं, क्योंकि यह हर सोर्स या ऑब्जेक्ट फ़ाइल के लिए GNU Make से
cygpath -m
को कॉल करने से बचता है. इससे बहुत बड़े सोर्स ट्री में समस्याएं आती थीं. अगर यह सुविधा ठीक से काम नहीं करती है, तोcygpath -m
को फिर से इस्तेमाल करने के लिए, अपने एनवायरमेंट मेंNDK_USE_CYGPATH=1
को तय करें. - Cygwin इंस्टॉलेशन अब उपयोगकर्ता को ऐसे अमान्य इंस्टॉलेशन पाथ के बारे में सूचना देता है जिनमें स्पेस शामिल हैं. इससे पहले, अमान्य पाथ से ऐसी गड़बड़ी का मैसेज मिलता था जिसमें GNU Make के गलत वर्शन के बारे में बताया जाता था. भले ही, सही वर्शन इंस्टॉल किया गया हो.
- हमने एक टाइपोग्राफ़िकल गड़बड़ी ठीक की है. इसकी वजह से, जब
NDK_MODULE_PATH
एनवायरमेंट वैरिएबल में कोलन से अलग की गई कई डायरेक्ट्री होती थीं, तब वह ठीक से काम नहीं करता था. prebuilt-common.sh
स्क्रिप्ट में, 64-बिट जनरेट किए गए मशीन कोड के लिए कंपाइलर की जांच करने से जुड़ी गड़बड़ियों को ठीक किया गया है. इसके लिए, होस्ट टैग पर भरोसा करने के बजाय, 32-बिट टूलचेन को Snow Leopard पर फिर से सही तरीके से बनाने की अनुमति दी गई है. टूलचेन को फिर से बनाने वाली स्क्रिप्ट, अब 32-बिट होस्ट टूलचेन का इस्तेमाल करने की सुविधा भी देती हैं.INET_ADDRSTRLEN
के लिए, छूटा हुआ एलान<netinet/in.h>
में जोड़ दिया गया है.IN6_IS_ADDR_MC_NODELOCAL
औरIN6_IS_ADDR_MC_GLOBAL
के लिए, ज़रूरी एलान मौजूद नहीं थे. इन्हें<netinet/in6.h>
में जोड़ा गया.<asm/byteorder.h>
में 'asm' को '__asm__' से बदल दिया गया है, ताकि-std=c99
के साथ कंपाइल किया जा सके.
Android NDK r5 (दिसंबर 2010)
NDK के इस वर्शन में कई नए एपीआई शामिल हैं. इनमें से ज़्यादातर एपीआई, गेम और इसी तरह के ऐप्लिकेशन के डेवलपमेंट को सपोर्ट करने के लिए पेश किए गए हैं. ये ऐप्लिकेशन, नेटिव कोड का बड़े पैमाने पर इस्तेमाल करते हैं. एपीआई का इस्तेमाल करके, डेवलपर को इवेंट, ऑडियो, ग्राफ़िक, विंडो मैनेजमेंट, ऐसेट, और स्टोरेज का सीधा ऐक्सेस मिलता है. डेवलपर, नई NativeActivity
क्लास की मदद से, नेटिव कोड में Android ऐप्लिकेशन के लाइफ़साइकल को भी लागू कर सकते हैं. इस रिलीज़ में हुए बदलावों के बारे में ज़्यादा जानकारी पाने के लिए, डाउनलोड किए गए NDK पैकेज में शामिल CHANGES.HTML
दस्तावेज़ पढ़ें.
- सामान्य जानकारी:
-
- इसमें नेटिव ऐक्टिविटी के लिए सहायता जोड़ी गई है. इससे आपको नेटिव कोड में Android ऐप्लिकेशन की लाइफ़साइकल लागू करने की अनुमति मिलती है.
- इनके लिए नेटिव सपोर्ट जोड़ा गया है:
- इनपुट सबसिस्टम (जैसे कि कीबोर्ड और टच स्क्रीन)
- सेंसर डेटा (एक्सलरोमीटर, कंपास, जाइरोस्कोप वगैरह) का ऐक्सेस.
- इवेंट लूप एपीआई, इनपुट और सेंसर इवेंट जैसी चीज़ों का इंतज़ार करने के लिए.
- विंडो और सर्फ़ेस सबसिस्टम
- OpenSL ES स्टैंडर्ड पर आधारित ऑडियो एपीआई, जो ऑडियो चलाने और रिकॉर्ड करने के साथ-साथ प्लैटफ़ॉर्म के ऑडियो इफ़ेक्ट को कंट्रोल करने की सुविधा देते हैं
.apk
फ़ाइल में पैकेज की गई ऐसेट का ऐक्सेस.
- इसमें नई टूलचेन (GCC 4.4.3 पर आधारित) शामिल है, जो बेहतर कोड जनरेट करती है. साथ ही, अब इसका इस्तेमाल स्टैंडअलोन क्रॉस-कंपाइलर के तौर पर भी किया जा सकता है. यह उन लोगों के लिए है जो
./configure && make
का इस्तेमाल करके अपना कॉन्टेंट बनाना चाहते हैं. ज़्यादा जानकारी के लिए, docs/STANDALONE-TOOLCHAIN.html देखें. GCC 4.4.0 के बाइनरी अब भी उपलब्ध हैं, लेकिन 4.2.1 के बाइनरी हटा दिए गए हैं. - इसमें पहले से बनी स्टैटिक और शेयर की गई लाइब्रेरी (docs/PREBUILTS.html) के साथ-साथ मॉड्यूल एक्सपोर्ट और इंपोर्ट करने की सुविधा जोड़ी गई है. इससे तीसरे पक्ष के मॉड्यूल को शेयर करना और फिर से इस्तेमाल करना बहुत आसान हो जाता है (docs/IMPORT-MODULE.html में बताया गया है कि ऐसा क्यों किया गया है).
- यह हेल्पर मॉड्यूल के तौर पर, डिफ़ॉल्ट C++ STL लागू करने की सुविधा देता है. यह STLport पर आधारित है. इसका इस्तेमाल स्टैटिक या शेयर की गई लाइब्रेरी के तौर पर किया जा सकता है. इसके बारे में ज़्यादा जानकारी और इस्तेमाल के उदाहरण, sources/android/stlport/README में दिए गए हैं. अगर डिफ़ॉल्ट C++ STL लागू करने के बजाय, इन लाइब्रेरी के हिसाब से कंपाइल करने का विकल्प चुना जाता है, तो STLport (स्टैटिक या शेयर की गई) और GNU libstdc++ (सिर्फ़ स्टैटिक) के लिए पहले से बनाए गए बाइनरी भी उपलब्ध कराए जाते हैं. डिफ़ॉल्ट एसटीएल लागू करने की सुविधा में, C++ अपवाद और आरटीटीआई काम नहीं करते. ज़्यादा जानकारी के लिए, docs/CPLUSPLUS-SUPPORT.HTML देखें.
- इसमें
cpufeatures
हेल्पर लाइब्रेरी में किए गए सुधार शामिल हैं. इससे सीपीयू टाइप की रिपोर्टिंग बेहतर होती है. कुछ डिवाइसों पर, सीपीयू टाइप के तौर पर ARMv7 की जानकारी दी जाती थी, जबकि असल में डिवाइस ARMv6 होता था. हमारा सुझाव है कि इस लाइब्रेरी का इस्तेमाल करने वाले डेवलपर, अपने ऐप्लिकेशन को फिर से बनाएं. इसके बाद, Google Play पर अपलोड करें, ताकि उन्हें इन सुधारों का फ़ायदा मिल सके. - यह एक EGL लाइब्रेरी जोड़ता है. इसकी मदद से, OpenGL ES टेक्सचर और सेवाओं को बनाया और मैनेज किया जा सकता है.
- इसमें नए सैंपल ऐप्लिकेशन,
native-plasma
औरnative-activity
जोड़े गए हैं, ताकि यह दिखाया जा सके कि नेटिव ऐक्टिविटी कैसे लिखी जाती है. - इसमें कई गड़बड़ियां ठीक की गई हैं और अन्य छोटे-मोटे सुधार किए गए हैं. बदलावों की ज़्यादा जानकारी वाली सूची देखने के लिए, docs/CHANGES.html पर जाएं.
Android NDK r4b (जून 2010)
- NDK r4b से जुड़ी जानकारी:
-
इसमें NDK बिल्ड और डीबग करने वाली स्क्रिप्ट से जुड़ी कई समस्याओं को ठीक किया गया है. अगर NDK r4 का इस्तेमाल किया जा रहा है, तो हमारा सुझाव है कि NDK r4b बिल्ड डाउनलोड करें. इस रिलीज़ में हुए बदलावों के बारे में ज़्यादा जानकारी पाने के लिए, डाउनलोड किए गए NDK पैकेज में शामिल CHANGES.TXT दस्तावेज़ पढ़ें.
- सामान्य जानकारी:
-
- नई
ndk-build
build कमांड की मदद से, आसान बिल्ड सिस्टम उपलब्ध कराता है. - इस अपडेट में, नई
ndk-gdb
कमांड की मदद से, प्रोडक्शन डिवाइसों पर जनरेट किए गए मशीन कोड को आसानी से नेटिव डीबग करने की सुविधा जोड़ी गई है. - ARM पर आधारित सीपीयू आर्किटेक्चर के लिए, Android के हिसाब से नया ABI जोड़ता है,
armeabi-v7a
. नया एबीआई, मौजूदाarmeabi
एबीआई को इन सीपीयू इंस्ट्रक्शन सेट एक्सटेंशन के साथ काम करने के लिए बढ़ाता है:- Thumb-2 निर्देश
- VFP हार्डवेयर FPU निर्देश (VFPv3-D16)
- ARM Advanced SIMD (NEON) GCC इंट्रिंसिक और VFPv3-D32 के लिए, वैकल्पिक तौर पर सहायता उपलब्ध है. यह सुविधा, Verizon Droid by Motorola, Google Nexus One जैसे डिवाइसों और अन्य डिवाइसों पर काम करती है.
- यह एक नई
cpufeatures
स्टैटिक लाइब्रेरी (सोर्स के साथ) जोड़ता है. इससे आपका ऐप्लिकेशन, रनटाइम के दौरान होस्ट डिवाइस की सीपीयू सुविधाओं का पता लगा सकता है. खास तौर पर, ऐप्लिकेशन यह देख सकते हैं कि ARMv7-A के साथ-साथ VFPv3-D32 और NEON काम करते हैं या नहीं. इसके बाद, ज़रूरत के हिसाब से अलग-अलग कोड पाथ उपलब्ध करा सकते हैं. - इसमें एक सैंपल ऐप्लिकेशन,
hello-neon
, जोड़ा गया है. इससे पता चलता है कि सीपीयू की सुविधाओं की जांच करने के लिए,cpufeatures
लाइब्रेरी का इस्तेमाल कैसे किया जाता है. इसके बाद, अगर सीपीयू इसका समर्थन करता है, तो NEON इंट्रिंसिक का इस्तेमाल करके, ऑप्टिमाइज़ किया गया कोड पाथ उपलब्ध कराया जाता है. - इस विकल्प की मदद से, NDK के साथ काम करने वाले दिशा-निर्देशों के सेट में से किसी एक या दोनों के लिए मशीन कोड जनरेट किया जा सकता है. उदाहरण के लिए, ARMv5 और ARMv7-A, दोनों आर्किटेक्चर के लिए एक साथ बनाया जा सकता है. साथ ही, सभी को अपने ऐप्लिकेशन के फ़ाइनल
.apk
में सेव किया जा सकता है. - यह पक्का करने के लिए कि आपके ऐप्लिकेशन सिर्फ़ उन उपयोगकर्ताओं के लिए उपलब्ध हों जिनके डिवाइसों पर उन्हें चलाया जा सकता है, Google Play अब ऐप्लिकेशन को फ़िल्टर करता है. यह फ़िल्टर, आपके ऐप्लिकेशन में शामिल निर्देश सेट की जानकारी के आधार पर काम करता है. फ़िल्टर करने की सुविधा चालू करने के लिए, आपको कोई कार्रवाई करने की ज़रूरत नहीं है. इसके अलावा, Android सिस्टम भी इंस्टॉल करते समय आपके ऐप्लिकेशन की जांच करता है. साथ ही, ऐप्लिकेशन को सिर्फ़ तब इंस्टॉल करने की अनुमति देता है, जब वह डिवाइस के सीपीयू आर्किटेक्चर के लिए कंपाइल की गई लाइब्रेरी उपलब्ध कराता है.
- Android 2.2 के लिए सहायता जोड़ी गई है. इसमें नेटिव कोड से
Bitmap
ऑब्जेक्ट के पिक्सल बफ़र को ऐक्सेस करने के लिए, एक नया स्टेबल एपीआई शामिल है.
- नई
Android NDK r3 (मार्च 2010)
- सामान्य जानकारी:
-
- इससे OpenGL ES 2.0 की नेटिव लाइब्रेरी के साथ काम करने की सुविधा जुड़ जाती है.
- इसमें एक सैंपल ऐप्लिकेशन,
hello-gl2
, जोड़ा गया है. इससे OpenGL ES 2.0 वर्टेक्स और फ़्रैगमेंट शेडर के इस्तेमाल के बारे में पता चलता है. - इस रिलीज़ के लिए टूलचेन बाइनरी को GCC 4.4.0 के साथ रीफ़्रेश किया गया है. इससे पिछले वर्शन (4.2.1) की तुलना में, ज़्यादा कॉम्पैक्ट और बेहतर मशीन कोड जनरेट होना चाहिए. NDK अब भी 4.2.1 बाइनरी उपलब्ध कराता है. इनका इस्तेमाल, मशीन कोड बनाने के लिए किया जा सकता है.
Android NDK r2 (सितंबर 2009)
इसे मूल रूप से "Android 1.6 NDK, Release 1" के तौर पर रिलीज़ किया गया था.
- सामान्य जानकारी:
-
- इसमें OpenGL ES 1.1 की नेटिव लाइब्रेरी के लिए सहायता जोड़ी गई है.
- इसमें एक सैंपल ऐप्लिकेशन,
san-angeles
, जोड़ा गया है. यह नेटिव OpenGL ES API की मदद से 3D ग्राफ़िक रेंडर करता है. साथ ही,GLSurfaceView
ऑब्जेक्ट की मदद से ऐक्टिविटी के लाइफ़साइकल को मैनेज करता है.
Android NDK r1 (जून 2009)
इसे मूल रूप से "Android 1.5 NDK, Release 1" के तौर पर रिलीज़ किया गया था.
- सामान्य जानकारी:
-
- इसमें ARMv5TE निर्देशों के लिए कंपाइलर सपोर्ट (GCC) शामिल है. इसमें Thumb-1 निर्देश भी शामिल हैं.
- इसमें स्टेबल नेटिव एपीआई, दस्तावेज़, और सैंपल ऐप्लिकेशन के लिए सिस्टम हेडर शामिल हैं.