इस पेज पर, 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.9mips64el-linux-android-4.9mipsel-linux-android-4.9x86_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=clangarm64-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-buildNDK_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.bfd3. 5 एमबी औरld.gold7.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 pcThumb निर्देश के बाद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_t32-बिट है. पहले जैसा व्यवहार वापस लाने के लिए,_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_udata2nothrow 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हेडर फ़ाइल में#ifdefC++ की परिभाषाओं को ठीक किया गया.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-buildx86 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-buildDUMP_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-gl2Android 5 से Android 7 परnative-activityandroid-9 से android-10 परnative-audioandroid-9 से android-10 परnative-plasmaandroid-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 टूलचेन (
binutils2.21 withgoldand GDB 7.3.x) को जोड़ा गया है, ताकि यह ओरिजनल GCC 4.4.3 टूलचेन (binutils2.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) सिस्टम इमेज में मौजूद बाइनरी भी शामिल हैं.binutils2.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पढ़ें. - डीबग करने से जुड़ी उन समस्याओं को ठीक करने के लिए,
binutils2.19 पर वापस आ गए हैं जो NDK r7 में दिखती थीं. NDK r7,binutils2.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-buildCygwin और/या 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-gdbWindows पर काम नहीं करता. इसलिए, डीबग करने के लिए आपको अब भी 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_objectGL_OES_EGL_image_externalGL_APPLE_texture_2D_limited_npotGL_EXT_blend_minmaxGL_EXT_discard_framebufferGL_EXT_multi_draw_arraysGL_EXT_read_format_bgraGL_EXT_texture_filter_anisotropicGL_EXT_texture_format_BGRA8888GL_EXT_texture_lod_biasGL_IMG_read_formatGL_IMG_texture_compression_pvrtcGL_IMG_texture_env_enhanced_fixed_functionGL_IMG_user_clip_planeGL_IMG_multisampled_render_to_textureGL_NV_fenceGL_QCOM_driver_controlGL_QCOM_extended_getGL_QCOM_extended_get2GL_QCOM_perfmon_global_modeGL_QCOM_writeonly_renderingGL_QCOM_tiled_rendering
- GLES 2.0
-
GL_OES_element_index_uintGL_OES_get_program_binaryGL_OES_mapbufferGL_OES_packed_depth_stencilGL_OES_texture_3DGL_OES_texture_floatGL_OES_texture_float_linearGL_OES_texture_half_float_linearGL_OES_texture_npotGL_OES_vertex_array_objectGL_OES_EGL_image_externalGL_AMD_program_binary_Z400GL_EXT_blend_minmaxGL_EXT_discard_framebufferGL_EXT_multi_draw_arraysGL_EXT_read_format_bgraGL_EXT_texture_format_BGRA8888GL_EXT_texture_compression_dxt1GL_IMG_program_binaryGL_IMG_read_formatGL_IMG_shader_binaryGL_IMG_texture_compression_pvrtcGL_IMG_multisampled_render_to_textureGL_NV_coverage_sampleGL_NV_depth_nonlinearGL_QCOM_extended_getGL_QCOM_extended_get2GL_QCOM_writeonly_renderingGL_QCOM_tiled_rendering
- EGL
-
EGL_ANDROID_recordableEGL_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-buildbuild कमांड की मदद से, आसान बिल्ड सिस्टम उपलब्ध कराता है. - इस अपडेट में, नई
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 निर्देश भी शामिल हैं.
- इसमें स्टेबल नेटिव एपीआई, दस्तावेज़, और सैंपल ऐप्लिकेशन के लिए सिस्टम हेडर शामिल हैं.