تقدم هذه الصفحة معلومات عن التغييرات في جميع الإصدارات الثابتة التي تم إصدارها من NDK. لتنزيل أحدث إصدار ثابت من NDK أو أي إصدار تجريبي متاح حاليًا، راجع صفحة تنزيلات NDK.
يمكنك الاطّلاع على مجموعة Google التي تحمل اسم android-ndk-aإتاحة للحصول على معلومات أكثر اكتمالاً والاشتراك لتلقّي إشعارات الإصدار.
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
، يجب إزالة هذه العلامة. يمكنك مراجعة ملاحظات نقل بيانات Clang للحصول على نصائح حول كيفية توافق التجميع مع LLVM. - تمت إزالة GDB. يمكنك استخدام LLDB بدلاً من ذلك. تجدر الإشارة إلى أنّ ndk-gdb يستخدم LLDB تلقائيًا، وأنّ "استوديو Android" لم يتوافق إلا مع LLDB.
- لم يعد الإصدار Jelly Bean (واجهات برمجة التطبيقات 16 و17 و18) متاحًا. وأن أقل نظام تشغيل متوافق مع NDK هو KitKat (المستوى 19 من واجهة برمجة التطبيقات).
- ولم تعُد الأجهزة غير نيون متوافقة. هناك عدد قليل جدًا من الأجهزة القديمة جدًا لا تتوافق مع تطبيق Neon، لذا لن ترصد معظم التطبيقات هذه التطورات إلا بعد التحسّن في الأداء.
- تمت إزالة إتاحة إصدار RenderScript. تم إيقاف RenderScript في نظام التشغيل Android 12. إذا لم تكن قد انتهيت من نقل تطبيقاتك خارج RenderScript، يمكن استخدام NDK r23 LTS.
-
تمّت إزالة وحدة تجميع GNU (GAS). إذا كنت تصمم باستخدام
Android NDK r23 LTS (آب/أغسطس 2021)
سجلّ التغييرات- تنزيل المحتوى
-
- تتوفر عمليات تنزيل هذا الإصدار هنا.
- إعلانات عن أخبار جديدة
-
-
تمّت إزالة أدوات GNU، باستثناء أداة تجميع GNU. وستتم إزالة GAS
في الإصدار التالي. إذا كنت تنشئ المحتوى باستخدام
-fno-integrated-as
، يُرجى إبلاغنا بالأخطاء إذا كان هناك أي شيء يمنعك من إزالة هذه العلامة. -
انتهى دعم GDB. ستتم إزالة قاعدة بيانات GDB من الإصدار التالي.
يمكنك استخدام LLDB بدلاً من ذلك. يُرجى ملاحظة أنّ
ndk-gdb
يستخدم LLDB تلقائيًا. - لكن الإصدار NDK r23 هو الإصدار الأخير الذي يتوافق مع أجهزة غير نيون. بدايةً من NDK r24، سيتم إنشاء مكتبات armeabi-v7a في sysroot باستخدام Neon. هناك عدد قليل جدًا من الأجهزة القديمة جدًا لا تتوافق مع تطبيق Neon، لذلك لن تلاحظ معظم التطبيقات حدوث ذلك باستثناء التحسّن في الأداء.
- لن يكون Jelly Bean (واجهات برمجة التطبيقات 16 و17 و18) متاحة في إصدار NDK التالي. وسيكون الحد الأدنى لنظام التشغيل المتوافق مع NDK في الإصدار r24 هو KitKat (المستوى 19 من واجهة برمجة التطبيقات).
-
تمّت إزالة أدوات GNU، باستثناء أداة تجميع GNU. وستتم إزالة 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 بت متوافقًا. ولا يؤثر ذلك في الغالبية العظمى من المستخدمين. إذا كنت لا تزال بحاجة إلى إنشاء تطبيقات NDK من إصدارات 32 بت من Windows، يمكنك مواصلة استخدام NDK r20.
للحصول على مزيد من المعلومات حول هذا التغيير ضمن أدوات مطوّري برامج Android، يمكنك الاطّلاع على مشاركة المدونة حول الموضوع.
-
LLD متاحة الآن للاختبار.
تم تبديل AOSP إلى استخدام LLD تلقائيًا وسيتبعه NDK
(مخطط زمني غير معروف). يمكنك اختبار LLD في تطبيقك من خلال اجتياز
-fuse-ld=lld
عند الربط. يُرجى العِلم أنّ المشكلة 843 سيؤثر في الإصدارات التي تستخدم LLD مع شريط binutils وobjcopy بدلاً من llvm-strip وllvm-objcopy. -
ستتم إزالة مسارات تثبيت سلسلة الأدوات القديمة خلال الإصدارات القادمة. لقد أصبحت هذه المسارات قديمة منذ NDK r19 وهي تستهلك مساحة كبيرة في NDK. في ما يلي المسارات التي تتم إزالتها:
- أنظمة أساسية
- مصادر/cxx-stl
- سيروسروت
- سلاسل الأدوات (باستثناء سلاسل الأدوات/llvm)
make_standalone_toolchain.py
(على الرغم من أنّ هذا النص البرمجي لم يكن ضروريًا منذ الإصدار r19). للحصول على معلومات عن الانتقال من تنسيق سلسلة الأدوات القديم، راجِع دليل إنشاء نظام صيانة النظام لإصدار NDK الذي تستخدمه. - سيتطلب "متجر Play" دعم الإصدار 64 بت عند تحميل حزمة APK اعتبارًا من آب (أغسطس) 2019. ابدأ عملية النقل الآن لتجنُّب المفاجآت عندما يحين الوقت. للحصول على مزيد من المعلومات، يمكنك الاطّلاع على مشاركة المدونة هذه.
- تتوفّر الآن حِزمة تطبيقات macOS موقَّعة ومُوثَّقة عليها للتنزيل من موقع wiki والموقع الإلكتروني. يُرجى العِلم أنّه لا يمكن توثيق حزمة NDK التقليدية لنظام التشغيل macOS، بما أنّ الحِزم فقط هي التي قد تستخدم بروتوكول RPATH مع توثيق الشهادات. ستواصل حزمة تطوير البرامج (SDK) استخدام الحزمة التقليدية، لأنّ حِزمة التطبيق تتطلب تغييرات في التنسيق تجعلها غير متوافقة مع "استوديو Android". ولا يتم عزل اتفاقية NDK عند تنزيلها من خلال مدير حزمة تطوير البرامج (SDK)، لذلك يُسمح باستخدامها حاليًا من خلال واجهة البوابة الذكية. يعدّ مدير SDK حاليًا الطريقة الأكثر موثوقية للحصول على NDK لنظام التشغيل macOS.
-
Android NDK r20b (حزيران/يونيو 2019)
سجلّ التغييرات- تنزيل المحتوى
-
- تتوفر عمليات تنزيل هذا الإصدار هنا.
- إعلانات عن أخبار جديدة
-
-
LLD متاحة الآن للاختبار.
تعمل AOSP حاليًا على التبديل إلى استخدام LLD تلقائيًا وسيتبعه NDK (المخطط الزمني غير معروف). يمكنك اختبار LLD في تطبيقك من خلال اجتياز
-fuse-ld=lld
عند الربط. - سيتطلب "متجر Play" دعم الإصدار 64 بت عند تحميل حزمة APK اعتبارًا من آب (أغسطس) 2019. ابدأ عملية النقل الآن لتجنُّب المفاجآت عندما يحين الوقت. للحصول على مزيد من المعلومات، يمكنك الاطّلاع على مشاركة المدونة هذه.
- تمت إضافة واجهات برمجة تطبيقات Android Q.
-
LLD متاحة الآن للاختبار.
تعمل AOSP حاليًا على التبديل إلى استخدام LLD تلقائيًا وسيتبعه NDK (المخطط الزمني غير معروف). يمكنك اختبار LLD في تطبيقك من خلال اجتياز
Android NDK r19c (يناير 2019)
سجلّ التغييرات- تنزيل المحتوى
-
- تتوفر عمليات تنزيل هذا الإصدار هنا.
- إعلانات عن أخبار جديدة
-
-
على المطوّرين البدء في اختبار تطبيقاتهم باستخدام LLD. تحوّلت AOSP إلى استخدام
LLD تلقائيًا، وسيستخدمها NDK بشكل تلقائي في الإصدار
التالي. وستتم إزالة BFD وGold بعد انتهاء دورة الإصدار
من دون مشاكل رئيسية لم يتم حلها (تقديرًا من r21). اختبِر
LLD في تطبيقك من خلال اجتياز اختبار
-fuse-ld=lld
عند الربط. ملاحظة: لا يتوافق lld حاليًا مع الرموز المضغوطة على نظام التشغيل Windows. المشكلة 888. لا يمكن لأداة Clang أيضًا إنشاء رموز مضغوطة على نظام التشغيل Windows، ولكن قد يؤدي ذلك إلى حدوث مشكلة عند استخدام عناصر تم إنشاؤها من Darwin أو Linux. - سيتطلب "متجر Play" دعم الإصدار 64 بت عند تحميل حزمة APK اعتبارًا من آب (أغسطس) 2019. ابدأ عملية النقل الآن لتجنُّب المفاجآت عندما يحين الوقت. للحصول على مزيد من المعلومات، يمكنك الاطّلاع على مشاركة المدونة هذه.
-
المشكلة 780:
لم تعُد سلاسل الأدوات المستقلة غير ضرورية. تم تثبيت Clang وbinutils وsysroot وغيرها من أجزاء سلسلة الأدوات على
$NDK/toolchains/llvm/prebuilt/<host-tag>
وسيعثر عليها تلقائيًا. بدلاً من إنشاء سلسلة أدوات مستقلة لـ API 26 ARM، يمكنك استدعاء أداة التجميع مباشرةً من NDK:$ $NDK/toolchains/llvm/prebuilt/
بالنسبة إلى الإصدار r19، يتم تثبيت سلسلة الأدوات أيضًا على المسار القديم لمنح أنظمة الإصدار فرصة للتكيّف مع التنسيق الجديد. ستتم إزالة المسارات القديمة في الإصدار r20. ولن تتم إزالة النص البرمجي/bin/armv7a-linux-androideabi26-clang++ src.cpp make_standalone_toolchain.py
. أصبح هذا الإجراء غير ضروري الآن وسيُصدر تحذيرًا يتضمّن المعلومات المذكورة أعلاه، إلا أنّ النص البرمجي سيبقى للحفاظ على عمليات سير العمل الحالية. إذا كنت تستخدم ndk-build أو CMake أو سلسلة أدوات مستقلة، من المفترض ألا يحدث أي تغيير على سير العمل. يُعدّ هذا التغيير مهمًا لمشرفي أنظمة الإصدار التابعة لجهات خارجية، والذين من المفترض أن يتمكّنوا الآن من حذف بعض الرموز البرمجية الخاصة بنظام التشغيل Android. لمزيد من المعلومات، اطّلِع على دليل إنشاء صيانة النظام. - تمت إزالة تعتمد على ndk. نعتقد أنّ ReLinker هي حل أفضل لحلّ مشاكل تحميل المكتبة الأصلية على إصدارات Android القديمة.
- المشكلة 862: تمت إزالة نصوص برنامج تضمين GCC التي تمت إعادة توجيهها إلى Clang، لأنّها لا تعمل بما يكفي لدرجة أن يتم استبدالها في عمليات الاستبدال.
-
على المطوّرين البدء في اختبار تطبيقاتهم باستخدام LLD. تحوّلت AOSP إلى استخدام
LLD تلقائيًا، وسيستخدمها NDK بشكل تلقائي في الإصدار
التالي. وستتم إزالة BFD وGold بعد انتهاء دورة الإصدار
من دون مشاكل رئيسية لم يتم حلها (تقديرًا من r21). اختبِر
LLD في تطبيقك من خلال اجتياز اختبار
Android NDK r18b (أيلول/سبتمبر 2018)
سجلّ التغييرات- تنزيل المحتوى
-
- تتوفر عمليات تنزيل هذا الإصدار هنا.
- إعلانات عن أخبار جديدة
-
- تمت إزالة GCC.
-
LLD متاحة الآن للاختبار.
تعمل AOSP حاليًا على التبديل إلى استخدام LLD تلقائيًا وسيتبعه NDK (المخطط الزمني غير معروف). يمكنك اختبار LLD في تطبيقك من خلال اجتياز
-fuse-ld=lld
عند الربط. - تمّت إزالة gnustl وgabi++ وstlport.
- تمت إزالة دعم ICS (لنظامي التشغيل Android-14 وandroid-15). لم تعُد التطبيقات التي تستخدم الملفات التنفيذية بحاجة إلى توفير ملف PIE وغير قابل للتنفيذ باستخدام ملفات PIE.
- سيتطلب "متجر Play" دعم الإصدار 64 بت عند تحميل حزمة APK اعتبارًا من آب (أغسطس) 2019. ابدأ عملية النقل الآن لتجنُّب المفاجآت عندما يحين الوقت. للحصول على مزيد من المعلومات، يمكنك الاطّلاع على مشاركة المدونة هذه.
Android NDK r17c (حزيران/يونيو 2018)
سجلّ التغييرات- تنزيل المحتوى
-
- تتوفر عمليات تنزيل هذا الإصدار هنا.
- إعلانات عن أخبار جديدة
-
- لم تعُد GCC متوافقة. ستتم إزالتها في NDK r18.
-
libc++ هي الآن STL الافتراضية لـ CMake وسلاسل الأدوات المستقلة. في حال
اختيار STL مختلفة يدويًا، ننصحك بالانتقال إلى
libc++
. تجدر الإشارة إلى أنّ ndk-build لا يزال مضبوطًا تلقائيًا على "no STL". للحصول على مزيد من التفاصيل، يمكنك الاطّلاع على مشاركة المدونة هذه. - سيتم إيقاف gnustl وstlport نهائيًا وستتم إزالتهما في NDK r18.
- وقد تمت إزالة دعم ARMv5 (armeabi) وMIPS وMIPS64. وستؤدي محاولة إنشاء أيّ من واجهات التطبيق الثنائية (ABI) هذه إلى حدوث خطأ.
- ستتم إزالة دعم ICS (android-14 وandroid-15) من r18.
- سيتطلب "متجر Play" دعم الإصدار 64 بت عند تحميل حزمة APK اعتبارًا من آب (أغسطس) 2019. ابدأ عملية النقل الآن لتجنُّب المفاجآت عندما يحين الوقت. للحصول على مزيد من المعلومات، يمكنك الاطّلاع على مشاركة المدونة هذه.
Android NDK r16b (كانون الأول/ديسمبر 2017)
سجلّ التغييرات- تنزيل المحتوى
- تتوفر عمليات تنزيل هذا الإصدار هنا.
- إعلانات عن أخبار جديدة
-
- تمت إزالة العناوين المتوقّفة نهائيًا. أصبحت العناوين الموحّدة الآن باسم "العناوين". للحصول على نصائح حول نقل البيانات، يُرجى الاطّلاع على ملاحظات نقل العناوين الموحّدة.
- لم تعُد GCC متوافقة. لن تتم إزالته من NDK بعد، ولكن لن تتم إزالته من الوثائق الخلفية بعد الآن. ولا يمكن إزالتها إلا بعد أن تصبح libc++ ثابتة بما يكفي لتكون الإعدادات التلقائية، لأنّ بعض أجزاء gnustl لا تزال غير متوافقة مع Clang. وستتم إزالتها عند إزالة STL الأخرى في الإصدار r18.
- لقد خرجت
libc++
من مرحلة الإصدار التجريبي وأصبحت الآن STL المفضّلة في NDK. اعتبارًا من r17، ستصبحlibc++
STL التلقائية لـ CMake وسلاسل الأدوات المستقلة. في حال اختيار STL مختلفة يدويًا، ننصحك بالانتقال إلىlibc++
. لمزيد من التفاصيل، يُرجى الاطّلاع على مشاركة المدونة هذه. - تم إيقاف دعم ARM5 (armeabi) وMIPS وMIPS64 نهائيًا. ولن يتم إنشاؤها تلقائيًا باستخدام ndk-build، ولكن ستظل قابلة للإنشاء إذا تمت تسميتها بشكل صريح، وسيتم تضمينها بواسطة "all" و"all32" و "all64". وتمت إزالة دعم كل من هذه الإجراءات في الإصدار 17. سيُصدر كل من CMake وndk-build تحذيرًا إذا استهدفت أيًّا من واجهات التطبيق الثنائية (ABI) هذه.
- واجهات برمجة التطبيقات
-
تمت إضافة واجهات برمجة التطبيقات الأصلية لنظام Android 8.1. لمزيد من المعلومات حول واجهات برمجة التطبيقات هذه، يمكنك الاطّلاع على مقالة نظرة عامة على واجهات برمجة التطبيقات المدمجة مع المحتوى.
للحصول على معلومات إضافية عن الميزات الجديدة والتغييرات في هذا الإصدار، يمكنك الاطّلاع على سجلّ التغييرات هذا.
Android NDK r15c (تموز/يوليو 2017)
سجلّ التغييرات- تنزيل المحتوى
- تتوفر عمليات تنزيل هذا الإصدار هنا.
- إعلانات عن أخبار جديدة
-
- يتم تفعيل العناوين الموحّدة تلقائيًا. وللتعرّف على كيفية استخدام هذه العناوين، يمكنك الاطّلاع على العناوين الموحّدة.
- لم تعُد GCC متوافقة. لم تتم إزالتها من NDK بعد، ولكنها لم تعد تتلقى المنافذ الخلفية. ولا يمكن إزالتها إلا بعد استقرار libc++ بشكل كافٍ ليكون الإعداد التلقائي، حيث لا تزال بعض أجزاء gnustl غير متوافقة مع Clang.
- لم يعد الإصدار 2.3 من نظام التشغيل Android (
android-9
) متوافقًا. أصبح الحد الأدنى لاستهداف مستوى واجهة برمجة التطبيقات في NDK هو Android 4.0 (android-14
). وإذا تم ضبطAPP_PLATFORM
على أقل منandroid-14
، سيتم استخدامandroid-14
بدلاً من ذلك. - يتيح CMake in NDK الآن إنشاء رمز تجميع مكتوب بلغة YASM لتشغيله على البِنى الأساسية x86 وx86-64. لمزيد من المعلومات، يمكنك الاطّلاع على إنشاء رمز التجميع.
ملاحظة: ستتم إزالة العناوين التي تم إيقافها نهائيًا في إصدار قادم. إذا واجهت أي مشاكل في هذه العناوين، يُرجى الإبلاغ عن خطأ.
للحصول على نصائح حول نقل البيانات، يمكنك الاطّلاع على ملاحظات حول نقل العناوين الموحّدة.
- واجهات برمجة التطبيقات
-
تمت إضافة واجهات برمجة التطبيقات الأصلية لنظام 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. ومن المحتمل أن تتم إزالتها بعد هذه المرحلة.
- تمت إضافة simpleperf، وهو محلِّل وحدة المعالجة المركزية (CPU) لنظام التشغيل Android.
- R13b
-
-
إصلاحات إضافية لمشكلة
__cxa_bad_cast
المفقودة.
-
إصلاحات إضافية لمشكلة
- العُقدة (NDK)
-
- إعداد
NDK_TOOLCHAIN_VERSION
التلقائي الآن على Clang. - تم تحديث libc++ إلى r263688.
- أعدنا ضبط البيانات على عملية مسح (تقريبًا). من المفترض أن يؤدي هذا الإجراء إلى إزالة عدد من الأخطاء، إلا أنّنا لا نزال بحاجة إلى مسح libandroid_support قبل أن نقترحه كإعداد تلقائي.
-
أصبح
make-standalone-toolchain.sh
الآن مجرد برنامج تضمين حول إصدار الأداة من لغة Python. هناك بعض الاختلافات السلوكية. يمكنك الاطّلاع على رسالة الإلغاء للحصول على التفاصيل. - تمت إزالة بعض مكتبات واجهات ABI غير المتوافقة (mips64r2 وmips32r6 وmips32r2 وx32). قد يكون ما زال هناك بعض المتعثرين.
- تم حل المشاكل المتعلقة بالعملية crtbegin_static.o التي نتجت عن عدم مغادرة الرابط في وقت الربط عند إنشاء ملف ثابت قابل للتنفيذ لنظام التشغيل ARM android-21 والإصدارات الأحدث: المشكلة 132.
- تمت إضافة ملف سلسلة أدوات CMake ضمن الإصدار/cmake/android.toolchain.cmake.
- إعداد
- المشاكل المعروفة
-
- ولا نقصد بذلك أن تكون هذه القائمة شاملة تتضمّن جميع الأخطاء العالقة.
- ولا تعمل سلاسل الأدوات المستقلة التي تستخدم libc++ وGCC. يبدو أنّ هناك خطأ في GCC. يمكنك الاطّلاع على رسالة الإتمام للحصول على مزيد من التفاصيل.
- ولم يتم بعد الكشف عن رؤوس ومكتبات Bionic الخاصة بالإصدارين Marshmallow وN، على الرغم من توفُّر الإصدار android-24. لا تزال هذه الأنظمة الأساسية هي عناوين ومكتبات Lollipop (وليس التراجع عن الإصدار r11).
- أدوات RenderScript غير متوفرة (ليست تراجعًا من r11): المشكلة 7.
Android NDK r12b (حزيران/يونيو 2016)
- تنزيل المحتوى
- تتم أرشفة عمليات تنزيل هذا الإصدار هنا.
- إعلانات عن أخبار جديدة
- يتم ضبط الأمر
ndk-build
تلقائيًا على استخدام Clang في r13. وسنزيل GCC في إصدار لاحق. - ستتم إزالة النص البرمجي
make-standalone-toolchain.sh
في r13. تأكَّد من أنّ "make_standalone_toolchain.py
" يتناسب مع احتياجاتك. - يمكنك الإبلاغ عن المشاكل إلى GitHub.
- لقد أصلحنا مشكلة
ndk-gdb.py
. (المشكلة 118) -
لقد عدّلنا السمة
NdkCameraMetadataTags.h
بحيث لا تحتوي على قيمة تعداد غير صالحة. - تم إصلاح خطأ في إصدار ndk تسبّب في ظهور تحذيرات كاذبة للمكتبات الثابتة التي تستخدم libc++. للحصول على مزيد من المعلومات حول هذا التغيير، يمكنك الاطّلاع على التعليقات هنا.
- تم تحديث رؤوس OpenSLES لنظام التشغيل android-24.
- العُقدة (NDK)
- لقد أزلنا دعم واجهة التطبيق الثنائية (ABI) armeabi-v7a-hard. لمزيد من المعلومات، يمكنك الاطّلاع على هذا الشرح.
- تمت إزالة جميع sysroots لمستويات النظام الأساسي قبل غيغابايت. وقد تم إلغاء إمكانية الوصول إليها في الإصدار 11، ولكن تم إهمال إزالتها فعليًا.
- أصبحت الآن معالجة الاستثناء عند استخدام c++_shared على ARM32 متاحة الآن في الغالب. سيتم الآن ربط أداة فك الترميز بكل عنصر مرتبط بدلاً من ربطها بـ libc++ نفسها. لمزيد من المعلومات حول معالجة الاستثناءات هذه، يُرجى مراجعة المشاكل المعروفة.
- تم اختصار علامات المحول البرمجي التلقائية.
(المشكلة 27).
- للحصول على معلومات كاملة عن هذه التغييرات، يمكنك الاطّلاع على قائمة التغييرات هذه.
- تمت إضافة تنفيذ بايثون لسلاسل الأدوات المستقلة:
build/tools/make_standalone_toolchain.py
.- لم يعد مستخدمو Windows بحاجة إلى Cygwin لاستخدام هذه الميزة.
- سنزيل نكهة الباش في r13، لذا اختبِر الصيغة الجديدة الآن.
- تم تفعيل
-fno-limit-debug-info
تلقائيًا لإصدارات تصحيح أخطاء Clang. من المفترض أن يؤدي هذا التغيير إلى تحسين إمكانية تصحيح الأخطاء باستخدام LLDB. - تم تفعيل
--build-id
تلقائيًا الآن.- سيتم الآن عرض رقم تعريف الإصدار في تقارير الأعطال الأصلية لتتمكّن من التعرّف بسهولة على إصدار الرمز الذي كان قيد التشغيل.
- من المفترض ألا تتسبب
NDK_USE_CYGPATH
في حدوث مشاكل مع libgcc. (Android المشكلة 195486) - تم الآن تفعيل الخيارات
-Wl
و--warn-shared-textrel
و-Wl,--fatal-warnings
تلقائيًا. إذا كانت لديك عمليات نقل مشاركة النصوص، لن يتم تحميل تطبيقك على الإصدار Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث. ولم يتم مطلقًا السماح بعمليات نقل النصوص في تطبيقات 64 بت. - يجب أن تعمل العناوين المجمّعة مسبقًا بشكل أفضل. (المشكلة 14 والمشكلة 16)
- تمت إزالة مكتبات STL التي لا يمكن الوصول إليها.
- وتمت إضافة Vulkan إلى android-24.
- تمت إضافة Choreographer API إلى الإصدار android-24.
- تمت إضافة واجهات برمجة التطبيقات
libcamera2
API للأجهزة التي تعمل بالإصدارINFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
أو الإصدارات الأحدث. لمزيد من المعلومات، يُرجى الاطّلاع على خصائص الكاميرا. - كلانغ
- تم تحديث Clang إلى 3.8svn (r256229، الإصدار 2812033).
- الملفات القابلة للتنفيذ
clang.exe
وclang++.exe
في حزمة Windows 32 بت هي في الواقع 64 بت. تتم تسمية الملف التنفيذي 32 بت باسمclang_32.exe
.
من المفترض أن يعمل - الملفات القابلة للتنفيذ
- بلدان مجلس التعاون الخليجي
- تتم مزامنتها مع نظام التشغيل ChromeOS GCC على الرابط google/gcc-4_9 r227810.
- تصحيح معقّم التغطية الاحتياطي من ToT (r231296)
- تم إصلاح libatomic لعدم استخدام
ifuncs
. (المشكلة 31) - منصة Binutils
- تم كتم صوت رسالة المعلومات "تم العثور على خطأ 843419 وأصلحه".
- تم تقديم الخيار
--long-plt
لإصلاح خطأ أداة الربط الداخلي الذي يحدث عند ربط ثنائيات bar32 الضخمة. - تم إصلاح بذور وقت التشغيل الخاطئة لـ AArch64. وأدّى ذلك إلى أن يتم احتساب عناوين الانتقال بشكل غير صحيح لقواعد البيانات الوصفية الكبيرة جدًا.
- تم تقديم الخيار التلقائي
--no-apply-dynamic
لمعالجة خطأ في أداة الربط الديناميكي في إصدارات Android السابقة. - لا يعمل NDK r11 KI لـ
dynamic_cast
مع Clang. لقد تم إصلاح مشاكل x86 وstlport_static
والتحسين. - قاعدة بيانات Google
- تم التحديث إلى الإصدار 7.11 من GDB. لمزيد من المعلومات، اطّلِع على صفحة أخبار GDB.
- بعض إصلاحات الأخطاء في
ndk-gdb.py
. - المشاكل المعروفة
- ما زال x86 ASAN لا يعمل. لمزيد من المعلومات، يمكنك الاطّلاع على المناقشة حول قائمة التغييرات هذه.
- لا يزال خيار الاسترخاء باستخدام
c++_shared
غير متوافق مع ARM على نظام التشغيل Android 2.3 (مستوى واجهة برمجة التطبيقات 9) أو Android 4.0 (المستوى 14 من واجهة برمجة التطبيقات). - لم يتم بعد عرض عناوين ومكتبات Bionic لنظامَي Android 6.0 (المستوى 23 لواجهة برمجة التطبيقات) وAndroid 7.0 (المستوى 24 من واجهة برمجة التطبيقات) على الرغم من توفُّر الإصدار 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)
- تمت إزالة دعم واجهة التطبيق الثنائية (ABI) armeabi-v7a-hard. اطّلِع على الشرح الوارد في المستندات.
- تمت إزالة جميع قواعد النظام لمستويات النظام الأساسي التي تسبق الإصدار Android 2.3 (المستوى 9 من واجهة برمجة التطبيقات). وقد تركنا الدعم اللازم لها في الإصدار NDK r11، ولكننا أهملنا إزالتها.
- تم تعديل معالجة الاستثناءات عند استخدام c++_shared على معالج ARM32 كي يعمل في أغلب الأحيان (راجِع المشاكل المعروفة). تم ربط أداة فك الضغط الآن بكل كائن مرتبط بدلاً من ربطها بـ libc++ نفسها.
- تم اختصار علامات برنامج التجميع التلقائية (مشكلة NDK 27). يمكنك الاطّلاع على تفاصيل هذا التعديل في Change 207721.
- تمت إضافة تطبيق Python لسلاسل الأدوات المستقلة في
build/tools/make_standalone_toolchain.py
. على نظام التشغيل Windows، لم تعد بحاجة إلى Cygwin لاستخدام هذه الميزة. يُرجى العِلم أنّه ستتم إزالة نكهة bash في إصدار قادم، لذا يُرجى اختبار الإصدار الجديد الآن. - نُسخ تصحيح أخطاء 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 بت. - تم إصلاح بعض المشاكل لكي تعمل العناوين المجمّعة مسبقًا بشكل أفضل (مشكلة NDK 14، مشكلة NDK 16).
- تمت إزالة مكتبات STL التي لا يمكن الوصول إليها.
- وتمت إضافة Vulkan إلى android-24.
- تمت إضافة Choreographer API إلى الإصدار android-24.
- تمت إضافة واجهات برمجة تطبيقات libcamera2 للأجهزة التي تتوافق مع
مستوى الميزة
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
أو مستوى أعلى. لمزيد من المعلومات، يمكنك الاطّلاع على مرجعCameraCharacteristics
. - كلانغ
- تم تحديث Clang إلى 3.8svn (r256229، الإصدار 2812033). الملفان التنفيذيان
clang.exe
وclang++.exe
في حزمة Windows بسعة 32 بت هو في الواقع 64 بت. الملف التنفيذي 32 بت باسمclang_32.exe
. - تم إصلاح أخطاء
__thread
لكي تعمل بشكل فعلي في الوقت الحالي. - بلدان مجلس التعاون الخليجي
- مزامنة برنامج التحويل البرمجي مع ChromeOS GCC @ google/gcc-4_9 r227810.
- تصحيح معقّم التغطية الاحتياطي من ToT (r231296)
- تم إصلاح
libatomic
لعدم استخدام حروف ifuncs (مشكلة NDK 31). - منصة Binutils
- تم كتم صوت رسالة المعلومات "تم العثور على خطأ 843419 وأصلحه".
- تم تقديم الخيار
--long-plt
لإصلاح خطأ في أداة الربط الداخلية عند ربط ثنائيات كبيرة الحجم في bar32. - تم إصلاح كبدات وقت التشغيل الخاطئة لـ
AArch64
. تسبّبت هذه المشكلة في احتساب عناوين الانتقال بشكل غير صحيح للكائنات المشتركة الديناميكية الكبيرة (DSO). - تم تقديم الخيار التلقائي
--no-apply-dynamic
للتغلب على خطأ أداة الربط الديناميكي في إصدارات Android السابقة. - تم إصلاح مشكلة معروفة في NDK r11 حيث كان
dynamic_cast
لا يعمل مع Clang وx86 وstlport_static والتحسين. - قاعدة بيانات Google
- تم التحديث إلى الإصدار 7.11 من GDB. لمزيد من المعلومات حول هذا الإصدار، راجِع أخبار GDB
- تم إصلاح عدد من الأخطاء في نص
ndk-gdb.py
البرمجي. - المشاكل المعروفة
- لا يعمل معالج العنوان (ASAN) بنظام x86 حاليًا. للحصول على مزيد من المعلومات، يُرجى الاطّلاع على المشكلة 186276.
- إنّ خيار الاسترخاء باستخدام
c++_shared
لا يعمل مع ARM على أجهزة Android 2.3 (مستوى واجهة برمجة التطبيقات 9) أو Android 4.0 (المستوى 14 من واجهة برمجة التطبيقات). - لم يتم بعد عرض عناوين ومكتبات Bionic لنظام التشغيل Android 6.0 (المستوى 23 لواجهة برمجة التطبيقات) والإصدارات الأحدث على الرغم من توفُّر الإصدار android-24. ولا تزال هذه الأنظمة الأساسية تحتوي على عناوين ومكتبات Android 5.0 (المستوى 21 من واجهة برمجة التطبيقات) بما يتوافق مع NDK r11.
- أدوات RenderScript غير متوفرة، وهو ما يتوافق مع NDK r11. (المشكلة 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) - إصلاح استخدام cygpath للمحول البرمجي libgcc. (Android المشكلة 195486)
Android NDK r11b (آذار (مارس) 2016)
- العُقدة (NDK)
-
- إشعارات مهمة
- لقد نقلنا أداة تتبّع الأخطاء إلى GitHub.
- التغييرات
- تم إصلاح
ndk-gdb.py
. انحدار تمامًا في الإصدار 11. - تم
إصلاح
ndk-gdb
لنظام التشغيل Mac. - تمت إضافة المزيد من الاختصارات ذات المستوى الأعلى لأدوات سطر الأوامر:
ndk-depends
.ndk-gdb
.ndk-stack
.ndk-which
، حيث لم يتم توفير هذا الأمر بالكامل في الإصدارات السابقة.
- تم إصلاح سلاسل أدوات مستقلة لم تكن متوفّرة على
__cxxabi_config.h
. - تم إصلاح مستندات المساعدة الخاصة بـ
--toolchain
فيmake-standalone-toolchain.sh
.
- تم إصلاح
- إشعارات مهمة
- كلانغ
-
- الأخطاء المطبعية
- على عكس ما أبلغنا عنه في ملاحظات الإصدار r11، لا يعمل
__thread
. ويرجع ذلك إلى أنّ إصدار Clang الذي نشحنه لا يتضمّن إصلاحًا للخطأ في دعم بروتوكول أمان طبقة النقل (TLS) في وضع المحاكاة.
Android NDK r11 (آذار (مارس) 2016)
- كلانغ
-
- إشعارات مهمة
- ننصحك بشدة بالتبديل إلى Clang.
- إذا كنت تواجه مشاكل في Clang، يُرجى الإبلاغ عن الأخطاء هنا لمعالجة المشاكل الخاصة بـ Clang في NDK. بالنسبة إلى مشاكل Clang العامة، يمكنك الإبلاغ عن الأخطاء من خلال اتّباع التعليمات الواردة في هذه الصفحة.
- تم تحديث Clang إلى الإصدار 3.8svn (r243773، الإصدار 2481030).
- هذا الإصدار هو عبارة عن لغة Clang كاملة تقريبًا.
- تحتوي حزمة NDK القابلة للتنزيل على نظام التشغيل Windows على إصدار 32 بت من Clang.
- ننصحك بشدة بالتبديل إلى Clang.
- الإضافات
- توفّر لغة Clang الآن إمكانية استخدام بروتوكول أمان طبقة النقل (TLS) في وضع المحاكاة.
- يتوافق برنامج التجميع الآن مع
__thread
من خلال محاكاة ELF TLS مع البيانات الخاصة بسلسلة محادثات pthread. - تعمل لغة C+11
thread_local
في بعض الحالات، ولكن ليس مع البيانات التي تتضمّن أدوات تدميرية بسيطة، لأنّ هذه الحالات تتطلّب دعمًا من libc. ولا ينطبق هذا القيد عند تشغيل التطبيق على نظام التشغيل Android 6.0 (المستوى 23 لواجهة برمجة التطبيقات) أو إصدار أحدث. - لا تعمل ميزة "بروتوكول أمان طبقة النقل" (TLS) التي تمت محاكاتها حتى الآن مع ARC64 عند الوصول إلى متغيّرات بروتوكول أمان طبقة النقل (TLS) من مكتبة مشتركة.
- يتوافق برنامج التجميع الآن مع
- توفّر لغة Clang الآن إمكانية استخدام بروتوكول أمان طبقة النقل (TLS) في وضع المحاكاة.
- إشعارات مهمة
- بلدان مجلس التعاون الخليجي
-
- إعلانات مهمة
- تم إيقاف لغة GCC في NDK لصالح Clang.
- لن تتم ترقية NDK إلى الإصدار 5.x، أو قبول النسخ الخلفية غير المهمة.
- سيتم التعامل مع صيانة البيانات التي تم تجميعها بشكل غير صحيح وأخطاء المحول البرمجي الداخلية في الإصدار 4.9 على أساس كل حالة على حدة.
- عمليات الإزالة
- تمت إزالة GCC 4.8. تستخدم جميع الاستهدافات الآن الإصدار 4.9 من GCC.
- التغييرات الأخرى
- متزامن من google/gcc-4_9 مع r224707 وقد تمت مزامنتها في السابق مع r214835.
- العُقدة (NDK)
-
- إشعارات مهمة
- ولم يعد يتم تضمين العينات في حزمة NDK. وهي متاحة بدلاً من ذلك على GitHub.
- لم يعد الوثائق مضمنة في حزمة NDK. يمكن العثور عليه بدلاً من ذلك على الموقع الإلكتروني لمطوّري تطبيقات Android.
- الإضافات
- تمت إضافة واجهة برمجة تطبيقات أصلية للتتبّع إلى
android-23
. - تمت إضافة واجهة برمجة تطبيقات أصلية لشبكات متعددة إلى
android-23
. - تم تفعيل libc وm وdl لتوفير رموز ذات نُسخ مختلفة، بدءًا من المستوى 21 من واجهة برمجة التطبيقات.
- تمت إضافة عناوين Vulkan ومكتبةها إلى مستوى واجهة برمجة التطبيقات N.
- تمت إضافة واجهة برمجة تطبيقات أصلية للتتبّع إلى
- عمليات الإزالة
- تمت إزالة الدعم لـ
_WCHAR_IS_8BIT
. - تمت إزالة sed.
- تمت إزالة mclinker.
- تمت إزالة Perl.
- أن تتم إزالتها من جميع إصدارات NDK libc وm وdl من جميع الرموز التي لا تتوافق معها إصدارات الأنظمة الأساسية من هذه المكتبات
- تمت إزالة دعم mips64r2 جزئيًا. وستتم إزالة الإعلانات المتبقية في المستقبل.
- تمت إزالة الدعم لـ
- التغييرات الأخرى
- تم تغيير سلاسل أدوات ARM المستقلة إلى Arm7 تلقائيًا.
- يمكنك استعادة السلوك القديم من خلال ضبط الخيار
-target
علىarmv5te-linux-androideabi
.
- يمكنك استعادة السلوك القديم من خلال ضبط الخيار
- تم تغيير نظام الإنشاء لاستخدام
-isystem
للأنظمة الأساسية المضمَّنة.- التحذيرات من أن تؤدي العوامل الحيوية إلى عدم تعطُّل إصدارات التطبيقات بعد الآن
- تم إصلاح خطأ خطأ حدث عندما طرح برنامج ثنائي استثناءات عبر gabi++. (المشكلة 179410)
- تم تغيير مساحة الاسم المضمّنة في libc++ إلى
std::__ndk1
لمنع مشاكل ميزة ODR في النظام الأساسي libc++. - تم الآن إنشاء جميع مكتبات libc++ باستخدام libc++abi.
- تم تحويل
APP_PLATFORM
التلقائي إلى الزنجبيل.- توقَّع أن يتم دعم Froyo والإصدارات الأقدم في إصدار مستقبلي.
- تم تغيير سلاسل أدوات ARM المستقلة إلى Arm7 تلقائيًا.
- تم تحديث بنية gabi++
_Unwind_Exception
لنظام 64 بت. - تمت إضافة الإمكانات التالية إلى ميزات الكمبيوتر:
- اكتشف SSE4.1 وSSE4.2.
- اكتشاف ميزات وحدة المعالجة المركزية (CPU) على أجهزة x86_64
- تم تعديل libc++abi ليصبح متقدمًا r231075.
- تم تعديل البيانات في
byteswap.h
وendian.h
وsys/procfs.h
وsys/ucontext.h
وsys/user.h
وuchar.h
من ToT Bionic. - تمت مزامنة
sys/cdefs.h
على جميع مستويات واجهة برمجة التطبيقات. - تم إصلاح
fegetenv and fesetenv
لمجموعة التجربة. - إصلاح حجم/محاذاة مؤشر النهاية
crtend_*
للرمز mips64 وx86_64
- إشعارات مهمة
- منصة Binutils
-
- الإضافات
- تمت إضافة خيار جديد:
--pic-veneer
.
- تمت إضافة خيار جديد:
- عمليات الإزالة
- لم تعد حزمة Windows 32 بت تحتوي على ld.gold. يمكنك بدلاً من ذلك الحصول على ld.gold من حزمة Windows 64 بت.
- التغييرات
- مصدر binutils موحَّد بين Android وChromiumOS للاطّلاع على مزيد من المعلومات حول هذا التغيير، يمكنك مراجعة التعليقات هنا.
- تم تحسين موثوقية "الذهب" لـ arc64. استخدِم
-fuse-ld=gold
في وقت الربط لاستخدام الذهب بدلاً من Bfd. ومن المرجّح أن يتم تبديل الإعدادات التلقائية في الإصدار التالي. - تم تحسين وقت الربط للقيم الثنائية الكبيرة للقيم الخلفية لـ Golden ARM (تقليل وقت الربط بنسبة تصل إلى 50% في متصفّح Chrome القابل للتصحيح).
- الإضافات
- قاعدة بيانات Google
-
- عمليات الإزالة
- تمت إزالة ndk-gdb لصالح ndk-gdb.py.
- التغييرات
- تم تحديث gdb إلى الإصدار 7.10.
- تحسين الأداء:
- تم تحسين رسائل الخطأ.
- مسارات المشروع النسبية التي تم إصلاحها.
- تم إيقاف Ctrl-C من إنهاء خادم gdbserver في الخلفية.
- دعم محسَّن لنظام التشغيل Windows
- عمليات الإزالة
- نعم
-
- التغييرات
- تم تحديث YASM إلى الإصدار 1.3.0.
- التغييرات
- المشاكل المعروفة
-
- لا يعمل x86 ASAN حاليًا. لمزيد من المعلومات، يمكنك الاطّلاع على المناقشة هنا.
- يؤدي الجمع بين مستويات Clang وx86 وstlport_static والتحسين الأعلى من
-O0
إلى حدوث مشاكل في الاختبار عند استخدامdynamic_cast
. للحصول على مزيد من المعلومات، يمكنك الاطّلاع على التعليقات هنا. - غالبًا ما تفشل معالجة الاستثناء باستخدام c++_shared على ARM32. ويرجع السبب الرئيسي في ذلك إلى عدم التوافق بين أداة فك ضغط LLVM التي يستخدمها libc++abi مع ARM32 و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.
- تمت إزالة الإصدار 4.6 من GCC.
- تم تنفيذ دعم سلاسل المحادثات المتعددة في
ld.gold
لجميع البُنى الأساسية. ويمكنها الآن الربط مع دعم سلاسل المحادثات المتعددة أو بدونها، والطريقة التلقائية هي إجراء ذلك بدونه.- للتجميع باستخدام سلاسل التعليمات المتعددة، استخدِم الخيار
--threads
. - للتجميع بدون سلاسل محادثات متعددة، استخدِم الخيار
--no-threads
.
- للتجميع باستخدام سلاسل التعليمات المتعددة، استخدِم الخيار
- تمت ترقية GDB/gdbserver إلى 7.7 لجميع البنى.
- تمت إزالة حزمة NDK لبرنامج Darwin 32 بت.
- تم دمج الحل البديل الخاص بـ 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.
- إصلاحات الأخطاء الأخرى:
-
- تم إجراء إصلاحات العناوين والمكتبة التالية:
- تم إصلاح
PROPERTY_*
فيmedia/NdkMediaDrm.h
. - تم إصلاح
sys/ucontext.h
لـmips64
. - تم إيقاف فحص إصدار Clang للّغتين
__builtin_isnan
و__builtin_isinf
. - تمت إضافة
android-21/arch-mips/usr/include/asm/reg.h
وandroid-21/arch-mips64/usr/include/asm/reg.h
. - تم إصلاح التحذير الخاطئ بشأن حدود المصفوفة والذي نتج عن GCC 4.9 تم إصداره لنظام التشغيل x86، وتمت إعادة تفعيل حدود الصفيف للتحذير الذي أصدره GCC 4.9 لـ ARM. سبق أن تم إيقاف التحذير بشأن ARM بدون أي شروط.
- تم إصلاح Clang 3.5 للترميز
mips
وmips64
لإنشاء قسم.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)
- تم إصلاح
stlport collate::compare
لعرض-1
و1
. وكان في السابق يعرض أرقامًا موقَّعة عشوائية. - تم إصلاح
ndk-gdb
لـ ABI 64 بت. (المشكلة 118300) - تم إصلاح العطل الذي كان يتسبب فيه نموذج HelloComputeNDK لـ RenderScript على نظام التشغيل Android 4.4 (المستوى 19 لواجهة برمجة تطبيقات Android). ولمزيد من المعلومات، يُرجى الاطّلاع على هذه الصفحة.
- تم إصلاح
libc++ __wrap_iter
في GCC. لمزيد من المعلومات، يُرجى الاطّلاع على مشكلة LLVM 22355. - تم إصلاح دعم
.asm
لواجهة ABIx86_64
. - تم تنفيذ حل بديل لمشكلة
stlport
من GCC 4.8. (المشكلة 127773) - تمت إزالة فاصل الدليل اللاحق
\\
من مسار المشروع في نظام التشغيل Windows. (المشكلة 160584) - تم إصلاح خطأ
no rule to make target
الذي حدث عند تجميع ملف.c
واحد من خلال تنفيذ الأمرndk-build.cmd
منgradle
. (المشكلة 66937) - تمت إضافة مكتبتَي
libatomic.a
وlibgomp.a
غير المضمَّنة في سلاسل أدوات المضيفين التالية:aarch64-linux-android-4.9
mips64el-linux-android-4.9
mipsel-linux-android-4.9
x86_64-4.9
- التغييرات الأخرى:
-
- تمت إضافة
ld.gold
لـaarch64
. الرابط التلقائي هوld.bfd
. لتفعيل السمةld.gold
بشكل صريح، أضِف-fuse-ld=gold
إلى المتغيّرLOCAL_LDFLAGS
أوAPP_LDFLAGS
. - تم إنشاء سلاسل أدوات MIPS وMIPS64 باستخدام
binutils-2.25
، والتي توفّر دعمًا مُحسَّنًا لـ R6. - تم جعل
-fstandalone-debug
(معلومات تصحيح الأخطاء الكاملة) خيارًا تلقائيًا للغة Clang. - تم استبدال
-fstack-protector
بسلاسل أدوات ARM وAArch64 وX86 وX86_64 لـ GCC 4.9 وClang 3.5 وClang 3.6.-fstack-protector-strong
- تمت إضافة مفتاح سطر أوامر
--package
إلىndk-gdb
للسماح لنظام الإصدار بتجاهل اسم الحزمة. (المشكلة 56189) - تم إيقاف
-mno-ldc1-stc1
نهائيًا لنظام التشغيل MIPS. قد لا يعمل هذا الخيار مع خيارَي-fpxx
و-mno-odd-spreg
الجديدَين أو مع واجهة التطبيق الثنائية (ABI) في FPXX. - تمت إضافة رصد MIPS MSA وR6 إلى
cpu-features
.
- تمت إضافة
Android NDK r10d (ديسمبر 2014)
- تغييرات مهمة:
-
- تم ضبط الإصدار 4.8 من GCC كالإعداد التلقائي لجميع واجهات ABI التي تعمل بالإصدار 32 بت. تم إيقاف العمل بالإصدار 4.6 من GCC، وستتم إزالته في الإصدار التالي. لاستعادة السلوك السابق، يمكنك إضافة
NDK_TOOLCHAIN_VERSION=4.6
إلى ndk-build أو إضافة--toolchain=arm-linux-androideabi-4.6
عند تنفيذmake-standalone-toolchain.sh
في سطر الأوامر. يظل الإصدار GCC 4.9 هو الإعداد التلقائي لواجهات ABI الخاصة بـ 64 بت. - تم إيقاف إضافة
-mstackrealign
تلقائيًا لجميع سلاسل أدوات x86[_64]. تفترض سلسلة أدوات NDK محاذاة تكديس 16 بايت. وتفرض الأدوات والخيارات المستخدمة تلقائيًا هذه القاعدة. ويجب أن يحرص المستخدم الذي يكتب رمز التجميع على الحفاظ على محاذاة تسلسل استدعاء الدوال البرمجية، فضلاً عن التزام برامج التجميع الأخرى بهذه القاعدة أيضًا. (الخطأ 38496 في GCC) - تمت إضافة وظيفة "مصحح العنوان" إلى دعم Clang 3.5 إلى ARM وx86 ABI. للاطّلاع على مزيد من المعلومات عن هذا التغيير، يمكنك مراجعة مشروع Sanitizer (أداة تنقيح العناوين).
- تم فرض المتطلبات، بدءًا من المستوى 21 من واجهة برمجة التطبيقات، لاستخدام
-fPIE -pie
عند الإنشاء. في مستويات واجهة برمجة التطبيقات 16 والمستويات الأعلى، يستخدم ndk-build استخدامPIE
عند الإنشاء. هذا التغيير له عدد من الآثار المترتبة عليه تمت مناقشتها في المشكلة رقم 888 الخاصة بمعاينة المطوِّر. ولا تنطبق هذه الآثار على المكتبات المشتركة.
- تم ضبط الإصدار 4.8 من GCC كالإعداد التلقائي لجميع واجهات ABI التي تعمل بالإصدار 32 بت. تم إيقاف العمل بالإصدار 4.6 من GCC، وستتم إزالته في الإصدار التالي. لاستعادة السلوك السابق، يمكنك إضافة
- إصلاحات مهمة للأخطاء:
-
- تم إجراء المزيد من الإصلاحات في ما يتعلّق بـ
خطأ A53 رقم 835769 في رابط arc64-linux-android-4.9. وكجزء من هذه العملية، تُمرِّر خدمة GCC
الخيار الجديد، وهو
--fix-cortex-a53-835769
، عند تحديد-mfix-cortex-a53-835769
(مفعَّلة تلقائيًا). لمزيد من المعلومات، يمكنك الاطّلاع على رسالة binutils ورسالة binutils هذه. - تم توثيق إصلاح تعليق
sscanf/vsscanf
libc++ الذي حدث في المستوى 21 من واجهة برمجة التطبيقات. تم تنفيذ الإصلاح نفسه في r10c. (المشكلة 77988) - تم إصلاح عطل مؤقت لإدارة الطلبات التلقائية (
-fauto-profile
) كان يحدث مع الإصدار 4.9 من GCC عند تحديد-Os
. (المشكلة 77571)
- تم إجراء المزيد من الإصلاحات في ما يتعلّق بـ
خطأ A53 رقم 835769 في رابط arc64-linux-android-4.9. وكجزء من هذه العملية، تُمرِّر خدمة GCC
الخيار الجديد، وهو
- إصلاحات الأخطاء الأخرى:
-
- تم إجراء إصلاحات العناوين والمكتبة التالية:
- تمت إضافة
posix_memalign
إلى المستوى 16 لواجهة برمجة التطبيقات. وتمت أيضًا إضافة نموذج أوّلي فيstdlib.h
إلى مستويات واجهات برمجة التطبيقات من 16 إلى 19. (المشكلة 77861) - تم إصلاح أخطاء
stdatomic.h
بحيث تتضمّن<atomic>
فقط لـ C++11. - تم تعديل العناوين التالية للاستخدام المستقل:
sys/user.h
وgl2ext.h
وdlext.h
وfts.h
وsgidefs.h
للمستوى 21 من واجهة برمجة التطبيقات. - تم تعديل
sys/user.h
لإعادة تسميةmxcsr_mask
باسمmxcr_mask
، ولتغيير نوع بياناتu_ar0
من - تم تغيير نوع القيمة المعروضة "
sysconf()
" منint
إلىlong
. - تم إصلاح معالجة
thumb
للإصدارLOCAL_ARM_MODE
: في r10d، يضيف ndk-buildLOCAL_LDFLAGS+=-mthumb
تلقائيًا، ما لم ينطبق أحد الشروط التالية: - لقد ضبطت
LOCAL_ARM_MODE
على قيمة مساوية لـarm
. - يتم إنشاء إصدار لتصحيح الأخطاء (باستخدام إعدادات مثل
APP_OPTIM=debug
وAndroidManifest.xml
يتضمّنandroid:debuggable="true"
)، حيث يكون وضع ARM هو الوضع التلقائي للحفاظ على التوافق مع سلاسل الأدوات السابقة. (المشكلة 74040) - تم إصلاح
LOCAL_SRC_FILES
في إصدار ndk-لاستخدام المسارات المطلقة في نظام التشغيل Windows. (المشكلة 74333) - تمت إزالة التعليمة البرمجية الخاصة بـ bash من ndk-gdb. (المشكلة 73338)
- تمت إزالة الرمز الخاص بـ bash من
make-standalone-toolchain.sh
. (المشكلة 74145) - المستندات المنقّحة بشأن إصلاح
System.loadLibrary()
تبعيات عابرة (المشكلة 41790) - تم إصلاح مشكلة كانت تمنع استخراج حزم 64 بت على نظام التشغيل Ubuntu 14.04 ونظام التشغيل OS X 10.10 (Yosemite). (المشكلة 78148)
- تم إصلاح مشكلة
LOCAL_PCH
لتحسين دعم Clang. (المشكلة 77575) - تم توضيح التحذير "يتطلب حزمة قابلة للتنفيذ" من ld.gold. (المشكلة 79115)
unsigned long
إلى تنفيذ user_regs_struct*.
Android NDK r10c (تشرين الأول/أكتوبر 2014)
- تغييرات مهمة:
-
- تم إجراء التغييرات التالية على بنية التنزيل:
- تحتوي كل حزمة الآن على عناوين ومكتبات وأدوات 32 بت و64 بت للمنصّة المعنيّة.
- فمكتبات STL التي تتضمن معلومات تصحيح الأخطاء لم تعد بحاجة إلى تنزيلها بشكل منفصل.
- تم تغيير كل ما كان يُعرف سابقًا باسم
Android-L
إلى تصنيف الإصدار الرسمي:android-21
. - تم تحديث الإصدار 4.9 من GCC من خلال الرجوع إلى فرع
google
الخاص بمستودع GCC. تشمل الاختلافات الرئيسية عن الإصدار الرئيسي من GCC 4.9 ما يلي: - يفعّل الخيار
-O2
الآن خط المتجه، بدون إزالة الأجزاء المقلّدة، ولكن تتم إعادة عرض النتائج بسرعة أكبر. - تحسينات على FDO و LIPO
- تمت إضافة Clang 3.5 إلى جميع المضيفين: أصبح
NDK_TOOLCHAIN_VERSION=clang
يختار الآن Clang 3.5. ملاحظات: - يتم استخدام وحدة التجميع المدمجة تلقائيًا مع معالجات ARM وx86. وإذا تسبّب ذلك في حدوث مشاكل، استخدِم
-fno-integrated-as
كحل بديل. - تُصدر لغة Clang 3.5 المزيد من التحذيرات عند استخدام العلامات غير المستخدَمة، مثل خيار
-finline-functions
الذي يتيحه استخدام GCC. - تم السماح بالدخول إلى وضع "تصحيح الأخطاء ART" عند تصحيح الأخطاء على جهاز Android 5.0 باستخدام
ART كجهاز افتراضي، من خلال تحديد خيار
art-on
. لمزيد من المعلومات، يمكنك الاطّلاع علىprebuilt/common/gdb/common.setup
في الدليل الذي يحتوي على NDK. - تمت إزالة التوافق مع Clang 3.3.
- تم إيقاف الإصدار 4.6 من GCC، وقد تتم إزالته من الإصدارات المستقبلية.
- تم تحديث mclinker إلى الإصدار 2.8 مع إتاحة ميزة "طي الرمز المتطابق" ("ICF"). حدِّد ICF باستخدام الخيار
--icf
. - توسيع نطاق توفّر
arm_neon.h
بتنسيقات x86 وx86_64، ما أدى إلى تحقيق تغطية تبلغ% 93 تقريبًا من سمات NEON الأساسية لمزيد من المعلومات عن دعم NEON:- انتقِل إلى دليل مبرمج NDK (
docs/Programmers_Guide/html/
)، وراجِع البنية ووحدات المعالجة المركزية > Neon. - يمكنك الاطّلاع على نموذج
hello-neon
المعدّل فيsamples/
. - يمكنك الاطّلاع على دليل Intel حول نقل البيانات من ARM NEON إلى Intel SSE.
- انتقِل إلى دليل مبرمج NDK (
- تم توثيق الترميز
_FORTIFY_SOURCE
فيheaders/libs/android-21
، والذي ظهر في r10 (عندما كانandroid-21
لا يزال يحمل الاسمAndroid-L
)، ولكن لم يكن يتضمّن أي مستندات.
للحصول على معلومات أكثر تفصيلاً، يمكنك الاطّلاع على مقالة إصلاح الأخطاء المهمة أدناه.
عند نقل البيانات من المشاريع باستخدام GCC، يمكنك استخدام
-Wno-invalid-command-line-argument
و-Wno-unused-command-line-argument
لتجاهل العلامات غير المستخدَمة إلى أن تحدّد ما يجب فعله على المدى الطويل. - إصلاحات مهمة للأخطاء:
-
- تم إصلاح الخطأ الداخلي في برنامج التجميع في GCC4.9/arc64 والذي كان يتسبب في ظهور رسالة الخطأ التالية (المشكلة 77564):
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- تم إصلاح إنشاء الرمز غير الصحيح من GCC4.9/arm. (المشكلة 77567)
- تم إصلاح خطأ داخلي في برنامج التحويل البرمجي في GCC4.9/mips يتضمن تجميعًا مضمّنًا. (المشكلة 77568)
- تم تصحيح الرمز غير الصحيح الذي كان يتم إنشاؤه من خلال GCC4.9/arm لـ
x = (cond) ? y : x
. (المشكلة 77569)- تم تعديل خطأ Cortex-A53 (835769) تلقائيًا. أوقِف الحل البديل عن طريق تحديد
-mno-fix-cortex-a53-835769
. - إصلاحات الأخطاء الأخرى:
-
- تم إجراء إصلاحات المكتبة والعناوين التالية على
android-21
:- تمت إضافة المزيد من رموز مفاتيح التلفزيون:
android/keycodes.h
- تمت إضافة المزيد من الثوابت وستة وظائف أداة استشعار جديدة إلى
android/sensor.h
:ASensorManager_getDefaultSensorEx
وASensor_getFifoMaxEventCount
وASensor_getFifoReservedEventCount
وASensor_getStringType
وASensor_getReportingMode
وASensor_isWakeUpSensor
. - تم إصلاح
stdatomic.h
لتحسين التوافق مع GCC 4.6، وإتاحة العنوان<atomic>
. - تمت إضافة
sys/ucontext.h
وsys/user.h
إلى جميع مستويات واجهة برمجة التطبيقات. يتضمّن عنوانsignal.h
الآن<sys/ucontext.h>
. يمكنك إزالة أي تعريف حالي للسمةstruct ucontext
. - تمت إضافة
posix_memalign
إلى مستويات واجهة برمجة التطبيقات 17 و18 و19. - تمت إضافة الدوال التالية إلى جميع البنى:
android_set_abort_message
وposix_fadvise
وposix_fadvise64
وpthread_gettid_np
. - تمت إضافة الأذونات المطلوبة إلى نموذج
native-media/AndroidManifest.xml
. (المشكلة 106640) - تمت إضافة
clock_nanosleep
وclock_settime
إلى المستوى 21 من واجهة برمجة التطبيقات. (المشكلة 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 كانت تحتوي على ملفات عناصر نائبة.
- تمت إضافة المزيد من رموز مفاتيح التلفزيون:
- تمت استعادة دعم MXU في الإصدار 4.8 من GCC و4.9 ميل في الثانية. ولم يكن هذا الدعم متاحًا في الإصدارين r10 وr10b لأنّه تم تجميع هاتين النسختين من GCC باستخدام أداة binutils-2.24 التي لا تتيح استخدام MXU. وهي تعمل الآن.
- تم إصلاح سمة
--toolchain=
فيmake-standalone-toolchain.sh
بحيث تتيح الآن استخدام لاحقة تحدد نسخة من Clang بشكل صحيح. - تم إصلاح دوال libc++/armeabi
strtod()
. - تم إجراء إصلاحات على مستندات NDK في
docs/
.
- تم إجراء إصلاحات المكتبة والعناوين التالية على
- التغييرات الأخرى:
-
- تم تحسين
cpu-features
لرصد التوافق مع ARMv8 لمجموعات التعليمات التالية: AES وCRC32 وSHA2 وSHA1 وPMULL/PMULL2 64 بت. (المشكلة 106360) - تم تعديل ndk-build لاستخدام
*-gcc-ar
، والمتاح في GCC 4.8 وGCC 4.9 وClang. تحدّدها Clang بدلاً من*-ar
. يوفّر هذا الإعداد دعمًا محسّنًا من أجل LTO. - تمت إزالة العنوانَين
include-fixed/linux/a.out.h
وinclude-fixed/linux/compiler.h
من برنامج تجميع GCC. (المشكلة 73728) - تم إصلاح مشكلة تتعلق بـ
-flto
في GCC 4.8 على نظام التشغيل Mac OS X. نص رسالة الخطأ:
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- تم تصحيح خطأ إملائي في
build-binary.mk.
(المشكلة 76992). - تم تحسين
- المشاكل المعروفة المهمة:
-
- قد يؤدي تحديد نظام التشغيل-O (
-fauto-profile
) في GCC4.9 إلى حدوث أعطال. (المشكلة 77571)
- قد يؤدي تحديد نظام التشغيل-O (
Android NDK r10b (أيلول/سبتمبر 2014)
- ملاحظات مهمة:
-
- بسبب القيد المفروض على الحزم القابلة للتنزيل والتي يبلغ حجمها 512 ميغابايت، لا تكون العناصر التالية بحجم 32 بت ضمن حِزم تنزيل NDK 32 بت. بدلاً من ذلك، تتوفّر في إصدارات 64 بت:
- رؤوس Android-L
- GCC 4.9
- في الوقت الحالي، لا يتيح NDK سوى استخدام Renderscript 32 بت مع Android 4.4 (المستوى 19 من واجهة برمجة التطبيقات). لا يمكنك إنشاء HelloComputeNDK (نموذج Renderscript الوحيد) باستخدام أي تركيبة أخرى من Renderscript (32 أو 64 بت) وإصدار Android.
- لتجميع برنامج الترميز الأصلي، يجب استخدام حزمة NDK 64 بت، والتي تحتوي على جميع رؤوس Android-L.
- إصلاحات مهمة للأخطاء:
- إصلاحات الأخطاء الأخرى:
-
- تمت إزالة
stdio.h
من أدلةinclude-fixed/
لجميع إصدارات GCC. (المشكلة 73728.) - تمت إزالة ملفات العناوين المكرّرة من حِزم Windows في أدلة
platforms/android-L/arch-*/usr/include/linux/netfilter*/
. (المشكلة 73704.) - تم إصلاح المشكلة التي منعت Clang من إنشاء HelloComputeNDK.
- قيمة ثابتة عند الخروج. (المشكلة 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_dlextinfo
فيandroid/dlext.h
. - يتضمّن السمة
__NDK_FPABI__
تعليقات توضيحية للدوال التي تتلقّى أو تعرض قيمًا من نوع عائم أو مزدوج فيstdlib.h
وtime.h
وwchar.h
وcomplex.h
.
- تمت إزالة
- التغييرات الأخرى:
-
- تم تحديث
mipsel-linux-android-4.9
وmips64el-linux-android-4.9
، وتنفيذ تنسيق دليل جديد متعدد القوائم، وتوفير الدعم لـ gdb-7.7 - تم تحسين "
cpu-features
" لرصد المزيد من ميزات Arm64. (تغيير القائمة 100339.)
- تم تحديث
Android NDK r10 (تموز/يوليو 2014)
- تغييرات مهمة:
-
- تمت إضافة 3 واجهات ABI جديدة، جميعها إصدار 64 بت: Arm64-v8a وx86_64 وmips64. ملاحظة:
- GCC 4.9 هو برنامج التجميع التلقائي لعناصر ABI 64 بت. الإصدار 3.4 حاليًا من Clang.
قد لا تعمل السمة
NDK_TOOLCHAIN_VERSION=clang
مع Arm64-v8a وmips64. - Android-L هو المستوى الأوّل الذي يتوافق مع إصدار 64 بت. لاحظ أن مستوى واجهة برمجة التطبيقات هذا هو مستوى مؤقت، ويقتصر على L-preview فقط. سيحل رقم حقيقي لمستوى واجهة برمجة التطبيقات محله في L-Release.
- يتضمّن هذا الإصدار الآن إعدادات
all32
وall64
لخدمةAPP_ABI
.- تعادل
APP_ABI=all32
APP_ABI=armeabi,armeabi-v7a,x86,mips
. - تعادل
APP_ABI=all64
APP_ABI=arm64-v8a,x86_64,mips64
. - يختار
APP_ABI=all
جميع واجهات ABI.
- تعادل
- يحتوي GNU libstdc++ في Android-L على الكل
<tr1/cmath>
قبل تحديد الدالة الحسابية الخاصة بك، تحقَّق من_GLIBCXX_USE_C99_MATH_TR1
للاطّلاع على دالة موجودة بالاسم نفسه، لتجنُّب أخطاء "التعريفات المتعددة" من الرابط. - تم تحديث مكتبة ميزات وحدة المعالجة المركزية (CPU) كيرنل ARMv8. قد تفشل مكتبة ميزات وحدة المعالجة المركزية الحالية في اكتشاف وجود NEON على النظام الأساسي ARMv8. أعد تجميع التعليمات البرمجية باستخدام الإصدار الجديد.
- تمت إضافة دليل
platforms/android-L/
جديد لواجهة برمجة التطبيقات. ويشمل ذلك: - تم تعديل عناوين Bionic لم يتم تغييرها من المستوى 3 لواجهة برمجة تطبيقات Android (Cup كيك) إلى 19 (KitKat). ستتم مزامنة هذا الإصدار الجديد للمستوى L مع برنامج AOSP.
- واجهات برمجة تطبيقات جديدة للوسائط ونموذج لبرنامج ترميز أصلي
- عنوان
Android.h
معدَّل لـ SLES/OpenSLES، ما يتيح استخدام تنسيق صوت النقطة العائمة بدقة واحدة في AudioPlayer - إضافات GLES 3.1 وAEP إلى
libGLESv3.so.
- تم تعديل عناوين GLES2 وGLES3 إلى أحدث إصدارات Khronos الرسمية.
- تمت إضافة برامج التحويل البرمجي في GCC 4.9 إلى واجهات ABI 32/64 بت. GCC 4.9 هو برنامج التجميع التلقائي (فقط) لواجهة التطبيق الثنائية (ABI) 64 بت، كما ذكرنا سابقًا. بالنسبة إلى واجهات ABI 32 بت، يجب تفعيل GCC 4.9 صراحةً، لأنّ GCC 4.6 لا يزال هو الإعداد التلقائي.
- بالنسبة إلى ndk-build، يمكنك تفعيل إصدار 32 بت أو GCC 4.9 إما من خلال إضافة
NDK_TOOLCHAIN_VERSION=4.9
إلىApplication.mk
أو تصديره كمتغير بيئة من سطر الأوامر. - بالنسبة إلى سلسلة أدوات مستقلة، استخدِم الخيار
--toolchain=
في النص البرمجيmake-standalone-toolchain.sh
. مثال:--toolchain=arm-linux-androideabi-4.9.
- تمت ترقية GDB إلى الإصدار 7.6 في الإصدار 4.8/4.9 من GCC وx86*. ونظرًا لأن GDB لا يزال بالإصدار GDB-7.3.x في
GCC 4.6 (الإصدار التلقائي للمعالج ARM وMIPS)، ينبغي لك ضبط
NDK_TOOLCHAIN_VERSION=4.8
أو4.9
لتفعيل ndk-gdb لاختيار GDB 7.6. - تمت إضافة خيار الإصدار
-mssse3
لتوفير دعم SSSE3 وجعله الخيار التلقائي لواجهة ABI x86 (الترقية من SSE3). لا تحتوي الصورة التي نشرتها Google على تعليمات SSSE3. - تم تحديث الإصدار 4.8 من GCC إلى 4.8.3.
- تم تحسين دعم ARM libc++ EH من خلال التبديل من gabi++ إلى libc++abi. لمزيد من التفاصيل، يُرجى الاطّلاع على قسم "دعم C++" في الوثائق. ملاحظات:
- تجتاز جميع الاختبارات الآن، باستثناء اللغة المحلية، لكل من Clang 3.4 وGCC 4.8. لمزيد من المعلومات، راجع قسم "دعم C++" في الوثائق.
- لا تزال مكتبات libc++ لـ X86 وMIPS libc++ تستخدم gabi++.
- يمكن لـ GCC 4.7 والإصدارات الأحدث استخدام <atomic> الآن.
- يجب إضافة
-fno-strict-aliasing
إذا كنت تستخدم<list>
، لأنّ__list_imp::_end
_ يخرق قواعد TBAA. (المشكلة 61571.) - اعتبارًا من GCC 4.6، لن تعيد LIBCXX_FORCE_REBUILD:=true إنشاء libc++. وتتطلب إعادة إنشائها استخدام برنامج تحويل برمجي مختلف. لاحظ أنه لم يتم اختبار Clang 3.3.
- mclinker هو الآن الإصدار 2.7، ويدعم arc64 Linux.
- تمت إضافة دعم مجمّع مسبقًا للعناوين المحددة من قِبل
LOCAL_PCH
. (المشكلة 25412).
- إصلاحات مهمة للأخطاء:
-
- تم إصلاح libc++ بحيث تجمع الآن
std::feof
، وما إلى ذلك. (المشكلة 66668). - تم إصلاح استدعاء مكتبة الذرة Clang 3.3/3.4 الذي تسبب في حدوث أعطال في بعض اختبارات libc++ لـ ABI armeabi.
- تم إصلاح أعطال 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++ بحيث تجمع الآن
- إصلاحات الأخطاء الأخرى:
-
- العناوين الثابتة:
- تم إصلاح
ssize_t
إصدار 32 بت ليصبحint
بدلاً منlong int
. - تم إصلاح
WCHAR_MIN
وWCHAR_MAX
بحيث يتخذان العلامات المناسبة وفقًا للبنية التي تعمل عليها: - X86/MIPS: تم التوقيع.
- ARM: بدون توقيع.
- لفرض ضبط X86/MIPS على القيمة التلقائية غير مُوقَّعة، استخدِم
-D__WCHAR_UNSIGNED__
. - لفرض أن يكون
wchar_t
16 بت، استخدِم-fshort-wchar
. - تمت إزالة الرموز غير المتوفّرة من الإصدار 32 بت من
libc.so
، وإضافةpread64
وpwrite64
وftruncate64
إلى المستوى 12 من واجهة برمجة تطبيقات Android والإصدارات الأحدث. (المشكلة 69319). لمزيد من المعلومات، يُرجى الاطّلاع على رسالة الالتزام المرفقة بقائمة تغييرات AOSP رقم 94137. - تم إصلاح تحذير GCC بشأن إعادة تعريف
putchar
. نص رسالة التحذير: - تم إصلاح
make-standalone-toolchain.sh --stl=libc++
بحيث: - تم إصلاح GCC/Windows لاقتباس الوسيطات فقط عند الضرورة لإنشاء العمليات في البرامج الخارجية. يحد هذا التغيير من احتمالية تجاوز الحد الأقصى البالغ 32 ألفًا.
- تم إصلاح مشكلة جعلت من المستحيل تعديل
متغيّر البيئة
APP_PLATFORM
. - تم إصلاح تنفيذ السمة
IsSystemLibrary()
في crazy_linker لكي تستخدمstrrchr()
بدلاً منstrchr()
للعثور على الاسم الأساسي الحقيقي لمسار المكتبة. - تم إصلاح عدم قدرة المحتوى الصوتي الأصلي على الإنشاء في وضع تصحيح الأخطاء.
- تم إصلاح عدم قدرة gdb على طباعة أرقام النقاط العائمة القصوى. (المشكلة 69203).
- تم إصلاح مشكلة عدم قدرة Clang 3.4 على التجميع باستخدام
-Wl,-shared
(على عكس-shared
الذي لم يواجه مشاكل في التجميع). كانت المشكلة أن Clang أضاف-pie
لاستهدافات Android في حال عدم وجود-shared
أو-static
. أدّى هذا السلوك، الذي كان غير صحيح، إلى تقديم رابط اعتراضًا على عدم تمكّن-shared
و-pie
من التعايش معًا.
include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int);
(تغيير القائمة 91185). - التغييرات الأخرى:
-
- تمت إضافة
arm_neon.h
إلى سلسلة أدوات x86 بحيث تحاكي الآن حوالى% 47 من Neon. ولا يتوفر حاليًا دعم لأنواع 64 بت. للمزيد من المعلومات، راجع القسم الخاص بدعم القيم الأساسية لتقنية ARM في مستندات x86. - تحسين ARM/GOT_PREL المنقول (متوفر في GCC 4.6 من فرع Google في GCC) إلى الإصدار 4.8/4.9 من ARM GCC 4.8/4.9. يقلل هذا التحسين أحيانًا من عدد التعليمات عند الوصول إلى المتغيرات
العالمية. على سبيل المثال، اطّلِع على النص البرمجي Build.sh في
$NDK/tests/build/b14811006-GOT_PREL-optimization/
. - تمت إضافة إصدار ARM لـ STL gabi++ وstlport وlibc++ .
- أصبح من الممكن الآن استدعاء النص البرمجي make- Standalone-toolchain.sh باستخدام السمة
--toolchain=x86_64-linux-android-4.9
، التي تعادل--toolchain=x86_64-4.9
.
- تمت إضافة
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). عند استخدام هذه الخيارات، لاحظ التغييرات التالية: - عند تنفيذ النص البرمجي
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
. - تمت إضافة أداة تجميع yasm، بالإضافة إلى العلامة
LOCAL_ASMFLAGS
وEXPORT_ASMFLAGS
للأهداف x86. يستخدم النص البرمجيndk-build
prebuilts/*/bin/yasm*
لإنشاءLOCAL_SRC_FILES
التي تحتوي على الإضافة.asm
. - تم تحديث MClinker إلى الإصدار 2.6.0، ما يؤدي إلى إضافة دعم
-gc-sections
. - تمت إضافة دعم libc++ التجريبي (upstream r201101). استخدِم هذه الميزة الجديدة باتّباع الخطوات التالية:
- أضِف
APP_STL := c++_static
أوAPP_STL := c++_shared
فيApplication.mk
. يمكنك إعادة الإنشاء من المصدر عبرLIBCXX_FORCE_REBUILD := true
- نفِّذ
make-standalone-toolchain.sh --stl=libc++
لإنشاء سلسلة أدوات مستقلة تحتوي على عناوين libc++/lib.
CPLUSPLUS-SUPPORT.html
. (المشكلة 36496) - أضِف
- تمت إضافة دعم المحول البرمجي Clang 3.4. يختار
الخيار
- إصلاحات مهمة للأخطاء:
-
- تم إصلاح مشكلة غير مرصودة من معالج استثناء غير متوقع لـ GCC 4.6/4.8 ARM EABI. (مشكلة مجلس التعاون الخليجي 59392)
- تم إصلاح الإصدار 4.8 من GCC بحيث يحل الآن التخصص الجزئي في نموذج باستخدام وسيطة نموذج تابعة وغير من النوع بشكل صحيح. (مشكلة GCC 59052)
- تمت إضافة المزيد من الوحدات إلى لغة python سابقة الإنشاء (المشكلة 59902):
- نظام التشغيل Mac OS X:
zlib
وbz2
و_curses
و_curses_panel
و_hashlib
_ssl
- نظام التشغيل Linux:
zlib
وnis
وcrypt
و_curses
و_curses_panel
- نظام التشغيل Mac OS X:
- تم إصلاح خادم gdbserver x86 وMIPS
event_getmsg_helper
. - تم إصلاح العديد من المشكلات في سلسلة أدوات RenderScript NDK، بما في ذلك مشكلات التوافق عبر الأجهزة القديمة وانعكاس C++.
- إصلاحات الأخطاء الأخرى:
-
- إصلاحات العناوين:
- تم إصلاح مشكلة عدم توفّر
#include <sys/types.h>
فيandroid/asset_manager.h
للمستوى 13 من واجهة برمجة تطبيقات Android والمستويات الأعلى. (المشكلة 64988) - تم إصلاح خطأ
#include
غير متوفّر فيandroid/rect_manager.h
للمستوى 14 من واجهة برمجة تطبيقات Android والإصدارات الأحدث. - تمت إضافة
JNICALL
إلىJNI_OnLoad
وJNI_OnUnload
فيjni.h
. يُرجى العلم أنّه تم تحديد السمةJNICALL
على أنّها__NDK_FPABI__
. ولمزيد من المعلومات، يُرجى الاطّلاع علىsys/cdefs.h
. - حدّثنا العناوين التالية بحيث يمكن تضمينها بدون الحاجة إلى تضمين تبعياتها يدويًا (المشكلة 64679):
android/tts.h EGL/eglext.h fts.h GLES/glext.h GLES2/gl2ext.h OMXAL/OpenMAXSL_Android.h SLES/OpenSLES_Android.h sys/prctl.h sys/utime.h
- تم إصلاح مشكلة عدم توفّر
- تمت إضافة
sys/cachectl.h
لجميع البنى. يمكن لمطوّري برامج MIPS الآن تضمين هذا العنوان بدلاً من كتابة#ifdef __mips__
. - تم إصلاح
platforms/android-18/include/android/input.h
من خلال إضافة__NDK_FPABI__
إلى الدوال التي تأخذ قيم عائمة أو قيم مزدوجة أو تعرضها. - تم إصلاح MIPS
struct stat
، والذي تم ضبطه بشكل غير صحيح على نظيره بنظام 64 بت للمستوى 12 من واجهة برمجة تطبيقات Android والإصدارات الأحدث. كان هذا الإعداد الخطأ عبارة عن انحدار تم تقديمه في الإصدار r9c. - تم تحديد
__PTHREAD_MUTEX_INIT_VALUE
و__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE
و__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE
للمستوى 9 من واجهة برمجة تطبيقات Android والمستويات الأدنى. - تمت إضافة
scalbln
وscalblnf
وscalblnl
إلى الإصدار x86 منlibm.so
لواجهات برمجة التطبيقات الإصدار 18 والإصدارات الأحدث. - تم إصلاح خطأ إملائي في
sources/android/support/include/iconv.h
. (المشكلة 63806)
- تم إصلاح أخطاء gabi++ في
std::unexpected()
لطلب استدعاءstd::terminate()
، بحيث تتوفر فرصة تشغيل معالجstd::terminate()
الذي يحدده المستخدم.- تم إصلاح gabi++ للقبض على
std::nullptr
.- العينات الثابتة لكل من إبريق الشاي والمزيد من إبريق الشاي:
- حل مشكلة في رقائق 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
من جميع إصدارات STL.- تم إصلاح
ndk-gdb-py.cmd
من خلال إعدادSHELL
كمتغيّر للبيئة بدلاً من تمريره إلىpython.exe
، الذي يتجاهل الإعداد. (المشكلة 63054)- تم إصلاح النص البرمجي
make-standalone-toolchain.sh
بحيث ينسخ الخيار--stl=stlport
عناوين gabi++ بدلاً من ربطها بالرمز البرمجي، لأنّ صدفةcmd.exe
وMinGW لا تفهم الروابط الرمزية التي أنشأها cygwin. - إصلاحات العناوين:
- التغييرات الأخرى:
-
- تم تطبيق أذونات التنفيذ على جميع النصوص البرمجية
*cmd
التي كانت مخصّصة سابقًا للاستخدام فقط في واجهة أوامرcmd.exe
، وذلك في حال كان مطوّرو البرامج يفضّلون استخدامndk-build.cmd
في cygwin بدلاً من النص البرمجيndk-build
المُقترح. - تم تحسين سرعة النص البرمجي
make-standalone-toolchain.sh
عن طريق نقله بدلاً من النسخ في حال عدم توفّر دليل الوجهة المحدَّد.
- تم تطبيق أذونات التنفيذ على جميع النصوص البرمجية
Android NDK r9c (كانون الأول/ديسمبر 2013)
هذا إصدار إصلاح الأخطاء فقط.
- إصلاحات مهمة للأخطاء:
-
- تم إصلاح مشكلة في GCC 4.8 ARM، والتي أدت إلى استعادة مؤشر المكدس منذ وقت مبكر. منعت هذه المشكلة مؤشر الإطار من الوصول بشكل موثوق إلى متغير في إطار المكدس. (مشكلة GCC 58854)
- تم إصلاح مشكلة في GCC 4.8 libstdc++ ، والتي تسبب فيها خطأ في std::nth_element في إنشاء تعليمات برمجية تسببت في حدوث خطأ segFalse بشكل عشوائي. (المشكلة 62910)
- تم إصلاح الخطأ 4.8 ICE في GCC في cc1/cc1plus عند استخدام
-fuse-ld=mcld
، بحيث لا يظهر الخطأ التالي مرة أخرى:cc1: internal compiler error: in common_handle_option, at opts.c:1774
- تم إصلاح دعم
-mhard-float
للدوال الحسابية__builtin
. لمزيد من المعلومات حول إصلاحات-mhard-float
مع STL، يُرجى اتّباع المشكلة 61784.
- إصلاحات الأخطاء الأخرى:
-
- إصلاحات العناوين:
- تم تغيير النموذج الأولي من
poll
إلىpoll(struct pollfd *, nfds_t, int);
فيpoll.h
. - تمت إضافة
utimensat
إلىlibc.so
للمستويَين 12 و19 من واجهة برمجة تطبيقات Android. ويتم تضمين هذه المكتبات الآن لجميع المستويات من 12 إلى 19 من واجهة برمجة تطبيقات Android. - تم إدخال
futimens
فيlibc.so
، للمستوى 19 من واجهة برمجة تطبيقات Android. - تمت إضافة بيانات
clock_settime()
وclock_nanosleep()
غير المتوفرة إلىtime.h
للمستوى 8 من واجهة برمجة تطبيقات Android والمستويات الأعلى. - تمت إضافة
CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,
وCLOCK_BOOTTIME_ALARM
فيtime.h.
- تمت إزالة الإصدارين القديمين
CLOCK_REALTIME_HR
وCLOCK_MONOTONIC_HR.
- تم تغيير النموذج الأولي من
- في نماذج Teaبوت وMoreTeaputs و
source/android/ndk_helper
:- وقمنا بتغييرها بحيث تستخدم الآن واجهة Abi ثابتة لـ armeabi-v7a.
- تم تعديلها لتستخدم الوضع المجسم على المستوى 19 من واجهة برمجة تطبيقات Android والمستويات الأعلى.
- تم حل مشكلة
Check_ReleaseStringUTFChars
في/system/lib/libdvm.so
، والتي كانت تسبب أعطالاً على الأجهزة التي تعمل بإصدارَي نظام التشغيل x86.
- أخطاء
ndk-build
التي تم إصلاحها تحدث في cygwin عند الإشارة إلى حزمة NDK من خلال الرابط الرمزي. - تم إصلاح أخطاء
ndk-build.cmd
التي تحدث في Windowscmd.exe
عندما يحتويLOCAL_SRC_FILES
على مسارات مطلقة. (المشكلة 69992) - تم إصلاح النص البرمجي
ndk-stack
للمتابعة حتى إذا تعذَّر تحليل إطار بسبب عدم القدرة على العثور على سلسلة إجراءات أو اسم ملف أو رقم سطر. في أي من هذه الحالات، يطبع??
. - تم إصلاح حزمة
ndk-stack
لأهداف Windows-x64_64 كي لا تتطابق عن طريق الخطأ مع سطر إطار في القسمstack:
لا يحتوي علىpc
أوeip
أوip
. مثلاً:I/DEBUG ( 1151): #00 5f09db68 401f01c4 /system/lib/libc.so
- تم إصلاح قيمة gabi++ بحيث:
- لا تستخدم دالة shopping() لتخصيص الكائنات المحلية لسلسلة التعليمات بلغة C++.
- يتجنّب العوائق في gabi++ في الحالات التي تكون فيها قيمة libc.debug.malloc غير صفرية في إصدارات النظام الأساسي userdebug/eng لنظام Android.
- إصلاحات العناوين:
- التغييرات الأخرى:
-
- تمت إضافة "
LOCAL_EXPORT_LDFLAGS
". - تم طرح الإعداد
NDK_PROJECT_PATH=null
للاستخدام في نظام إنشاء متكامل يتم من خلاله تمرير الخيارات صراحةً إلىndk-build
. باستخدام هذا الإعداد، لا يحاولndk-build
البحث عنNDK_PROJECT_PATH.
. يمنع هذا الإعداد أيضًا المتغيرات من اشتقاق الإعدادات التلقائية من NDK_PROJECT_PATH. ونتيجة لذلك، يجب الآن تحديد المتغيّرات التالية بشكل صريح (بقيمها التلقائية في حال توفّرها):NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG
(اختياري، ويتم ضبط القيمة التلقائية على 0)، والمتغيّراتAPP_*
الأخرى المضمّنة فيApplication.mk
. - يمكن الآن تعداد
APP_ABI
في قائمة مفصولة بفواصل. على سبيل مثال:APP_ABI := "armeabi,armeabi-v7a"
- توفير إمكانية إعادة إنشاء جميع STL باستخدام معلومات تصحيح الأخطاء في حزمة اختيارية ومنفصلة تُسمى
android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip
، وذلك باستخدام الخيار-g
. يساعد هذا الخيار النص البرمجي فيndk-stack
على توفير عملية تفريغ أفضل للحزمة في STL. من المفترض ألا يؤثر هذا التغيير في رمز/حجم الملف النهائي الذي تمت إزالته. - تم تحسين نماذج
hello-jni
لإدراجAPP_ABI
عند تجميعها. - تم استخدام أداة
ar
في الوضع الحتمي (الخيار-D
) لإنشاء مكتبات ثابتة. (المشكلة 60705)
- تمت إضافة "
Android NDK r9b (تشرين الأول/أكتوبر 2013)
- تغييرات مهمة:
-
- تم تحديث
include/android/*h
وmath.h
لجميع مستويات واجهة برمجة تطبيقات Android التي تصل إلى 18، بما في ذلك إضافة المستويات 13 و15 و16 و17. للحصول على معلومات عن واجهات برمجة التطبيقات المُضافة، يُرجى الاطّلاع على رسائل الالتزام بالتغييرات 68012 و68014. (المشاكل 47150 و58528 و38423) - تمت إضافة توافق مع المستوى 19 لواجهة برمجة تطبيقات Android، بما في ذلك ربط Renderscript.
- تمت إضافة "
-mhard-float
" إلى واجهة التطبيق الحالية armeabi-v7a ABI. لمزيد من المعلومات والقيود الحالية على Clang، يُرجى الاطّلاع علىtests/device/hard-float/jni/Android.mk
. - تم نقلها من الإصدار 4.8 إلى الإصدار 4.8.2 من GNU Compiler Group (GCC)، مع إضافة إمكانية استخدام الألوان التشخيصية. لتفعيل ألوان التشخيص، يمكنك ضبط
-fdiagnostics-color=auto
أو-fdiagnostics-color=always,
أو تصديرGCC_COLORS
كما هو موضّح أدناه:GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
لمزيد من المعلومات، يمكنك الاطّلاع على الخيارات المستقلة عن اللغة في مجلس التعاون الخليجي. - تمت إضافة نموذجَين جديدَين لعرض ميزات OpenGL ES 3.0: Teaput وMoreTeaputs. وتعمل هذه النماذج على الأجهزة التي تعمل بالإصدار 4.1 من Android (المستوى 16 لواجهة برمجة التطبيقات) والإصدارات الأحدث.
- تم إيقاف دعم الإصدارين 4.7 وClang 3.2 من GCC، وستتم إزالته في الإصدار التالي.
- تم تحديث
- إصلاحات مهمة للأخطاء:
-
- تم إصلاح مشكلة في ARM GCC 4.6
thumb2
لتعذُّر إنشاء جداول انتقال نسبي 16 بت. (مشكلة في مجلس التعاون الخليجي) - تم إصلاح الخطأ الداخلي في برنامج التحويل البرمجي (ICE) في GCC 4.8 في
g++.dg/cpp0x/lambda/lambda-defarg3.C
. (تغيير 62770، مشكلة GCC) - تم إصلاح مشكلة تعذُّر تشغيل الملفات التنفيذية لنظام التشغيل Windows 32 بت
*-gdb.exe
. (المشكلة 58975) - تم إصلاح GCC 4.8 ICE عند إنشاء مكتبة الرموز النقطية. تظهر رسالة الخطأ على النحو التالي:
internal compiler error: verify_flow_info failed
(المشكلة 58916، مشكلة GCC) - تم تعديل إصدار GDB/ARM لتخطّي بيانات
ARM.exidx
للفكّ في رمز المقدمة وإضافة أمر (set arm exidx-unwinding
) للتحكّم في فك ضغط الحزمة المستنِدة إلى exidx. (المشكلة 55826) - تم إصلاح مشكلة في برنامج التحويل البرمجي لـ Clang 3.3 MIPS حيث تتم إعادة استخدام تسجيلات HI وLO بشكل غير صحيح.
- تم إصلاح المشكلة في MIPS 4.7 ICE في
dbx_reg_number
. تظهر رسالة الخطأ على النحو التالي:external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
(GCC Patch)
- تم إصلاح مشكلة في ARM GCC 4.6
- إصلاحات الأخطاء الأخرى:
-
- إصلاحات العناوين
- تم إصلاح ARM
WCHAR_MIN
وWCHAR_MAX
لعدم التوقيع وفقًا للمواصفات (تم توقيع إصداري X86/MIPS). حدِّد_WCHAR_IS_ALWAYS_SIGNED
لاستعادة السلوك القديم. (المشكلة 57749) - تم إصلاح
include/netinet/tcp.h
لاحتواء تعداد الحالةTCP_INFO
. (المشكلة 38881) - تم إصلاح ماكرو
cdefs_elh.h
_C_LABEL_STRING
لإيقاف إنشاء التحذيرات في سلسلة أدوات GCC 4.8 عند استخدام وضع c++11. (المشكلة 58135، المشكلة 58652) - تمت إزالة الدالتين
imaxabs
وimaxdiv
غير المتوفّرتين من العنوانinttypes.h
. - تم إصلاح المشكلة المتعلقة بقيم
pthread_exit()
المعروضة وpthread_self()
. (المشكلة 60686) - تمت إضافة دالة
mkdtemp()
غير المتوفّرة، والتي سبق أن تمت إضافتها إلى عنوانbionic
stdlib.h
.
- تم إصلاح ARM
- تم إصلاح مشكلة إنشاء
samples/gles3jni
باستخدام Clang على المستوى 11 من واجهة برمجة تطبيقات Android. - تم إصلاح MCLinker للسماح بتكرارات متعددة للخيارات التالية:
-gc-sections
و--eh-frame-hdr
. - تم إصلاح MCLinker لقبول خيار
--no-warn-mismatch
. - تم تعديل خيار
cpu-features
لعدم افتراض أن جميع أجهزة VFPv4 تتوافق مع IDIV. والآن يضيف هذا الخيار IDIV فقط إلى الأجهزة المدرجة في القائمة البيضاء، بما في ذلك Nexus 4. (المشكلة 57637) - تم إصلاح مشكلة متعلقة بتسجيل أخطاء
android_native_app_glue.c
عن طريق الخطأ في عمليات ما قبل إرسال الأحداث. - تم إصلاح جميع العمليات في إنهاء
gabi++
ووهو أمر غير متوقع ليكون متوافقًا مع سلاسل المحادثات. - تم إصلاح عدّة مشاكل في خيار 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) - تم إصلاح علامات الاقتباس الإضافية في مخرجات ndk-build على نظام التشغيل Windows. (المشكلة 60649)
- تم إصلاح Clang 3.3 لتجميع العمليات الذرية والمضمَّنة لـ ARM مثل
__atomic_fetch_add
و__atomic_fetch_sub
و__atomic_fetch_or
. - تم إصلاح Clang 3.3 ICE مع تخصيص
vfprintf
. (مشكلة مرتبطة باللغة)
- إصلاحات العناوين
- التغييرات الأخرى:
-
- تم تفعيل OpenMP لجميع إصدارات GCC. لاستخدام هذه الميزة، أضِف العلامات التالية إلى
إعدادات الإصدار:
LOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
للحصول على أمثلة حول الرموز البرمجية، يمكنك الاطّلاع علىtests/device/test-openmp
. - تم تقليل حجم
ld.mcld
بشكل كبير (1.5 ميغابايت مقابلld.bfd
3.5 ميغابايت وld.gold
7.5 ميغابايت)، ما أدّى إلى تحسين السرعة بنسبة %20 تقريبًا. - تمت إضافة
LOCAL_CONLYFLAGS
وAPP_CONLYFLAGS
لتحديد الخيارات السارية على لغة C فقط وليس على لغة C++. يتم أيضًا استخدام الترميزَينLOCAL_CFLAGS
وAPP_CFLAGS
الحاليَّين لتجميع لغة C++ (لتوفير مشكلة في تحديد معظم الخيارات مرتين)، لذلك قد يتعذّر استخدام خيارات مثل-std=gnu99
في إصدارات g++ مع عرض تحذير وإصدارات clang++ مع خطأ. - تمت إضافة وظائف مساعد الصفيف
gabi++
. - يتم إنشاء إصدارات معدّلة من GCC بحيث يتم إنشاء جميع ملفات
libgcc.a
باستخدام-funwind-tables
للسماح بإرجاع المكدس عن طريق النقاط التي تم حظرها سابقًا، مثل__aeabi_idiv0
. - تمت إضافة دعم Ingenic MXU إلى MIPS GCC4.6/4.7/4.8 من خلال خيار
-mmxu
الجديد. - تم توسيع MIPS GCC4.6/4.7/4.8
-mldc1-sdc1
للتحكّم في ldxc1/sdxc1 أيضًا. - تمت إضافة رابط يؤدي إلى تصنيف جنوني. ولمزيد من المعلومات، يمكنك الاطّلاع على
sources/android/crazy_linker/README.TXT
. - تم إصلاح
bitmap-plasma
للرسم إلى وضع ملء الشاشة بدلاً من مساحة بحجم 200×200 بكسل. - تم تقليل أحجام سلسلة أدوات Linux وdarwin بنسبة 25% من خلال إنشاء روابط رمزية للملفات المتطابقة.
- تم تفعيل OpenMP لجميع إصدارات GCC. لاستخدام هذه الميزة، أضِف العلامات التالية إلى
إعدادات الإصدار:
Android NDK r9 (تموز/يوليو 2013)
- تغييرات مهمة:
-
- دعم إضافي لنظام التشغيل Android 4.3 (المستوى 18 من واجهة برمجة التطبيقات). لمزيد من المعلومات، يمكنك الاطّلاع على
STABLE-APIS.html
وأمثلة على الرموز الجديدة فيsamples/gles3jni/README
. - تمت إضافة عناوين ومكتبات لـ OpenGL ES 3.0، المتوافق مع Android 4.3 (مستوى واجهة برمجة التطبيقات 18) والإصدارات الأحدث.
- تمت إضافة برنامج التجميع GNU CompilerCollection (GCC) 4.8 إلى NDK. ولأنّ 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 تلقائيًا.ملاحظة: تم إيقاف كل من الإصدار 4.4.3 من GCC وClang 3.1 نهائيًا، وستتم إزالتهما من إصدار NDK التالي.
- تم تحديث برنامج تصحيح الأخطاء في مشروع GNU (GDB) للتوافق مع لغة python 2.7.5.
- تمت إضافة MCLinker لدعم مضيفي Windows. بما أنّ
ld.gold
هو الإعداد التلقائي حيثما كان متاحًا، يجب إضافة-fuse-ld=mcld
فيLOCAL_LDFLAGS
أوAPP_LDFLAGS
لتفعيل MCLinker. - تمت إضافة أداة
ndk-depends
التي تطبع تبعيات مكتبة ELF. لمزيد من المعلومات، يُرجى الاطّلاع على "NDK-DEPENDS.html
". (المشكلة 53486)
- دعم إضافي لنظام التشغيل Android 4.3 (المستوى 18 من واجهة برمجة التطبيقات). لمزيد من المعلومات، يمكنك الاطّلاع على
- إصلاحات مهمة للأخطاء:
-
- تم إصلاح المشكلة المحتملة لمعالجة الأحداث في
android_native_app_glue
. (المشكلة 41755) - إصدار ARM/GCC-4.7 ثابت لإنشاء محاذاة كافية لتعليمات تحميل وتخزين NEON مع VST وVLD (GCC ISSUE 57271)
- تم إصلاح خطأ في برنامج التجميع الداخلي (ICE) في GCC 4.4.3/4.6/4.7 لقيمة فهرس سالبة ثابتة على سلسلة حرفية. (المشكلة 54623)
- تم إصلاح خطأ تجزئة GCC 4.7 للإعداد المستمر باستخدام عنوان كائن. (المشكلة 56508)
- تم إصلاح خطأ التقسيم 4.6 ARM في GCC لقيم
-O
عند استخدام Boost 1.52.0. (المشكلة 42891) - تم إصلاح
libc.so
وlibc.a
لإتاحة استخدام دالةwait4()
. (المشكلة 19854) - تم تعديل ملفَي x86 libc.so وlibc.a لتضمين الدالة
clone()
. - تم إصلاح خطأ
LOCAL_SHORT_COMMANDS
الذي يكون فيه ملفlinker.list
فارغًا أو غير مستخدَم. - تم إصلاح إصدار GCC MIPS على نظام التشغيل Mac لاستخدام توجيهات CFI، والتي بدونها يتعذّر على
ld.mcld --eh-frame-hdr
بشكلٍ متكرر. - تم إصلاح خطأ المحول البرمجي الداخلي Clang 3.2 X86/MIPS في
llvm/lib/VMCore/Value.cpp
. (تغيير 59021) - تم إصلاح عطل مُجمّع Windows 4.7 64 بت. (الخطأ:
out of memory allocating 4294967280 bytes
). - تم تعديل النص البرمجي
ndk-gdb
بحيث ينتظر الإجراءان--start
أو--launch
الآن وصول خادم تصحيح الأخطاء GNU، وذلك لكي يتمكّن من الوصول إلى نقاط الإيقاف المضبوطة في بداية مسار التنفيذ (مثل نقاط الإيقاف في رمز JNI). (المشكلة 41278)ملاحظة: تتطلّب هذه الميزة jdb وتعرض تحذيرًا بشأن نقاط الإيقاف المعلّقة. حدِّد الخيار
--nowait
لاستعادة السلوك السابق. - تم إصلاح عطل GDB عندما تكون قائمة المكتبة فارغة.
- تم إصلاح عطل في GDB عند استخدام أمر
stepi
بعد تعليماتbx pc
أوblx pc
Thumb. (المشكلة 56962، المشكلة 36149) - تم إصلاح MIPS
gdbserver
للبحث عنDT_MIPS_RLD_MAP
بدلاً منDT_DEBUG
. (المشكلة 56586) - تم إصلاح التبعية الدائرية في النص البرمجي ndk-build، على سبيل المثال: في حال كانت A->B وB->B، تتم إزالة B من الإصدار. (المشكلة 56690)
- تم إصلاح المشكلة المحتملة لمعالجة الأحداث في
- إصلاحات الأخطاء الأخرى:
-
- تم إصلاح النص البرمجي لـ
ndk-build
لتمكينك من تحديد إصدار من Clang كخيار سطر أوامر (على سبيل المثال،NDK_TOOLCHAIN_VERSION=clang3.2
). في السابق، كان يتم فقط تحديد الإصدار بوصفه متغيّر بيئة. - تم إصلاح حجم gabi++ بقيمة
_Unwind_Exception
ليصبح 24 لأهداف إصدار MIPS عند استخدام برنامج تجميع Clang. (تغيير 54141) - تم إصلاح نص
ndk-build
البرمجي للتأكّد من إزالة المكتبات المضمّنة من المشاريع التي تتضمّن مكتبات ثابتة مُنشأة مسبقًا عند استخدام الأمرndk-build clean
. (التغيير 54461، تغيير 54480) - تم تعديل خيار
NDK_ANALYZE=1
لتقليل الإسهاب. - تم إصلاح
gnu-libstdc++/Android.mk
لتضمين مسارbackward/
في الإصدارات التي تستخدم التوافق مع الأنظمة القديمة. (المشكلة 53404) - تم إصلاح المشكلة المتمثلة في عرض
stlport new
لقيم عشوائية أحيانًا. - تم إصلاح
ndk-gdb
ليطابق ترتيبCPU_ABIS
، وليسAPP_ABIS
. (المشكلة 54033) - تم إصلاح مشكلة اختيار NDK 64 بت إصدار على MacOSX للمسار الخاطئ لبرنامج التجميع. (المشكلة 53769)
- إصلاح نصوص برمجية للإصدارات لاكتشاف Windows Vista الإصدار 64 بت. (المشكلة 54485)
- تم إصلاح خطأ
ntonl/swap32
x86:invalid 'asm': operand number out of range
. (المشكلة 54465، تغيير 57242) - تم إصلاح
ld.gold
لدمج القيم الحرفية للسلسلة. - تم إصلاح
ld.gold
للتعامل مع محاذاة الرموز الكبيرة. - تم تعديل
ld.gold
لتفعيل خيار--sort-section=name
. - تم إصلاح الإصدار 4.4.3/4.6/4.7 من GCC لإيقاف خيار
-export-dynamic
للبرامج المرتبطة بشكل ثابت. لم تعد GCC تضيف قسم.interp
للبرامج المرتبطة بشكل ثابت. - تم إصلاح خطأ التجميع 4.4.3
stlport
في GCC بشأن عدم اتّساقtypedef
من_Unwind_Control_Block
. (المشكلة 54426) - تم إصلاح
awk
نصوص برمجية لمعالجة ملفاتAndroidManifest.xml
التي تم إنشاؤها على Windows والتي قد تحتوي على أحرف\r
لاحقة وتتسبب في حدوث أخطاء في الإصدار. (المشكلة 42548) - تم إصلاح
make-standalone-toolchain.sh
لفحص دليلprebuilts/
لرصد ما إذا كان إصدار المضيف 32 بت أو 64 بت. - تم إصلاح خيار Clang 3.2
-integrated-as
. - تم إصلاح بيانات معالج Clang 3.2 ARM EHABI المكثّفة
pr1
وpr2
. - تمت إضافة خيار Clang
-mllvm -arm-enable-ehabi
لإصلاح خطأ Clang التالي:clang: for the -arm-enable-ehabi option: may only occur zero or one times!
- تم إصلاح فشل الإصدار في حال عدم توفّر عنصر
uses-sdk
في بيان التطبيق. (المشكلة 57015)
- تم إصلاح النص البرمجي لـ
- التغييرات الأخرى:
-
- إصلاحات العناوين
- تم تعديل العناوين لجعل
__set_errno
دالة مضمّنة، لأنّ__set_errno
فيerrno.h
تم إيقافها نهائيًا، ولم يعُدlibc.so
يصدّرها. - تم تعديل
elf.h
ليشملstdint.h
. (المشكلة 55443) - تم إصلاح
sys/un.h
لتضمينها بشكل مستقل عن العناوين الأخرى. (المشكلة 53646) - تم إصلاح جميع مجموعات واجهات برمجة التطبيقات
MotionEvent_getHistorical
بحيث تشملconst AInputEvent* motion_event
. (المشكلة 55873) - تم تعديل
malloc_usable_size
ليستغرقconst void*
. (المشكلة 55725) - تم إصلاح stdint.h ليكون أكثر توافقًا مع C99. (تغيير 46821)
- تم تعديل
wchar.h
لعدم إعادة تعريفWCHAR_MAX
وWCHAR_MIN
- تم إصلاح إعلان
<inttypes.h>
لوحدات الماكروPRI
وSCN
المرتبطة بالمؤشر. (المشكلة 57218) - تم تغيير عنوان
sys/cdefs.h
ليصبح__WCHAR_TYPE__
32 بت لمستويات واجهة برمجة التطبيقات الأقل من 9، ما يعني أنّwchat_t
هو 32 بت لجميع مستويات واجهة برمجة التطبيقات. لاستعادة السلوك السابق، حدِّد المتغيّر المنطقي_WCHAR_IS_8BIT
. (المشكلة 57267)
- تم تعديل العناوين لجعل
- تمت إضافة المزيد من التنسيق في NDK
docs/
وإصلاحات متنوعة في الوثائق. - تمت إضافة الدعم لأسلوب الأرشفة الرفيع عند إنشاء مكتبات ثابتة. (المشكلة 40303)
- تم تعديل النص البرمجي
make-standalone-toolchain.sh
لإتاحة مكتبةstlport
بالإضافة إلىgnustl
، وذلك عند تحديد الخيار--stl=stlport
. لمزيد من المعلومات، يُرجى الاطّلاع على "STANDALONE-TOOLCHAIN.html
". - تم تعديل النص البرمجي
make-standalone-toolchain.sh
بحيث يؤدي الخيار--llvm-version=
إلى إنشاء النصَّين البرمجيَّين$TOOLCHAIN_PREFIX-clang
و$TOOLCHAIN_PREFIX-clang++
بالإضافة إلىclang
وclang++
، وذلك لتجنُّب استخدام تعريفَي clang وclang+ لدى المضيف عن طريق الخطأ. - تمت إضافة علامتَين لإعادة تفعيل عمليتَي تحسين في لغة Clang الرئيسية ولكن تم إيقافهما في
NDK لتحقيق توافق أفضل مع الرمز الذي جمعته GCC:
- تمت إضافة علامة
-fcxx-missing-return-semantics
لإعادة تفعيل دلالات الرجوع المفقودة في Clang 3.2 والإصدارات الأحدث. عادةً، يجب أن تنتهي جميع المسارات بعبارة إرجاع لدالة عرض قيمة. وإذا لم يكن الأمر كذلك، تُدرِج علامة الترابط تعليمات غير محدّدة (أو أداة تتبُّع في وضع تصحيح الأخطاء) في المسار بدون استخدام عبارة الإرجاع. إذا كنت متأكدًا من صحة الرمز البرمجي، استخدِم هذه العلامة للسماح للمحسّن بالاستفادة من السلوك غير المحدَّد. وإذا لم تكن متأكدًا، لا تستخدم هذه العلامة. قد يتلقّى المتصل قيمة عشوائية غير صحيحة، ولكن لن يستغلها المحسن ويصعّب تصحيح الأخطاء في الرمز. - تمت إضافة العلامة
-fglobal-ctor-const-promotion
لإعادة تفعيل خيار الترويج للمتغيرات العامة باستخدام دالة إنشاء ثابتة لكي تكون ثابتة. باستخدام هذه العلامة، يحاول اجتياز تحسين المتغيّرات العمومية في LLVM تقييم المتغيرات العمومية باستخدام التركيبات الثابتة والترويج لها في ثوابت عمومية. مع أنّ هذا التحسين صحيح، قد يتسبب في بعض عدم التوافق مع الرمز الذي جمعته GCC. على سبيل المثال، قد ينفّذ الرمزconst_cast
لتحويل الثابت إلى قابل للتغيير وتعديله. في GCC، يكون المتغير قيد القراءة ويتم تشغيل الرمز عن طريق الصدفة. في Clang، يتوفّر المتغير Cont في ذاكرة للقراءة فقط وقد يتسبّب في تعطُّل تطبيقك.
- تمت إضافة علامة
- تمت إضافة
-mldc1-sdc1
إلى التجميعات البرمجية من MIPS GCC وClang. بشكل تلقائي، تعمل برامج التجميع على محاذاة الكائنات ذات الـ 8 بايت بشكل صحيح وتصدر تعليماتldc1
وsdc1
لنقلها. إذا كان تطبيقك يستخدم مُخصصًا مخصّصًا لا يتوافق دائمًا مع حدود 8 بايت لكائن جديد بالطريقة نفسها التي يستخدم بها التخصيص التلقائي، قد يتعطل تطبيقك بسبب عمليتَيldc1
وsdc1
على ذاكرة غير متوافقة. في هذه الحالة، استخدِم العلامة-mno-ldc1-sdc1
لحل المشكلة. - تم خفض درجة خطورة الحدث من تحذير إلى معلومات إذا كانت قيمة
APP_PLATFORM_LEVEL
أكبر منAPP_MIN_PLATFORM_LEVEL
. قد تكون قيمةAPP_PLATFORM_LEVEL
أقل منAPP_PLATFORM
فيjni/Application.mk
لأنّ NDK لا يتضمّن عناوين لجميع المستويات. وفي هذه الحالة، ينتقل المستوى الفعلي إلى أسفل. يتم تحديدAPP_MIN_PLATFORM_LEVEL
من خلالandroid:minSdkVersion
في ملف البيان للتطبيق الخاص بك. (المشكلة 39752) - تمت إضافة الطريقتَين
android_getCpuIdArm()
وandroid_setCpuArm()
إلىcpu-features.c
. تتيح هذه الإضافة استرداد معلومات ARM CPUID بسهولة أكبر. (المشكلة 53689) - تم تعديل
ndk-build
لاستخدام الإصدارas/ld
من GCC 4.7 لتجميع لغة Clang.ملاحظة: في 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
للسماح بتجاوز المسار لـlibraries/gdbserver
من المسار التلقائي$PROJECT/libs
. لمزيد من المعلومات، يُرجى الاطّلاع على "OVERVIEW.html
". - تم تغيير الإعدادات التلقائية للنص البرمجي ndk-build إلى تجميع الرمز مع حماية سلسلة التنسيق
-Wformat -Werror=format-security
. ويمكنك ضبطLOCAL_DISABLE_FORMAT_STRING_CHECKS=true
لإيقافه. لمزيد من المعلومات، يُرجى الاطّلاع علىANDROID-MK.html
. - تمت إضافة إمكانية الطباعة الجميلة في STL في
ndk-gdb-py
. ولمزيد من المعلومات، يمكنك الاطّلاع علىNDK-GDB.html
. - تمت إضافة الاختبارات استنادًا إلى إطارات عمل googletest.
- تمت إضافة إشعار إلى النص البرمجي لإنشاء سلسلة الأدوات يحذرك إذا لم تكن واجهة الأوامر الحالية
bash
.
- إصلاحات العناوين
Android NDK r8e (آذار (مارس) 2013)
- تغييرات مهمة:
-
- تمت إضافة مجموعة أدوات المضيف 64 بت (لاحقة اسم الحزمة
*-x86_64.*
). لمزيد من المعلومات، راجعCHANGES.HTML
وNDK-BUILD.html
. - تمت إضافة المحول البرمجي Clang 3.2. ولا يزال الإصدار 4.6 من GCC هو الإعداد الافتراضي. للحصول على معلومات حول استخدام المحول البرمجي Clang، يُرجى الاطّلاع على
CHANGES.HTML
. - تمت إضافة أداة تحليل الرموز الثابتة لمضيفي Linux/MacOSX. للحصول على معلومات عن استخدام أداة التحليل، اطّلِع على "
CHANGES.HTML
". - تمت إضافة MCLinker إلى مضيفي Linux/MacOSX كميزة تجريبية. ويكون رابط
ld.gold
هو السمة التلقائية حيثما أمكن، لذا يجب تفعيله صراحةً. لمزيد من المعلومات، يُرجى الاطّلاع علىCHANGES.HTML
. - تم تعديل ndk-build لاستخدام الترتيب الطوبولوجي لتبعيات الوحدات، ما يعني أنّ الإصدار يرتب تلقائيًا ترتيب المكتبات المحدّدة في
LOCAL_STATIC_LIBRARIES
وLOCAL_WHOLE_STATIC_LIBRARIES
وLOCAL_SHARED_LIBRARIES
. لمزيد من المعلومات، يُرجى الاطّلاع على "CHANGES.HTML
". (المشكلة 39378)
- تمت إضافة مجموعة أدوات المضيف 64 بت (لاحقة اسم الحزمة
- إصلاحات مهمة للأخطاء:
-
- تم إصلاح نص برمجي لإنشاء جميع سلاسل الأدوات في
-O2
. تم إنشاء سلاسل الأدوات في الإصدارات السابقة بشكل غير صحيح بدون تحسين. - تم إصلاح نص برمجي لإنشاء Clang/llvm لنظام التشغيل MacOSX 64 بت بدون شرط.
- تم إصلاح خطأ برنامج التجميع الداخلي في GCC 4.6/4.7:
gen_thumb_movhi_clobber at config/arm/arm.md:5832
. (المشكلة 52732) - تم إصلاح مشكلة الإصدار المتمثلة في إخفاق GCC/ARM 4.6/4.7 في ربط الرمز باستخدام الدوال الذرية المضمنة 64 بت. (المشكلة 41297)
- تم إصلاح أخطاء عدم تطابق استخدام أداة ربط DIV 4.7 في GCC. (مشكلة في البرامج المصدر)
- تم إصلاح الخطأ
build_data_member_initialization, at cp/semantics.c:5790
في برنامج التجميع الداخلي في GCC 4.7. - تم إصلاح الخطأ
redirect_eh_edge_1, at tree-eh.c:2214
في برنامج التجميع الداخلي في GCC 4.7. (المشكلة 52909) - تم إصلاح خطأ segError 4.7 في GCC. (مشكلة في مجلس التعاون الخليجي)
- تم إصلاح دقة الساعة
<chrono>
وتفعيلsteady_clock
. (المشكلة 39680) - تم إصلاح سلسلة الأدوات لتفعيل
_GLIBCXX_HAS_GTHREADS
في GCC 4.7 libstdc++. (المشكلة 41770، المشكلة 41859) - تم إصلاح مشكلة في رمز X86 MXX/SSE الذي يتعذّر ربطه بسبب عدم توفّر
posix_memalign
. (تغيير 51872) - تم إصلاح خطأ التقسيم GCC4.7/X86 في
i386.c
، الدالةdistance_non_agu_define_in_bb()
. (تغيير 50383) - تم إصلاح GCC4.7/X86 لاستعادة سلوك
cmov
السابق. (مشكلة في مجلس التعاون الخليجي) - تم إصلاح قيمة عرض NULL التي تبلغ
setlocale()
في libstdc++/GCC4.7. (المشكلة 46718) - تم إصلاح المرجع غير المحدّد لوقت تشغيل
ld.gold
الخاص بـ__exidx_start
و__exidx_start_end
. (تغيير 52134) - تم إصلاح خطأ المحول البرمجي الداخلي Clang 3.1 عند استخدام مكتبة Eigen. (المشكلة 41246)
- تم إصلاح خطأ المحول البرمجي الداخلي Clang 3.1 بما في ذلك
<chrono>
في وضع C++11. (المشكلة 39600) - تم إصلاح خطأ المحول البرمجي الداخلي Clang 3.1 عند إنشاء رمز كائن لاستدعاء طريقة إلى
rvalue
موحّد تم إعداده. (المشكلة 41387) - تم إصلاح محاذاة تكديس Clang 3.1/X86. (تغيير 52154)
- تم إصلاح المشكلة في GNU Debugger (GDB) SIGILL عند تصحيح الأخطاء على Android 4.1.2. (المشكلة 40941)
- تم إصلاح المشكلة التي كانت تمنع GDB من ضبط نقاط توقف
source:line
عندما تحتوي الرموز على مسارات طويلة وغير مباشرة للملفات. (المشكلة 42448) - تم إصلاح
read_program_header
GDB للملفات القابلة للتنفيذ MIPS PIE. (تغيير 49592) - تم إصلاح خطأ تصنيف
STLport
فيuncaught_exception()
. (تغيير 50236) - تم إصلاح خطأ ناقل
STLport
في معالجة الاستثناءات بسبب الدخول غير المنظَّم إلىDW_EH_PE_udata2
وDW_EH_PE_udata4
وDW_EH_PE_udata8
. - تم إصلاح مشكلة التكرار اللا نهائي لـ Gabi++ في عامل التشغيل
nothrow new[]
. (المشكلة 52833) - تم إصلاح إزاحة Gabi++ الخاطئة لمؤشر معالج الاستثناء. (التغيير 53446)
- تمت إزالة دالة Gabi++ الإضافية المجانية على كائن الاستثناء (تغيير 53447)
- تم إصلاح نص برمجي لإنشاء جميع سلاسل الأدوات في
- إصلاحات الأخطاء الأخرى:
-
- عناوين NDK الثابتة:
- تمت إزالة التعريفات المكرّرة للسمات
size_t
وssize_t
وptrdiff_t
. - تم إصلاح عنوان MIPS وARM
fenv.h
. - تم إصلاح
stddef.h
لعدم إعادة تعريفoffsetof
لأنه موجود في سلسلة الأدوات. - تم إصلاح
elf.h
لكي يحتوي علىElf32_auxv_t
وElf64_auxv_t
. (المشكلة 38441) - تم إصلاح
#ifdef
تعريفات C++ في ملف العنوانOpenSLES_AndroidConfiguration.h
. (المشكلة 53163)
- تمت إزالة التعريفات المكرّرة للسمات
- تم إصلاح
STLport
للإلغاء بعد ظهور خطأ نفاد الذاكرة بدلاً من الخروج تلقائيًا. - نظام ثابت وعناوين Gabi++ قابلة للتجميع باستخدام المستوى 8 لواجهة برمجة التطبيقات أو المستوى الأدنى.
- تم إصلاح
cpufeatures
لعدم تحليل/proc/self/auxv
. (المشكلة 43055) - تم إصلاح أخطاء
ld.gold
بحيث لا تعتمد على المضيف libstdc++ وعلى الأنظمة الأساسية لنظام التشغيل Windows، لعدم الاعتماد على مكتبةlibgcc_sjlj_1.dll
. - تم إصلاح Clang 3.1 الذي يصدر قائمة تسجيل غير متسقة في
.vsave
ويتعذَّر التجميع. (تغيير 49930) - تم إصلاح Clang 3.1 لتتمكّن من تجميع libgabi++ واجتياز اختبارات
test-stlport
لأهداف إصدار MIPS. (تغيير 51961) - تم إصلاح Clang 3.1 لتفعيل الاستثناء تلقائيًا فقط لـ C++ وليس لـ C.
- تمت معالجة عدة مشكلات في Clang 3.1 لاجتياز معظم اختبارات استثناء GNU.
- تم إصلاح النصوص البرمجية
clang
وclang++
في برنامج التحويل البرمجي NDK مستقل لاكتشاف-cc1
وعدم تحديد-target
عند العثور عليه. - تم إصلاح
ndk-build
لمراعاةNDK_APP_OUT
التي تم ضبطها فيApplication.mk
. - تم إصلاح أخطاء
libc.so
وlib.a
التي لم تتضمّن الدالتَينsigsetjmp
وsiglongjmp
اللذَين سبق أن تم تضمينهما فيsetjmp.h
. (المشكلة 19851) - إصدار تصحيح من GCC 4.4.3/4.6/4.7 libstdc++ للعمل مع Clang في C++ 11. (مشكلة في علامة التبويب)
- تم تمرير مسار cygwin الثابت في الوسيطة إلى
HOST_AWK
. - تم إصلاح تحذير النص البرمجي لـ
ndk-build
في النوافذ عند التشغيل من دليل JNI للمشروع. (المشكلة 40192) - تم إصلاح مشكلة لا يتم فيها إنشاء النص البرمجي
ndk-build
إذا كان ملف makefile يتضمن مسافة بيضاء لاحقة في تعريفLOCAL_PATH
. (المشكلة 42841)
- عناوين NDK الثابتة:
- التغييرات الأخرى:
-
- تم تفعيل دعم سلاسل المحادثات في سلسلة أدوات GCC/MIPS.
- تم تعديل المساعِدَين
__cxa_begin_cleanup
و__cxa_type_match
المساعِدَين للتعامل مع استثناء GCC للحصول على مستوى الظهور التلقائي من مستوى الظهور المخفي السابق في GNU libstdc++. لمزيد من المعلومات، يُرجى الاطّلاع علىCHANGES.HTML
. - تم تعديل النصوص البرمجية للإصدارات بحيث يتم الآن إنشاء مكتبات Gabi++ وSTLport الثابتة مع مستوى رؤية مخفي باستثناء أدوات المساعدة في التعامل مع الاستثناءات.
- تم تعديل الإصدار بحيث يتم إنشاء
STLport
للاستخدام مع معالج ARM في وضع الإبهام. - تمت إتاحة
std::set_new_handler
في Gabi++ . (المشكلة 52805) - تم تفعيل استدعاء النظام
FUTEX
في GNU libstdc++. - تم تعديل
ndk-build
بحيث تتوقف عن نسخ المكتبة الثابتة التي تم إنشاؤها مسبقًا إلى دليلobj/local/<abi>/
للمشروع. (المشكلة 40302) - تمت إزالة "
__ARM_ARCH_5*__
" من النص البرمجي ARMtoolchains/*/setup.mk
. (المشكلة 21132) - تم إنشاء مكتبات GNU libstdc++ إضافية بشكل مضمّن مع ARM.
- تم تفعيل تعليمات النقطة العائمة بتنسيق MIPS
madd/msub/nmadd/nmsub/recip/rsqrt
باستخدام FPU بتنسيق 32 بت. - تم تفعيل أداة تحسين حلقة الغرافيت في الإصدارين 4.6 و4.7 من GCC للسماح بمزيد من التحسينات:
-fgraphite
و-fgraphite-identity
و-floop-block
و-floop-flatten
و-floop-interchange
و-floop-strip-mine
و-floop-parallelize-all
و-ftree-loop-linear
. (info) - تم تفعيل
polly
لتطبيق Clang 3.1 على الأجهزة التي تعمل بنظام التشغيل Linux ومضيفات الإصدار 32 بت من نظام التشغيل Max OS X، والتي تعمل على تحليل إمكانية الوصول إلى الذاكرة وتحسينها. (info) - تم تفعيل
-flto
في GCC 4.7 و4.6 وClang 3.2 وClang 3.1 على نظام التشغيل linux (Clang LTO عبر LLVMgold.so). أهداف المحول البرمجي لـ MIPS غير متاحة لأنld.gold
غير متوفر. - تم تفعيل
--plugin
و--plugin-opt
لـld.gold
في GCC 4.6/4.7. - تم تفعيل
--text-reorder
علىld.gold
في GCC 4.7. - تم ضبط GNU libstdc++ مع
_GLIBCXX_USE_C99_MATH
التي تلغي تحديد النص البرمجيisinf
في عنوان Binic. ولمزيد من المعلومات، يمكنك الاطّلاع على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
. - النصوص البرمجية لإنشاء سلسلة الأدوات المحسّنة:
- تم إصلاح شرط سباق في
build-gcc.sh
لنوع الإصدارmingw
، ما كان يمنع قدرًا كبيرًا من المعالجة الموازية للإصدار. - تم تعديل الترميزَين
build-gabi++.sh
وbuild-stlport.sh
ليصبح بإمكانهما الآن التشغيل من حزمة NDK. (المشكلة 52835) - تم إصلاح
run-tests.sh
في مجموعة برامج الخدماتMSys
. - تم تحسين سلسلة أدوات المضيف 64 بت ودعم إصدار Canada Cross.
- تم تعديل نص برمجي واحد (
build-mingw64-toolchain.sh
) إلى إصدار أحدث. - تمت إضافة خيار إنشاء
libgnustl_static.a
وstlport_static.a
بدون إذن الوصول المخفي.
- تم إصلاح شرط سباق في
Android NDK r8d (كانون الأول/ديسمبر 2012)
- تغييرات مهمة:
-
- تمت إضافة المحول البرمجي لـ GNU Compiler Group (GCC) 4.7 إلى NDK. ولا يزال برنامج تجميع GCC 4.6 هو البرنامج التلقائي، لذا يجب تفعيل الإصدار الجديد بشكل صريح على النحو التالي:
- بالنسبة إلى
ndk-build
، يمكنك تصدير المتغيّرNDK_TOOLCHAIN_VERSION=4.7
أو إضافته إلىApplication.mk
. - بالنسبة إلى الإصدارات المستقلة، يمكنك إضافة الخيار
--toolchain=
إلىmake-standalone-toolchain.sh
، على سبيل المثال:--toolchain=arm-linux-androideabi-4.7
ملاحظة: هذه الميزة تجريبية. يُرجى تجربة هذه الميزة والإبلاغ عن أيّ مشاكل فيها.
- بالنسبة إلى
- تمت إضافة دعم استثناء
stlport
عبر gabi++. تجدر الإشارة إلى أنّ gabi++ الجديد يعتمد علىdlopen
والرمز ذي الصلة، أي ما يلي:- لم يعُد بإمكانك إنشاء ملف ثابت قابل للتنفيذ باستخدام الخيار
-static
أو تضمينlibstlport_static.a
باستخدامAPP_STL := stlport_static
. (لا يزال بإمكانك استخدام الخيار-static
مع سلسلة أدوات مستقلة). إنّ إنشاء ملف ديناميكي قابل للتنفيذ باستخدامinclude $(BUILD_EXECUTABLE)
سيواصل العمل لأنّ المحوِّل البرمجي يضيف الخيار-ldl
تلقائيًا. - إذا كان مشروعك يرتبط باستخدام
-nostdlib
و{-Wl,--no-unعرّف}، عليك تضمين الخيار-ldl
يدويًا.
CPLUSPLUS-SUPPORT.html
.ملاحظة: هذه الميزة تجريبية وتعمل بشكل أفضل مع برامج التجميع 4.6/4.7 من GCC مقارنةً ببرامج GCC 4.4.3 أو Clang 3.1. يُرجى تجربة هذه الميزة والإبلاغ عن أيّ مشاكل فيها.
- لم يعُد بإمكانك إنشاء ملف ثابت قابل للتنفيذ باستخدام الخيار
- تمت إضافة خيار
-mstack-protector-guard=
لنظام التشغيل x86 للاختيار بين المسار التلقائي العالمي المتوافق مع مكتبة Android C القديمة (bionic) ومسار tls جديد (%gs:20) بالنسبة إلى-fstack-protector
و-fstack-protector-all
و-fstack-protector-strong
باستخدام إصدار GCC 4.6 وبرامج التجميع الأعلى.ملاحظة: لا يتيح إعداد
-mstack-protector-guard
نفسه تفعيل أي خيارات لـ-fstack-protector*
. - تمت إضافة دالة
android_setCpu()
إلىsources/android/cpufeatures/cpu-features.c
للاستخدام عندما لا يكون الرصد التلقائي عبر/proc
ممكنًا في Android 4.1 والإصدارات الأحدث. (مشكلة Chromium 164154)
- تمت إضافة المحول البرمجي لـ GNU Compiler Group (GCC) 4.7 إلى NDK. ولا يزال برنامج تجميع GCC 4.6 هو البرنامج التلقائي، لذا يجب تفعيل الإصدار الجديد بشكل صريح على النحو التالي:
- إصلاحات مهمة للأخطاء:
-
- تم إصلاح عملية إعادة إنشاء ملفات العناصر غير الضرورية عند استخدام النص البرمجي
ndk-build
. (المشكلة 39810) - تم إصلاح إخفاق الرابط في إصدار NDK 8c لنظام التشغيل Mac OS X 10.6.x الذي نتج عنه الخطأ التالي:
dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
- تمت إزالة خيارات
-x c++
من النص البرمجي للإصدار المستقل Clang++. (المشكلة 39089) - تم حل المشاكل باستخدام خيار
NDK_TOOLCHAIN_VERSION=clang3.1
في Cygwin. (المشكلة 39585) - تم إصلاح النص البرمجي
make-standalone-toolchain.sh
للسماح بإنشاء سلسلة أدوات مستقلة باستخدام بيئات Cygwin أو MinGW. يمكن استخدام سلسلة الأدوات الناتجة في بيئات Cygwin أو MingGW أو CMD.exe. (المشكلة 39915، المشكلة 39585) - تمت إضافة خيار
SL_IID_ANDROIDBUFFERQUEUESOURCE
غير المتوفّر في إصدارات Android-14 الخاصة بكل من ARM وX86. (المشكلة 40625) - تم إصلاح رصد وحدة المعالجة المركزية x86 لميزة
ANDROID_CPU_X86_FEATURE_MOVBE
. (المشكلة 39317) - تم إصلاح مشكلة كانت تمنع "مكتبة النماذج العادية" (STL) من استخدام مصادر C++
التي لا تتضمّن امتداد الملف
.cpp
. - تم إصلاح خطأ برنامج التحويل البرمجي الداخلي في GCC 4.6 ARM في rename1.c:1061. (المشكلة 20862)
- تم إصلاح خطأ برنامج التجميع الداخلي في GCC 4.4.3 ARM على emit-rtl.c:1954. (المشكلة 22336)
- تم إصلاح خطأ برنامج التجميع الداخلي في GCC 4.4.3 ARM في postreload.c:396. (المشكلة 22345)
- تم إصلاح مشكلة في الإصدار 4.6/4.7 من GCC لتخطي دوال lambda. (المشكلة 35933)
- تم إصلاح عملية إعادة إنشاء ملفات العناصر غير الضرورية عند استخدام النص البرمجي
- إصلاحات الأخطاء الأخرى:
-
- إصلاحات ملف العنوان NDK:
- تم إصلاح الترميزَين
__WINT_TYPE__
وwint_t
ليكونا من النوع نفسه. - تم تصحيح الخطأ الإملائي في
android/bitmap.h
. (المشكلة 15134) - تم تصحيح الخطأ الإملائي في
errno.h
. - تمت إضافة عملية التحقّق من وجود
__STDC_VERSION__
فيsys/cdefs.h
. (المشكلة 14627) - تمت إعادة تنظيم العناوين في
byteswap.h
وdirent.h
. - تم إصلاح أخطاء
limits.h
لتضمينpage.h
التي توفّر إعداداتPAGE_SIZE
. (المشكلة 39983) - تم إصلاح نوع الإرجاع
glGetAttribLocation()
وglGetUniformLocation()
منint
إلىGLint
. - تم إصلاح ثابت
__BYTE_ORDER
لإصدارات x86. (المشكلة 39824)
- تم إصلاح الترميزَين
- تم إصلاح النص البرمجي
ndk-build
لعدم استبدال-Os
بـ-O2
لإصدارات ARM. - تم إصلاح النصوص البرمجية للإصدار للسماح باستبدال إعدادات
HOST_AWK
وHOST_SED
وHOST_MAKE
. - تم إصلاح المشكلة في
ld.gold
علىfsck_msdos
عند إنشاء كائنات ربط تم إنشاؤها بواسطة برنامج التجميع من Intel C/C++ (ICC). - تم إصلاح دعم ARM EHABI في Clang للامتثال للمواصفات.
- تم إصلاح أداة تصحيح أخطاء GNU (GNU) لتقليل الوقت المستغرَق في الانتقال إلى خريطة رابط الهدف
أثناء فعاليات
solib
. (المشكلة 38402) - تم إصلاح ملف
libgcc.a
المفقود عند ربط المكتبات المشتركة.
- إصلاحات ملف العنوان NDK:
- التغييرات الأخرى:
-
- دوال ذرية مدمجة 64 بت تم تحميلها بأثر رجعي من أجل ARM إلى GCC 4.6.
- تمت إضافة مستندات حول وقت استجابة إخراج الصوت، بالإضافة إلى مستندات وحلول أخرى.
- يتم إصلاح إصدارات تصحيح الأخطاء باستخدام لغة Clang بحيث ترفع الدوال غير الفارغة الآن إشارة
SIGILL
للمسارات التي لا تتضمّن عبارة إرجاع. - تم تعديل السمة
make-standalone-toolchain.sh
لتتوافق مع اللاحقة-clang3.1
التي تعادل إضافة--llvm-version=3.1
إلى سلسلة أدوات GCC 4.6. - تم تحديث عنوان URL لتقرير خطأ GCC وClang إلى: https://source.android.com/source/report-bug s.html
- تمت إضافة دعم ARM ELF إلى
llvm-objdump
. - تم إيقاف تحذير معالجة إدخال c كـ c++ لإصدارات Clang.
- تم تحديث الإصدار بحيث يتم إنشاء إصدار 32 بت فقط من
libiberty.a
ووضعه فيlib32/
.
Android NDK r8c (تشرين الثاني/نوفمبر 2012)
- تغييرات مهمة:
-
- تمت إضافة المحول البرمجي Clang 3.1 إلى NDK. لا يزال الإصدار 4.6 من GNU CompilerCollection (GCC) هو
الإصدار التلقائي، لذا يجب تفعيل خيار برنامج تجميع 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
.
ملاحظة: هذه الميزة تجريبية. يُرجى تجربة هذه الميزة والإبلاغ عن أيّ مشاكل فيها.
- بالنسبة إلى
- تمت إضافة رابط "المستوى الذهبي"
ld.gold
لسلسلة أدوات Windows. ويكون الرابط الذهبي أيضًا هو الرمز التلقائي لـ ARM وX86 على جميع المضيفين. يمكنك تجاهله لاستخدام رابطld.bfd
من خلال إضافةLOCAL_LDFLAGS += -fuse-ld=bfd
إلىAndroid.mk
، أو من خلال تمرير-fuse-ld=bfd
إلى سطر الأوامر g++/clang++ المسؤول عن عملية الربط. - تمت إضافة عمليات تحقّق من المسافات في مسار NDK إلى النصَّين البرمجيَّين
ndk-build[.cmd]
وndk-gdb
لمنع حدوث أخطاء في الإصدار يصعب تشخيصها. - تم إجراء التغييرات التالية على التعامل مع مستوى واجهة برمجة التطبيقات:
- تم تعديل منطق الإصدار لكي تصبح المشاريع التي تحدّد
android-10
إلىandroid-13
فيAPP_PLATFORM
أوproject.properties
أوdefault.properties
رابطًا مقابلandroid-9
بدلاً منandroid-14
. - تم تعديل الإصدار بحيث يتم تجميع الملفات التنفيذية التي تستخدم الإصدار android-16 (Jelly Bean) أو الإصدارات الأحدث
باستخدام خيار
-fPIE
للملفات التنفيذية المستقلة عن الموضع (PIE). يتيح لك خيارAPP_PIE
الجديد التحكّم في هذا السلوك. لمزيد من التفاصيل، انتقلي إلىAPPLICATION-MK.html
.ملاحظة: لا تزال جميع مستويات واجهة برمجة التطبيقات الأعلى من 14 مرتبطة بـ
platforms/android-14
ولم تتم إضافة أيplatforms/android-N
جديد. - تم تعديل
ndk-build
لإرسال تحذيرات إذا كان مستوى واجهة برمجة التطبيقات المعدَّل أكبر منandroid:minSdkVersion
فيAndroidManifest.xml
الخاص بالمشروع.
- تم تعديل منطق الإصدار لكي تصبح المشاريع التي تحدّد
- تم تعديل مكتبة مساعد "
cpu-features
" لتتضمّن المزيد من الميزات الخاصة بمعالج ARM. لمزيد من التفاصيل، انتقلي إلىsources/android/cpufeatures/cpu-features.h
. - عدّلت البيانات المزدوجة الطويلة على النظام الأساسي X86 إلى 8 بايت. نوع البيانات هذا الآن بحجم مزدوج، ولكنه لا يزال يتم التعامل معه كنوع مختلف.
- إصدار محدّث من
APP_ABI=armeabi-v7a
:- تم تعديل نوع الإصدار هذا لتمرير المَعلمة
-march=armv7-a
إلى أداة الربط. يضمن هذا التغيير ربط المكتبات الخاصة بالإصدار 7 وcrt*.o
بشكل صحيح. - تمت إضافة
-mfpu=vfpv3-d16
إلىndk-build
بدلاً من خيار-mfpu=vfp
الذي كان مستخدَمًا في الإصدارات السابقة.
- تم تعديل نوع الإصدار هذا لتمرير المَعلمة
- تمت إضافة المحول البرمجي Clang 3.1 إلى NDK. لا يزال الإصدار 4.6 من GNU CompilerCollection (GCC) هو
الإصدار التلقائي، لذا يجب تفعيل خيار برنامج تجميع Clang بشكل صريح على النحو التالي:
- إصلاحات مهمة للأخطاء:
-
- تم إصلاح مشكلة كانت تتسبب في تشغيل
make-standalone-toolchain.sh
بامتيازات الجذر في تعذُّر وصول بعض المستخدمين إلى سلسلة الأدوات المستقلة. (المشكلة 35279)- تم ضبط جميع الملفات والملفات القابلة للتنفيذ في حزمة إصدار NDK بحيث تتضمن أذونات القراءة والتنفيذ للجميع.
- يتم الآن الاحتفاظ بملكية/مجموعة
libstdc++.a
عند نسخها.
- تمت إزالة
\r
المكرّرة منecho.exe
التي تم إنشاؤها مسبقًا في Windows. تسبّب استخدام\r
المكرّر في تعذُّر تنفيذgdb.setup
في برنامج تصحيح أخطاء GNU (GDB)، لأنّه أصبح جزءًا من المسار بشكل غير صحيح. (المشكلة 36054) - تم إصلاح إصدارات Windows الموازية التي تعذّر تنفيذها أحيانًا بسبب مشاكل في التوقيت في تنفيذ
host-mkdir
. (المشكلة 25875) - تم إصلاح مشكلة GNU 4.4.3 GNU
libstdc++
بحيث لا تدمج أسماءtypeinfo
تلقائيًا. ولمزيد من التفاصيل، يُرجى الاطّلاع علىtoolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo
. (المشكلة 22165) - تم إصلاح مشكلة في سياق
null
في الإصدار 4.6 منcp/mangle.c::write_unscoped_name
على GCC، حيث قد يتعطّل GCC عندما يكون السياقnull
مع الإشارة إليه فيTREE_CODE
. - تم إصلاح أعطال GCC 4.4.3 في تعريفات الأنواع الخاصة بـ ARM NEON للأعداد العشرية. (المشكلة 34613)
- تم إصلاح عملية تنفيذ
_IteWrapper::operator*()
الداخلية لميزةSTLport
، حيث تم عرض موقع قديم لحزمة بيانات يتضمن القيمة التي تمت الإشارة إليها، ما أدى إلى حدوث أعطال في وقت التشغيل. (المشكلة 38630) - الإصلاحات الخاصة بمعالج ARM:
- تم إصلاح ARM GCC 4.4.3/4.6
g++
لعدم التحذير من تغيير تداخل <va_list> في GCC 4.4. لم يعُد الحل البديل باستخدام مفتاح-Wno-psabi
لتجنُّب هذا التحذير مطلوبًا. - تم إصلاح مشكلة كانت تحدث عندما يستخدم مشروع يتضمن لاحقات
.arm
أو.neon
فيLOCAL_SRC_FILES
APP_STL
أيضًا. عند استخدامAPP_STL
، يبحث النص البرمجيndk-build
عن ملفات C++ فيLOCAL_SRC_FILES
قبل إضافة مسارات STLheader/lib
إلى التجميع. تم تعديلndk-build
لفلترة اللاحقتَين.arm
و.neon
قبل البحث، وإلّا فلن يتم تجميع العناصر فيLOCAL_SRC_FILES
مثلmyfile.cpp.arm.neon
كرمز C++. - تم إصلاح الخطأ
binutils-2.21/ld.bfd
ليتمكّن من ربط الكائن من برامج binutils القديمة بدونtag_FP_arch
، ما كان يؤدي إلى ظهور رسائل خطأ تعذُّر التأكيد في GNU Binutils. (المشكلة 35209) - تمت إزالة التحذير سمة عنصر EABI غير معروف 44 عند ربط
binutils-2.19/ld
بكائن تم إنشاؤه مسبقًا بواسطةbinutils-2.21
إصدار أحدث. - تم إصلاح مشكلة في مجموعة GNU
stdc++
مع كل من-mthumb
و-march=armv7-a
من خلال تعديلmake-standalone-toolchain.sh
لتعبئةheaders/libs
في الدليل الفرعيarmv7-a/thumb
. (المشكلة 35616) - تم إصلاح خطأ إعادة تحديد موقع R_ARM_THM_CALL غير القابل للحل. (المشكلة 35342)
- تم إصلاح الخطأ الداخلي في برنامج التحويل البرمجي في
reload1.c:3633
، والذي نتج عن الواجهة الخلفية ARM التي تتوقع نوع معامل غير صحيح عند توسيع نطاق تسجيل الدخول منchar
. (GCC ISSUE 50099) - تم إصلاح الخطأ الداخلي في برنامج التجميع مع مقدار التحول السالب. (مشكلة في مجلس التعاون الخليجي)
- تم إصلاح ARM GCC 4.4.3/4.6
- تم إصلاح خطأ
-fstack-protector
لـ X86، وهو أيضًا الإعداد التلقائي لهدف واجهة التطبيق الثنائية (ABI)ndk-build
x86. - الإصلاحات الخاصة ببروتوكول MIPS:
- تم إصلاح دقة
STLport
من خلال ضبط_STLP_LITTLE_ENDIAN
على 1 عند تجميع MIPSlibstlport_*
. - تم إصلاح مشكلة
__builtin_unreachable
في GCC عند تجميع LLVM. (مشكلة 54369 GCC) - إصلاح احتياطي لعملية التحويل البرمجي في
cc1
التي تستهلك وحدة معالجة مركزية بنسبة 100%. (مشكلة 50380 من GCC)
- تم إصلاح دقة
- الإصلاحات الخاصة ببرنامج تصحيح الأخطاء GNU:
- إيقاف دعم Python في gdb-7.x في الإصدار، وإلا قد تلتقط وظيفة الإعداد gdb-7.x أيًا كان إصدار Python المتاح على المضيف وتنشئ
gdb
باستخدام تبعية ثابتة على إصدار معيّن من Python. (المشكلة 36120) - تم إصلاح
ndk-gdb
عندما يحتويAPP_ABI
علىall
ولا يتطابق مع أي من البنى المعروفة. (المشكلة 35392) - تم إصلاح دعم اسم مسار Windows، من خلال الاحتفاظ بالحرف
:
إذا بدا أنه يمكن أن يكون جزءًا من مسار Windows يبدأ بحرف محرك أقراص. (إصدار GDB 12843) - تم إصلاح إضافة دعم نقطة إيقاف الأجهزة لـ ARM في
gdbserver
. (مشكلة في GDB) - تمت إضافة إصلاح لقراءة
solibs
الحالي فقط عندما يكون الرابط متسقًا. يؤدي هذا التغيير إلى تسريع عملية معالجة أحداثsolib
. (المشكلة 37677) - تمت إضافة إصلاح لإجراء محاولات متكرّرة للعثور على
solib
نقطة إيقاف. يعيد GDB الآن محاولة إجراءenable_break()
أثناء كل مكالمة إلىsvr4_current_sos()
إلى أن تتم العملية بنجاح. (تغيير 43563) - تم إصلاح المشكلة المتمثلة في عدم توقّف
gdb
عند نقاط التوقف في مكتباتdlopen-ed
. (المشكلة 34856) - تم إصلاح
SIGILL
في الرابط الديناميكي عند استدعاءdlopen()
، على النظام الذي تتم إزالة/system/bin/linker
من الرموز فيه ويتم تنفيذrtld_db_dlactivity()
في شكلThumb
، بسبب عدم الاحتفاظ بـLSB
للدالةsym_addr
. (المشكلة 37147)
- إيقاف دعم Python في gdb-7.x في الإصدار، وإلا قد تلتقط وظيفة الإعداد gdb-7.x أيًا كان إصدار Python المتاح على المضيف وتنشئ
- تم إصلاح مشكلة كانت تتسبب في تشغيل
- إصلاحات الأخطاء الأخرى:
-
- عناوين NDK الثابتة:
- تم إصلاح رمز
arch-mips/include/asm/*
الذي تمت إزالته بشكل غير صحيح من النواة الأصلية. (تغيير 43335) - تم استبدال بيانات عضو البنية
__unused
بـ__linux_unused
فيlinux/sysctl.h
وlinux/icmp.h
لتجنّب التعارض مع#define __unused
فيsys/cdefs.h
. - تم إصلاح
fenv.h
لدوال C المضمّنة مع__BEGIN_DECLS
و__END_DECLS
. - تمت إزالة الدوال غير المنفذة في
malloc.h
. - تم إصلاح تعريف
stdint.h
للترميزuint64_t
لبرامج التجميع المتوافقة مع معيار ANSI. (المشكلة 1952) - تم إصلاح وحدات ماكرو المعالجات التمهيدية في
<arch>/include/machine/*
. - تم استبدال
link.h
لنظام MIPS بإصدار جديد متوافق مع جميع الأنظمة الأساسية. - تمّت إزالة الفلتر
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
. لا يتم تجميع إعدادات__Named_exception
واستخدامها إلا عندما يتم السماح لـSTLport
باستخدام الاستثناءات. - تم إصلاح إنشاء حزم NDK على نظام التشغيل Linux فقط بدون إنشاء تعليمة برمجية لنظام التشغيل Windows. استخدِم الإعدادات التالية لتنفيذ هذا النوع من الإصدارات:
./build/tools/make-release.sh --force --systems=linux-x86
. - تم إصلاح
libc.so
بحيث لا يتم تصديرatexit()
و__do_handler
. يتم تصدير هذه الرموز لإصدارات ARM من خلال إصدار النظام من مكتبة C لإتاحة المكتبات الأصلية القديمة. يجب عدم الإشارة إليها بشكل مباشر مطلقًا عند إنشاء NDK. بدلاً من ذلك، يجب أن تتضمن كل مكتبة مشتركة أو ملف تنفيذي نسختها الخاصة من هذه الرموز، والتي توفّرها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
أكثر قابلية للقراءة. - تمت إزالة الرموز التالية، التي تم طرحها في الإصدار
libgcc.a
من GCC 4.6، من مكتبةlibc.so
للنظام الأساسي X86:__aeabi_idiv0
و__aeabi_ldiv0
و__aeabi_unwind_cpp_pr1
و__aeabi_unwind_cpp_pr2
. - تمت إزالة
.ctors
و.dtors
و.eh_frame
غير المستخدمة في MIPScrt*_so.S
. - تم تعديل السمة
ndk-gdb
بحيث لا تستخدم سوى السطر الأخير من نتيجةndk-build
DUMP_XXXX
. يضمن هذا التغيير أنّه في حال طباعةApplication.mk
أوAndroid.mk
عنصرًا باستخدام بنية$(info ...)
، لن يتم إدخاله في نتيجةDUMP_XXXX
. (مزيد من المعلومات)
- عناوين NDK الثابتة:
- التغييرات الأخرى:
-
- تمت إزالة العنوانَين
arch-x86
وarch-mips
منplatforms/android-[3,4,5,8]
. لم تكتمل هذه العناوين لأنّ كلاً من واجهات برمجة التطبيقات X86 وMIPS ABI لا تتوافق إلا مع واجهة برمجة التطبيقات 9 أو الإصدارات الأحدث. - تتضمن لغة c++ المبسّطة مسارًا في الحزم المستقلة، كما هو موضح أدناه.
(المشكلة 35279)
<path>/arm-linux-androideabi/include/c++/4.6.x-google to: <path>/include/c++/4.6/
- تم إصلاح خطأ
ndk-build
للتعرف على المزيد من امتدادات الملفات C++ تلقائيًا:.cc .cp .cxx .cpp .CPP .c++ .C
. لا يزال بإمكانك استخدامLOCAL_CPP_EXTENSION
لاستبدال إعدادات الإضافات هذه. - تم إصلاح مشكلة في
samples/san-angeles
تسبّبت في ظهور شاشة سوداء أو تجميد الإطار عند إعادة التشغيل. - تم استبدال واجهات برمجة التطبيقات التي تم إيقافها في نماذج NDK.
(الإصدار 20017)
hello-gl2
من android-5 إلى android-7native-activity
من android-9 إلى android-10native-audio
من android-9 إلى android-10native-plasma
من android-9 إلى android-10
- تمت إضافة علامة تجارية جديدة للملفات التنفيذية في Android مع نظام أكثر بساطة في القسم
.note.android.ident
(محدّد فيcrtbegin_static/dynamic.o
) بحيث يمكن لأدوات تصحيح الأخطاء التصرف وفقًا لذلك. يتم تحديد عضو البنية والقيم على النحو التالي:static const struct { int32_t namesz; /* = 8, sizeof ("Android") */ int32_t descsz; /* = 1 * sizeof(int32_t) */ int32_t type; /* = 1, ABI_NOTETYPE */ char name[sizeof "Android"]; /* = "Android" */ int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */ }
تم إيقاف خيارات العلامات التجارية السابقة في القسم
.note.ABI-tag
. - تمت إضافة نص برمجي جديد
run-tests-all.sh
يستدعيrun-tests.sh
وstandalone/run.sh
بشروط مختلفة. يتم تشغيل النص البرمجيrun-tests.sh
بدون الخيار--abi
، ويتم تحسينه لتجميع معظم الاختبارات لجميع واجهات ABI المتوافقة وتشغيلها على جميع الأجهزة المتصلة.
- تمت إزالة العنوانَين
Android NDK r8b (تموز/يوليو 2012)
الميزات الرئيسية في هذا الإصدار هي الإصدار 4.6 من مجموعة أدوات GNU Compiler Group (GCC) والإصدار 7.3.x من GNU Debugger (GNU Debugger (GDB) 7.3.x الذي يتيح تصحيح الأخطاء لصورة نظام Android 4.1 (المستوى 16 من واجهة برمجة التطبيقات).
- إصلاحات مهمة للأخطاء:
-
- تم إصلاح مشاكل
LOCAL_SHORT_COMMANDS
على بيئات نظام التشغيل Mac وWindows Cygwin للمكتبات الثابتة. يتم إنشاء ملفات القائمة بشكل أسرع ولا تتم إعادة إنشائها لتجنب عمليات إعادة إنشاء المشروعات المتكررة. - تم حلّ عدّة مشاكل في
ndk-gdb
:- تم تحديث الأداة لتمرير العلامات
-e
و-d
و-s
إلى Adb بشكل أكثر اتساقًا. - تم تحديث الأداة لقبول الأسماء التسلسلية للأجهزة التي تحتوي على مسافات.
- تم تعديل الأداة لاسترداد معلومات
/system/bin/link
، وبالتالي يمكن لـgdb
على المضيف ضبط نقطة إيقاف في__dl_rtld_db_dlactivity
والانتباه إلى نشاط الرابط (على سبيل المثال، إعادة فحص رموزsolib
عند استدعاءdlopen()
).
- تم تحديث الأداة لتمرير العلامات
- تم إصلاح
ndk-build clean
على نظام التشغيل Windows، والذي تعذَّر عليه إزالة./libs/*/lib*.so
. - تم إصلاح
ndk-build.cmd
لعرض قيمةERRORLEVEL
غير صفرية عند تعذُّر عملmake
. - تم إصلاح
libc.so
لمنع تصدير رمزَي__exidx_start
و__exidx_end
بشكل غير صحيح. - تم إصلاح
SEGV
عند فك ضغط الحزمة بعد__libc_init
لـ ARM وMIPS.
- تم إصلاح مشاكل
- تغييرات مهمة:
-
- تمت إضافة سلسلة أدوات GCC 4.6 (
binutils
2.21 معgold
وGDB 7.3.x) لتعايش مع سلسلة أدوات GCC 4.4.3 الأصلية (binutils
2.19 وGDB 6.6).- أصبحت GCC 4.6 الآن سلسلة الأدوات التلقائية. يمكنك ضبط
NDK_TOOLCHAIN_VERSION=4.4.3
فيApplication.mk
لاختيار العنوان الأصلي. - لا يتوفّر دعم رابط
gold
إلا لبنية ARM وx86 على الأجهزة المضيفة لنظامَي التشغيل Linux وMac. ويكون هذا الدعم غير مفعَّل تلقائيًا. يجب إضافة "LOCAL_LDLIBS += -fuse-ld=gold
" في "Android.mk
" لتفعيله. - تتطلّب البرامج التي تم تجميعها باستخدام
-fPIE
استخدامGDB
الجديد لتصحيح الأخطاء، بما في ذلك البرامج الثنائية في صور نظام Android 4.1 (مستوى واجهة برمجة التطبيقات 16). - تحتوي أداة
binutils
2.21ld
على إصلاحات من خلال المنافذ الخلفية من الإصدار 2.22:- تم إصلاح مشكلة
ld --gc-sections
، التي تحتفظ بشكل غير صحيح بإشارات الزومبي إلى المكتبات الخارجية. (مزيد من المعلومات). - تم إصلاح أمر
strip
ARM للحفاظ علىp_align
وp_flags
الأصليين في القسمGNU_RELRO
إذا كانتا صالحتين. وبدون هذا الإصلاح، لا يمكن تصحيح أخطاء البرامج التي تم إنشاؤها باستخدام-fPIE
. (مزيد من المعلومات)
- تم إصلاح مشكلة
- تم إيقاف تحسين
sincos()
للتوافق مع الأنظمة الأساسية القديمة.
- أصبحت GCC 4.6 الآن سلسلة الأدوات التلقائية. يمكنك ضبط
- تم تعديل خيارات الإصدار لتفعيل إجراءات الحماية "بدون تشكُّل" (NX) و
relro
/bind_now
تلقائيًا:- تمت إضافة
--noexecstack
إلى المجمِّع و-z noexecstack
إلى أداة الربط التي توفّر حماية NX من هجمات تجاوز المخزن المؤقت من خلال تفعيل بت NX على المكدس والحِزم. - تمت إضافة
-z relro
و-z now
إلى أداة الربط لتقوية أقسام البيانات الداخلية بعد الربط للحماية من الثغرات الأمنية الناتجة عن تلف الذاكرة. (مزيد من المعلومات: 1، 2) - ويمكن إيقاف هذه الميزات باستخدام الخيارات التالية:
- يمكنك إيقاف حماية NX من خلال ضبط الخيار
--execstack
للمجمِّع و-z execstack
لأداة الربط. - يمكنك إيقاف ميزة حماية البيانات الداخلية من خلال ضبط الخيارَين
-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
. - يمكنك إيقاف حماية NX من خلال ضبط الخيار
- تمت إضافة
- تمت إضافة العلامة التجارية لملفات 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
. (مزيد من المعلومات) - تم إصلاح أخطاء أداة
ld
عند استخدام--gc-sections
. (مزيد من المعلومات) - تم إصلاح مشكلة احتساب MIPS
GOT_PAGE
. (مزيد من المعلومات) - تم إصلاح رابط رمز التحذير التالي لـ
mips_elf_count_got_symbols
. - تم إصلاح رابط رمز التحذير التالي لـ
mips_elf_allocate_lazy_stub
. - تم نقل MIPS
.dynamic
إلى شريحة البيانات، بحيث تكون قابلة للكتابة. - تم استبدال القيم غير القابلة للتغيير في الترميز للرموز بأحجام المقاطع الصحيحة لنظام MIPS.
- تمت إزالة الخيار
-mno-shared
من القيم التلقائية في سلسلة أدوات MIPS. القيمة التلقائية لسلسلة أدوات Android هي-fPIC
(أو-fpic
إذا كانت متاحة). إذا لم تحدّد-mshared
أو-fpic
أو-fPIC
أو-fpie
أو-fPIE
بوضوح، يضيف المحول البرمجي MIPS-mno-shared
الذي يوقف PIC. تم إصلاح المحول البرمجي لعدم إضافة-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-
. - تم نقل
sources/cxx-stl/gnu-libstdc++/include
وlib
إلىsources/cxx-stl/gnu-libstdc++/4.6
عند التجميع في GCC 4.6، أوsources/cxx-stl/gnu-libstdc++/4.4.3
عند التجميع مع GCC 4.4.3. - تم نقل "
libbfd.a
" و"libintl.a
" من "lib/
" إلى "lib32/
".
- تم نقل "
- تمت إضافة نصوص برمجية متنوعة وتحسينها في سلسلة أدوات إعادة إنشاء واختبار NDK:
- تمت إضافة
build-mingw64-toolchain.sh
لإنشاء سلسلة أدوات جديدة يستضيفها نظام التشغيل Linux وتنشئ ملفات تنفيذية لكل من Win32 وWin64. - تم تحسين سرعة
download-toolchain-sources.sh
باستخدام الأمرclone
واستخدامcheckout
فقط للأدلة اللازمة لإنشاء البرامج الثنائية لسلسلة أدوات NDK. - تمت إضافة
build-host-gcc.sh
وbuild-host-gdb.sh
نصوص برمجية. - تمت إضافة
tests/check-release.sh
للتحقق من محتوى دليل تثبيت NDK محدد، أو حزمة NDK حالية. - أعاد كتابة اختبار
tests/standalone/run.sh
المستقل .
- تمت إضافة
- تمت إزالة رأس
if_dl.h
من جميع الأنظمة الأساسية والبُنى الأساسية. إنّ العنصرَينAF_LINK
وsockaddr_dl
اللذَين يصفانهما مخصّصان لنظام BSD (أي أنّهما غير متوفّرَين في نظام التشغيل Linux).
- تم تغيير أماكن البرامج الثنائية:
Android NDK r8 (أيار/مايو 2012)
يتضمن هذا الإصدار من NDK إمكانية استخدام واجهة برمجة تطبيقات MIPS ABI وبعض الإصلاحات الإضافية.
- الميزات الجديدة:
-
- تمت إضافة دعم واجهة برمجة التطبيقات MIPS ABI التي تتيح لك إنشاء رمز جهاز يمكن تشغيله على أجهزة Android المتوافقة المستندة إلى MIPS. وتشمل الميزات الرئيسية لنظام MIPS سلاسل الأدوات الخاصة ببروتوكول MIPS وعناوين النظام والمكتبات وإمكانية تصحيح الأخطاء. لمزيد من التفاصيل بخصوص دعم MIPS، راجِع
docs/CPU-MIPS.html
في حزمة NDK.يتم تلقائيًا إنشاء الرمز للأجهزة المستندة إلى معالِج البيانات ARM. يمكنك إضافة
mips
إلى تعريفAPP_ABI
في ملفApplication.mk
لإنشاء أنظمة MIPS الأساسية. على سبيل المثال، يحدّد السطر التاليndk-build
لإنشاء رمز لثلاث واجهات ABI مختلفة:APP_ABI := armeabi armeabi-v7a mips
ما لم تكن تعتمد على مصادر تجميع البيانات الخاصة بالبنية، مثل رمز تجميع ARM، لن تحتاج إلى لمس ملفات
Android.mk
لإنشاء رمز جهاز MIPS. - يمكنك إنشاء سلسلة أدوات MIPS مستقلة باستخدام الخيار
--arch=mips
عند استدعاءmake-standalone-toolchain.sh
. لمزيد من التفاصيل، يمكنك الاطّلاع علىdocs/STANDALONE-TOOLCHAIN.html
.
ملاحظة: لضمان عدم إتاحة تطبيقاتك للمستخدمين إلا إذا كانت أجهزتهم قادرة على تشغيلها، يجري Google Play فلترة للتطبيقات استنادًا إلى معلومات مجموعة التعليمات المضمّنة في تطبيقك. وليس هناك إجراء مطلوب من جانبك لتمكين التصفية. بالإضافة إلى ذلك، يفحص نظام Android نفسه تطبيقك عند التثبيت ولا يسمح بمتابعة التثبيت إلا إذا كان التطبيق يوفّر مكتبة يتم تجميعها لبنية وحدة المعالجة المركزية (CPU) للجهاز.
- تمت إضافة دعم واجهة برمجة التطبيقات MIPS ABI التي تتيح لك إنشاء رمز جهاز يمكن تشغيله على أجهزة Android المتوافقة المستندة إلى MIPS. وتشمل الميزات الرئيسية لنظام MIPS سلاسل الأدوات الخاصة ببروتوكول MIPS وعناوين النظام والمكتبات وإمكانية تصحيح الأخطاء. لمزيد من التفاصيل بخصوص دعم MIPS، راجِع
- إصلاحات مهمة للأخطاء:
-
- تم إصلاح خطأ إملائي في تنفيذ GAbi+ حيث تم تعديل نتيجة
dynamic_cast<D>(b)
لكائن الفئة الأساسية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 بشكل صحيح،
مما يؤدي إلى حدوث أعطال على الأجهزة المستندة إلى Tegra2 والأجهزة الأخرى عند محاولة استخدام
وظائف نقطة عائمة معيّنة (على سبيل المثال،
cosf
،sinf
،expf
).
- تم إصلاح البرامج الثنائية GNU STL armeabi-v7a لكي لا تتعطل على الأجهزة التي لا تستخدم NEON. لم يتم إعداد الملفات المتوفرة مع NDK r7b بشكل صحيح،
مما يؤدي إلى حدوث أعطال على الأجهزة المستندة إلى Tegra2 والأجهزة الأخرى عند محاولة استخدام
وظائف نقطة عائمة معيّنة (على سبيل المثال،
- تغييرات مهمة:
-
- تمت إضافة إمكانية استخدام أدلة الإخراج المخصّصة من خلال متغيّر بيئة
NDK_OUT
. عند تحديد هذا المتغيّر، يتم استخدامه لتخزين جميع الملفات التي تم إنشاؤها وسيطًا، بدلاً من$PROJECT_PATH/obj
. يتعرّفndk-gdb
أيضًا على المتغيّر. - تمت إتاحة إنشاء وحدات تتضمّن المئات أو حتى الآلاف من ملفات المصدر من خلال تحديد من
LOCAL_SHORT_COMMANDS
إلىtrue
فيAndroid.mk
.يفرض هذا التغيير على نظام الإصدار NDK وضع معظم خيارات أدوات الربط أو أدوات الأرشفة في ملفات القائمة، كحل بديل لقيود طول سطر الأوامر. لمزيد من التفاصيل، انتقلي إلى
docs/ANDROID-MK.html
.
- تمت إضافة إمكانية استخدام أدلة الإخراج المخصّصة من خلال متغيّر بيئة
- إصلاحات الأخطاء الأخرى:
-
- تم إصلاح تنفيذ
android_getCpuCount()
في مكتبة مساعدcpufeatures
. في بعض الأجهزة التي يتم فيها تفعيل النظام ديناميكيًا، ستعرض عملية التنفيذ السابقة إجمالي عدد النوى النشطة عند استدعاء هذه الوظيفة، بدلاً من إجمالي عدد النوى المتاحة ماديًا.
- تم إصلاح تنفيذ
Android NDK r7b (شباط/ فبراير 2012)
يشتمل هذا الإصدار من NDK على إصلاحات لإصدارات Windows الأصلية ولغة Cygwin والعديد من التحسينات الأخرى:
- إصلاحات مهمة للأخطاء:
-
- تم تحديث
sys/atomics.h
لتجنب مشاكل الدقة على بعض الأجهزة المتعددة النواة المستندة إلى معالِج البيانات ARM. أعِد إنشاء مصادرك غير المُعدَّلة باستخدام هذا الإصدار من NDK ويجب التخلص من هذه المشكلة تمامًا. لمزيد من التفاصيل، يُرجى الاطّلاع على "docs/ANDROID-ATOMICS.html
". - تم العودة إلى الإصدار 2.19 من
binutils
لإصلاح مشاكل تصحيح الأخطاء التي ظهرت في الإصدار NDK r7 (الذي تم التبديل إلى الإصدار 2.20.1 منbinutils
). - تم إصلاح
ndk-build
على نظام التشغيل Linux 32 بت. أدى خطأ في حزمة المحتوى إلى وضع إصدار 64 بت منawk
القابل للتنفيذ ضمنprebuilt/linux-x86/bin
في NDK r7. - تم إصلاح إصدار Windows الأصلي (
ndk-build.cmd
). لم تتأثر أوضاع الإصدار الأخرى. وتشمل هذه الحلول ما يلي:- تمت إزالة خطأ حلقي لا نهائي / تجاوز تسلسل استدعاء الدوال البرمجية الذي حدث عند محاولة استدعاء
ndk-build.cmd
من دليل ليس الجزء العلوي من مسار مشروعك (على سبيل المثال، في أي دليل فرعي). - تم إصلاح مشكلة تجاهل ملفات التبعية التي تم إنشاؤها تلقائيًا. ويعني ذلك أنّ تعديل العنوان لم يؤدّي إلى إعادة تجميع المصادر التي تضمّنته.
- تم إصلاح مشكلة عدم معالجة الرموز الخاصة في الملفات أو المسارات بشكل صحيح، باستثناء المسافات وعلامات الاقتباس.
- تمت إزالة خطأ حلقي لا نهائي / تجاوز تسلسل استدعاء الدوال البرمجية الذي حدث عند محاولة استدعاء
- تم إصلاح سلسلة الأدوات المستقلة لإنشاء برامج ثنائية مناسبة عند استخدام
-lstdc++
(أي الربط مع وقت تشغيل GNUlibstdc++
C++). يجب استخدام السمة-lgnustl_shared
إذا أردت الربط بإصدار المكتبة المشتركة أو استخدام-lstdc++
للإصدار الثابت.يُرجى مراجعة
docs/STANDALONE-TOOLCHAIN.html
للحصول على مزيد من التفاصيل حول هذا الحلّ. - تم إصلاح
gnustl_shared
على Cygwin. شكوى الرابط من أنّه لم يتمكّن من العثور علىlibsupc++.a
على الرغم من أنّ الملف كان في الموقع الصحيح. - تم إصلاح رابط Cygwin C++ عند عدم استخدام أي وقت تشغيل محدد لـ C++ من خلال
APP_STL
.
- تم تحديث
- التغييرات الأخرى:
-
- عندما يستخدم تطبيقك وقت تشغيل GNU
libstdc++
، لن يفرض برنامج التجميع على الاستثناءات وميزة RTTI مرة أخرى بشكل إجباري. ينتج عن هذا التغيير رمز أصغر حجمًا.وإذا كنت بحاجة إلى هذه الميزات، عليك تنفيذ أحد الإجراءات التالية:
- فعِّل الاستثناءات و/أو ميزة RTTI بشكل صريح في الوحدات أو
Application.mk
. (مقترَح) - حدِّد السمة
APP_GNUSTL_FORCE_CPP_FEATURES
إلى'exceptions'
أو'rtti'
أو كلتيهما فيApplication.mk
. لمزيد من التفاصيل، يمكنك الاطّلاع علىdocs/APPLICATION-MK.html
.
- فعِّل الاستثناءات و/أو ميزة RTTI بشكل صريح في الوحدات أو
- يعمل
ndk-gdb
الآن بشكل صحيح عندما يحتوي تطبيقك على خدمات خاصة تعمل في عمليات مستقلة. ويتم تصحيح الأخطاء في عملية تقديم الطلب الرئيسية، بدلاً من العملية الأولى التي يدرجهاps
، والتي عادةً ما تكون عملية متعلّقة بالخدمة. - تم إصلاح خطأ نادر حيث يتعذّر على NDK r7 الالتزام بقيمة
LOCAL_ARM_MODE
ويتم دائمًا تجميع ملفات مصدر معيّنة (وليس كلها) وفقًا لتعليمات 32 بت. STLport
: يمكنك إعادة تحميل المصادر لتتناسب مع إصدار النظام الأساسي Android. يُصلح هذا التحديث بعض الأخطاء البسيطة:- إنشاء مثيل ثابت لنوع غير مكتمل
- تم إصلاح الخطأ الثانوي "==" مقابل "=" الخطأ الإملائي
- تم استخدام
memmove
بدلاً منmemcpy
فيstring::assign
- تمت إضافة طريقة أفضل للتعامل مع
IsNANorINF
وIsINF
وIsNegNAN
وغيرها.
للحصول على التفاصيل الكاملة، راجِع سجلّ الإتمام.
STLport
: تمت إزالة 5 أدوات إعداد ثابتة غير ضرورية من المكتبة.- بدلاً من ذلك، تم تجميع مكتبات GNU libstdc++ لـ armeabi-v7a عن طريق الخطأ في armeabi. لم يكن لهذا التغيير أي تأثير في الدقة، ولكن من المفترض أن يؤدي استخدام واجهة التطبيق الثنائية (ABI) الصحيحة إلى تحقيق أداء أفضل قليلاً.
- تم تحديث مكتبة مساعد
cpu-features
لإدراج ثلاث ميزات اختيارية لوحدة المعالجة المركزية x86 (SSSE3
وMOVBE
وPOPCNT
). يمكنك الاطّلاع علىdocs/CPU-FEATURES.html
لمزيد من التفاصيل. - تم تحديث
docs/NDK-BUILD.html
للإشارة إلىNDK_APPLICATION_MK
بدلاً منNDK_APP_APPLICATION_MK
من أجل اختيار ملفApplication.mk
مخصّص. - Cygwin: لم يعُد
ndk-build
ينشئ ملف "NUL" فارغًا في الدليل الحالي عند استدعائه. - Cygwin: تمت إضافة ميزة "رصد التبعية" تلقائيًا بشكل أفضل. وفي الإصدار السابق، لم يعمل الإصدار السابق بشكل صحيح في الحالات التالية:
- عندما لم تكن بادئة محرك الأقراص Cygwin هي
/cygdrive
. - عند استخدام قاعدة تثبيت بدون محرك، مثلاً، عندما يترجم Cygwin الترميز
/home
إلى\\server\subdir
بدلاً منC:\Some\Dir
.
- عندما لم تكن بادئة محرك الأقراص Cygwin هي
- Cygwin: لا يحاول "
ndk-build
" استخدام أدوات Windows الأصلية ضِمن$NDK/prebuilt/windows/bin
مع إصدارات معيّنة من Cygwin و/أو GNU Make.
- عندما يستخدم تطبيقك وقت تشغيل GNU
Android NDK r7 (تشرين الثاني (نوفمبر) 2011)
يشتمل هذا الإصدار من NDK على ميزات جديدة للتوافق مع نظام Android 4.0 الأساسي بالإضافة إلى العديد من الإضافات والتحسينات الأخرى:
- الميزات الجديدة
-
- تمت إضافة واجهات برمجة التطبيقات NDK API الرسمية لنظام التشغيل Android 4.0 (المستوى 14 من واجهة برمجة التطبيقات)، والتي تضيف الميزات الأصلية التالية إلى النظام الأساسي:
- تمت إضافة واجهة برمجة التطبيقات الأصلية للوسائط المتعددة استنادًا إلى معيار
Kronos Group OpenMAX AL 1.0.1. ويتيح العنوانان الجديدان
<OMXAL/OpenMAXAL.h>
و<OMXAL/OpenMAXAL_Android.h>
للتطبيقات التي تستهدف المستوى 14 من واجهة برمجة التطبيقات تنفيذ إخراج الوسائط المتعددة مباشرةً من الرموز البرمجية الأصلية باستخدام واجهة جديدة لقائمة انتظار المخزن المؤقت والخاصة بنظام التشغيل Android. لمزيد من التفاصيل، يمكنك الاطّلاع علىdocs/openmaxal/index.html
وhttp://www.khronos.org/openmax/. - تم تعديل واجهة برمجة التطبيقات الخاصة بالصوت الأصلي، وذلك استنادًا إلى معيار Keronos Group OpenSL ES 1.0.1. باستخدام المستوى 14 من واجهة برمجة التطبيقات، يمكنك الآن فك ترميز الصوت المضغوط (مثل MP3 وAAC وVorbis) وتحويله إلى PCM. لمزيد من التفاصيل، يمكنك الاطّلاع على
docs/opensles/index.html
وhttp://www.khronos.org/opensles/.
- تمت إضافة واجهة برمجة التطبيقات الأصلية للوسائط المتعددة استنادًا إلى معيار
Kronos Group OpenMAX AL 1.0.1. ويتيح العنوانان الجديدان
- تمت إضافة دعم ذاكرة التخزين المؤقت. لتسريع عمليات إعادة الإنشاء الكبيرة، حدِّد متغيّر البيئة
NDK_CCACHE
علىccache
(أو المسار إلى البرنامج الثنائيccache
). عند تعريف نظام إنشاء NDK، فإنه يستخدم ذاكرة التخزين المؤقت تلقائيًا عند تجميع أي ملف مصدر. مثلاً:export NDK_CCACHE=ccache
ملاحظة: ذاكرة التخزين المؤقت غير مضمّنة في الإصدار NDK، لذا يجب تثبيتها قبل استخدامها. لمزيد من المعلومات حول ذاكرة التخزين المؤقت، يمكنك الاطّلاع على http://ccache.samba.org.
- تمت إضافة إمكانية ضبط
APP_ABI
علىall
للإشارة إلى أنّك تريد إنشاء وحدات NDK لجميع واجهات ABI المتوافقة مع إصدار NDK المحدّد. وهذا يعني أنّ أحد السطرين التاليين فيApplication.mk
مكافئَين لهذا الإصدار:APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
تعمل هذه الطريقة أيضًا إذا حدّدت
APP_ABI
عند استدعاءndk-build
من سطر الأوامر، وهي طريقة سريعة للتحقّق من أنّه يتم إنشاء مشروعك لجميع واجهات ABI المتوافقة بدون تغييرApplication.mk file
في المشروع. مثلاً:ndk-build APP_ABI=all
- تمت إضافة متغيّر
LOCAL_CPP_FEATURES
فيAndroid.mk
يسمح لك بالإعلان عن ميزات C++ (RTTI أو الاستثناءات) التي تستخدمها وحدتك. ويضمن ذلك عمل عملية الربط النهائية بشكل صحيح إذا كانت لديك وحدات معدّة مسبقًا تعتمد على هذه الميزات. يمكنك الاطّلاع علىdocs/ANDROID-MK.html
وdocs/CPLUSPLUS-SUPPORT.html
لمزيد من التفاصيل. - تم اختصار المسارات لملفات المصدر والعناصر المستخدَمة في أوامر الإصدار. عند استدعاء
$NDK/ndk-build
من مسار مشروعك، أصبحت المسارات إلى المصدر والكائن والملفات الثنائية التي يتم تمريرها إلى أوامر الإصدار أقصر بكثير الآن، لأنّه يتم تمريرها بالنسبة إلى الدليل الحالي. ويُعدّ هذا الإجراء مفيدًا عند إنشاء مشاريع تحتوي على عدد كبير من الملفات المصدر، لتجنُّب فرض القيود على الحد الأقصى لطول سطر الأوامر الذي يتوافق مع نظام التشغيل المضيف. ولن يتغير السلوك إذا تم استدعاءndk-build
من دليل فرعي من شجرة مشروعك أو إذا حدّدتNDK_PROJECT_PATH
للإشارة إلى دليل محدّد.
- تمت إضافة واجهات برمجة التطبيقات NDK API الرسمية لنظام التشغيل Android 4.0 (المستوى 14 من واجهة برمجة التطبيقات)، والتي تضيف الميزات الأصلية التالية إلى النظام الأساسي:
- الميزات التجريبية
-
يمكنك الآن إنشاء ملفات مصدر NDK على نظام التشغيل Windows بدون Cygwin من خلال استدعاء
النص البرمجي
ndk-build.cmd
من سطر الأوامر من مسار المشروع. يأخذ النص البرمجي الوسيطات نفسها التي يتضمّنها نصndk-build
البرمجي الأصلي. تأتي حزمة NDK في نظام التشغيل Windows مزودة ببرامج ثنائية مسبقة الإعداد مخصصة لـ GNU Make وAwk وغير ذلك من الأدوات التي يتطلبها الإصدار. لن تحتاج إلى تثبيت أي تطبيقات أخرى للحصول على نظام إصدار صالح.ملاحظة مهمة: لا تعمل السمة
ndk-gdb
على Windows، لذا لا تزال بحاجة إلى Cygwin لتصحيح الأخطاء.لا تزال هذه الميزة في مرحلة تجريبية، لذا يمكنك تجربتها والإبلاغ عن مشاكل في قاعدة بيانات الأخطاء العامة أو المنتدى العام. يتم بنجاح تجميع جميع النماذج واختبارات الوحدات التي تم شحنها مع NDK باستخدام هذه الميزة.
- إصلاحات أخطاء مهمة
-
- يتم الآن تثبيت المكتبات المشتركة المستورَدة تلقائيًا في موقع التثبيت
المستهدف (
libs/<abi>
) إذا لم يتم تحديدAPP_MODULES
فيApplication.mk
. على سبيل المثال، إذا كانت وحدة من المستوى الأعلى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
: تمت إضافة المستندات غير المتوفّرة التي تسرد EGL على أنّها واجهة برمجة تطبيقات ثابتة متوافقة، بدءًا من المستوى 9 من واجهة برمجة التطبيقات.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
. - تمت إضافة دعم ميزة RTTI في أوقات تشغيل STLport C++ (لا تتوفر إمكانية الاستثناءات).
- تمت إتاحة استخدام امتدادات ملفات متعددة في
LOCAL_CPP_EXTENSION
. على سبيل المثال، لتجميع كل منfoo.cpp
وbar.cxx
كمصادر بلغة C++ ، يجب توضيح ما يلي:LOCAL_CPP_EXTENSION := .cpp .cxx
- تمت إزالة العديد من الرموز التي تم تصديرها غير المرغوب فيها من مكتبات النظام المشتركة في وقت الربط التي توفّرها منصة NDK. ويضمن ذلك ألّا يشكّل الرمز الذي يتم إنشاؤه باستخدام سلسلة الأدوات المستقلة خطرًا بالاعتماد بشكل غير مقصود على رمز ABI غير ثابت (على سبيل المثال، أي رمز libgcc.a يتغيّر في كل مرة يتم فيها تغيير سلسلة الأدوات المستخدَمة لإنشاء المنصة).
- تم تحديث عناوين EGL وOpenES Keronos للتوافق مع المزيد من الإضافات. يُرجى العلم أنّ هذا الإجراء لا يؤدي إلى تغيير واجهات ABI في NDK للمكتبات المقابلة، لأنّه يجب فحص كل إضافة في وقت التشغيل من خلال تطبيق العميل.
تعتمد الإضافات المتاحة على جهازك وبرامج تشغيل وحدة معالجة الرسومات، وليس على إصدار النظام الأساسي الذي يعمل عليه الجهاز. تضيف تغييرات العناوين ثوابتًا وأنواعًا جديدة لتسهيل استخدام الإضافات عند التحقق منها باستخدام
eglGetProcAddress()
أوglGetProcAddress()
. وتوضّح القائمة التالية الإضافات المتوافقة حديثًا:- GLES 1.x
-
GL_OES_vertex_array_object
GL_OES_EGL_image_external
GL_APPLE_texture_2D_limited_npot
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_EXT_multi_draw_arrays
GL_EXT_read_format_bgra
GL_EXT_texture_filter_anisotropic
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_lod_bias
GL_IMG_read_format
GL_IMG_texture_compression_pvrtc
GL_IMG_texture_env_enhanced_fixed_function
GL_IMG_user_clip_plane
GL_IMG_multisampled_render_to_texture
GL_NV_fence
GL_QCOM_driver_control
GL_QCOM_extended_get
GL_QCOM_extended_get2
GL_QCOM_perfmon_global_mode
GL_QCOM_writeonly_rendering
GL_QCOM_tiled_rendering
- Google Workspace 2.0
-
GL_OES_element_index_uint
GL_OES_get_program_binary
GL_OES_mapbuffer
GL_OES_packed_depth_stencil
GL_OES_texture_3D
GL_OES_texture_float
GL_OES_texture_float_linear
GL_OES_texture_half_float_linear
GL_OES_texture_npot
GL_OES_vertex_array_object
GL_OES_EGL_image_external
GL_AMD_program_binary_Z400
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_EXT_multi_draw_arrays
GL_EXT_read_format_bgra
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_compression_dxt1
GL_IMG_program_binary
GL_IMG_read_format
GL_IMG_shader_binary
GL_IMG_texture_compression_pvrtc
GL_IMG_multisampled_render_to_texture
GL_NV_coverage_sample
GL_NV_depth_nonlinear
GL_QCOM_extended_get
GL_QCOM_extended_get2
GL_QCOM_writeonly_rendering
GL_QCOM_tiled_rendering
- EGL
-
EGL_ANDROID_recordable
EGL_NV_system_time
Android NDK r6b (آب/أغسطس 2011)
لا يتضمن هذا الإصدار من NDK أي ميزات جديدة مقارنة بالإصدار r6. يعالج إصدار r6b المشاكل التالية في إصدار r6:
- إصلاحات أخطاء مهمة
-
- تم إصلاح الإصدار عند استخدام
APP_ABI="armeabi x86"
للإصدارات ذات البنية المتعدّدة. - تم إصلاح موقع ثنائيات STLport الثنائية الإنشاء مسبقًا في حزمة الإصدار NDK. حدث خطأ في نص التغليف وضع المنتجات في مكان غير صحيح.
- تم إصلاح استخدام
atexit()
في المكتبات المشتركة باستخدام سلسلة أدوات مستقلة من x86. - السعر الثابت
make-standalone-toolchain.sh --arch=x86
. وكانت هذه الطريقة تفشل في نسخ البرامج الثنائية المناسبة من GNU libstdc++ إلى الموقع الصحيح. - تم إصلاح تحذيرات رابط سلسلة الأدوات المستقلة بسبب عدم توفّر التعريف والحجم للرمز
__dso_handle
(ARM فقط). - تم إصلاح ترتيب التضمين في
$(SYSROOT)/usr/include
لإصدارات x86. راجِع خطأ للحصول على مزيد من المعلومات. - تم إصلاح تعريفات
ptrdiff_t
وsize_t
في الأنظمة الخاصة بـ x86 عند استخدامهما مع سلسلة أدوات x86 المستقلة.
- تم إصلاح الإصدار عند استخدام
Android NDK r6 (تموز/يوليو 2011)
يشمل هذا الإصدار من NDK إمكانية استخدام واجهة التطبيق الثنائية (ABI) x86 وتغييرات طفيفة أخرى.
للحصول على معلومات مفصّلة تصف التغييرات في هذا الإصدار، يمكنك قراءة مستند CHANGES.HTML
المضمَّن في حزمة NDK.
- ملاحظات عامة:
-
- تتيح هذه الميزة استخدام واجهة x86 ABI التي تتيح لك إنشاء رمز جهاز يمكن تشغيله على أجهزة Android المتوافقة المستندة إلى x86. وتشمل الميزات الرئيسية لنظام التشغيل x86
سلاسل الأدوات الخاصة بـ x86 وعناوين النظام والمكتبات
وإمكانية تصحيح الأخطاء. للحصول على جميع التفاصيل بخصوص دعم x86،
راجِع
docs/CPU-X86.html
في حزمة NDK.يتم تلقائيًا إنشاء الرمز للأجهزة المستندة إلى معالِج البيانات ARM، ولكن يمكنك إضافة x86 إلى تعريف
APP_ABI
الخاص بك في ملفApplication.mk
لإنشاء إصدارات متوافقة من x86. على سبيل المثال، يحدّد السطر التاليndk-build
لإنشاء رمز لثلاث واجهات ABI مختلفة:APP_ABI := armeabi armeabi-v7a x86
ما لم تكن تعتمد على مصادر التجميع المستندة إلى ARM، لن تحتاج إلى لمس ملفات
Android.mk
لإنشاء رمز جهاز يعمل بإصدار x86. - يمكنك إنشاء سلسلة أدوات مستقلة بتنسيق x86 باستخدام خيار
--toolchain=x86-4.4.3
عند طلب بياناتmake-standalone-toolchain.sh
. لمزيد من التفاصيل، يمكنك الاطّلاع علىdocs/STANDALONE-TOOLCHAIN.html
. - تتيح لك أداة
ndk-stack
الجديدة ترجمة تتبُّع تسلسل استدعاء الدوال البرمجية إلى لغةlogcat
التي يتم إنشاؤها باستخدام رمز برمجي أصلي. تترجم الأداة عناوين التعليمات إلى تنسيق يمكن قراءته ويتضمّن عناصر، مثل الدالة وملف المصدر ورقم السطر المقابل لكل إطار تكديس. لمزيد من المعلومات وللتعرّف على مثال حول الاستخدام، يمكنك الاطّلاع علىdocs/NDK-STACK.html
.
- تتيح هذه الميزة استخدام واجهة x86 ABI التي تتيح لك إنشاء رمز جهاز يمكن تشغيله على أجهزة Android المتوافقة المستندة إلى x86. وتشمل الميزات الرئيسية لنظام التشغيل x86
سلاسل الأدوات الخاصة بـ x86 وعناوين النظام والمكتبات
وإمكانية تصحيح الأخطاء. للحصول على جميع التفاصيل بخصوص دعم x86،
راجِع
- التغييرات الأخرى:
- تمت إزالة
arm-eabi-4.4.0
من توزيع NDK r5 الذي تم إيقافه نهائيًا منذ انطلاقه في NDK r5.
Android NDK r5c (حزيران/يونيو 2011)
لا يتضمن هذا الإصدار من NDK أي ميزات جديدة مقارنة بـ r5b. يعالج إصدار r5c المشاكل التالية في إصدار r5b:
- إصلاحات مهمة للأخطاء:
-
ndk-build
: تم إصلاح خطأ نادر ظهر عند محاولة تنفيذ إصدارات موازية لمشاريع يمكن تصحيح الأخطاء فيها.- تم إصلاح خطأ إملائي منع
LOCAL_WHOLE_STATIC_LIBRARIES
من العمل بشكل صحيح مع سلسلة الأدوات الجديدة وإضافة مستندات حول ذلك فيdocs/ANDROID-MK.html
. - تم إصلاح الخطأ المتمثل في تعطُّل الرمز المرتبط بـ
gnustl_static
عند تشغيله على إصدارات نظام أساسي أقدم من المستوى 8 لواجهة برمجة التطبيقات (Android 2.2). ndk-gdb
: تم إصلاح الخطأ الذي تسبب في حدوث خطأ في التصنيف أثناء تصحيح الأخطاء على الأجهزة التي تعمل بالإصدار 3.0 من نظام التشغيل Android أو الإصدارات الأحدث.<android/input.h>
: هناك دالتان تم تقديمهما في المستوى 9 من واجهة برمجة التطبيقات (الإصدار 2.3 من نظام التشغيل Android) كانتا غير صحيحتَين وتم حلّهما. يؤدي هذا الإجراء إلى إيقاف واجهة برمجة تطبيقات المصدر، لكنّ الواجهة الثنائية للنظام لا تتغيّر. كانت الدوال غير الصحيحة لا تتضمّن معلَمة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);
.- تم تعديل البرنامج الثنائي لمكتبة C في المستوى 9 لواجهة برمجة التطبيقات (الإصدار 2.3 من نظام التشغيل Android) لعرض دوال جديدة تمت إضافتها في وقت الربط إلى مستوى واجهة برمجة التطبيقات هذا بشكل صحيح (مثل
pthread_rwlock_init
).
- التحسينات والإصلاحات البسيطة:
-
- تكون ملفات العناصر مرتبطة دائمًا بالترتيب الذي تظهر به في
LOCAL_SRC_FILES
. ولم يكن الأمر كذلك في السابق لأنّه تم تجميع الملفات حسب إضافات المصدر بدلاً من ذلك. - عندما يتعذّر استخدام
import-module
، تطبع الآن قائمة الأدلة التي تم البحث عنها. يفيدك ذلك للتأكّد من صحة تعريفNDK_MODULE_PATH
الذي يستخدمه نظام الإصدار. - عندما تنجح العملية
import-module
، تطبع الآن الدليل حيث تم العثور على الوحدة في السجل (مرئية من خلالNDK_LOG=1
). - تمت زيادة سرعة إصدار التطبيقات التي يمكن تصحيح الأخطاء بها عند توفُّر عدد كبير جدًا من أدلة التضمين في المشروع.
ndk-gdb
: يمكنك الاستفادة بشكل أفضل من ميزة رصد حالات تعذُّرadb shell
ورسائل الخطأ المحسّنة.<pthread.h>
: تم إصلاح تعريفPTHREAD_RWLOCK_INITIALIZER
للمستوى 9 من واجهة برمجة التطبيقات (الإصدار 2.3 من نظام التشغيل Android) والإصدارات الأحدث.- تم إصلاح المشكلة المتمثلة في إمكانية استيراد الوحدة لنفسها، ما أدى إلى حدوث تكرار لا نهائي في 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 أنشأ البرنامج الثنائي السابق تسلسلات تعليمات غير صالحة لتعليمات الإبهام عند التعامل مع الأحرف الموقَّعة.
- لإضافة المستندات غير المتوفرة الخاصة بالقيمة "gnustl_static" لـ APP_STL، ما يسمح لك بالربط بإصدار مكتبة ثابت من GNU libstdc++. الـ
- تم حلّ المشاكل التالية التي يبلغ عددها
ndk-build
:- يشير هذا المصطلح إلى خطأ أدّى إلى إنشاء ملفات تبعية غير متسقة عند حدوث خطأ في التجميع على نظام التشغيل Windows. أدّى ذلك إلى منع إنشاء الإصدار بشكل صحيح بعد إصلاح الخطأ في رمز المصدر.
- خطأ خاص بـ Cygwin أدّى إلى إنشاء ملفات تبعية غير صالحة عند استخدام مسارات قصيرة جدًا لتثبيت NDK على نظام التشغيل Android أو مسار المشروع. وقد أدّى ذلك إلى استحالة إجراء عمليات إنشاء تدريجية.
- حدث خطأ إملائي منعت مكتبة cpufeatures من العمل بشكل صحيح مع سلسلة أدوات NDK الجديدة.
- يتم إنشاء إصدارات بامتداد Cygwin بشكل أسرع من خلال تجنُّب الطلبات الواردة إلى
cygpath -m
من GNU Make لكل ملف مصدر أو عنصر، ما تسبّب في حدوث مشاكل في أشجار المصدر الكبيرة جدًا. إذا لم تنجح هذه الطريقة، حدِّدNDK_USE_CYGPATH=1
في بيئتك لاستخدامcygpath -m
مجددًا. - يُعلم تثبيت Cygwin الآن المستخدم بمسارات التثبيت غير الصالحة التي تحتوي على مسافات. في السابق، كان المسار غير الصالح يؤدي إلى ظهور خطأ يشتكي من إصدار غير صحيح من GNU Make، حتى لو تم تثبيت المسار الصحيح.
- تم إصلاح خطأ إملائي كان يمنع عمل متغير بيئة
NDK_MODULE_PATH
بشكل صحيح عندما كان يحتوي على أدلة متعددة مفصولة بنقطتين. - يحتوي النص البرمجي
prebuilt-common.sh
على إصلاحات للتحقّق من المحوِّل البرمجي لرمز الجهاز الذي تم إنشاؤه بإصدار 64 بت، بدلاً من الاعتماد على علامة المضيف التي تسمح بإعادة إنشاء سلسلة الأدوات 32 بت بشكل صحيح على Skileopard. تتوفر الآن أيضًا ميزات إعادة إنشاء النصوص البرمجية لسلسلة الأدوات استخدام سلسلة أدوات مضيف 32 بت. - تمت إضافة بيان غير متوفّر للسمة
INET_ADDRSTRLEN
إلى السمة<netinet/in.h>
. - تمت إضافة تعريفات غير متوفّرة للسمتَين
IN6_IS_ADDR_MC_NODELOCAL
وIN6_IS_ADDR_MC_GLOBAL
إلى<netinet/in6.h>
. - تم استبدال "asm" بـ "__asm__" في
<asm/byteorder.h>
للسماح بالتجميع باستخدام-std=c99
.
Android NDK r5 (كانون الأول/ديسمبر 2010)
يتضمّن هذا الإصدار من NDK العديد من واجهات برمجة التطبيقات الجديدة، وقد تم تقديم معظمها لدعم تطوير الألعاب والتطبيقات المشابهة التي تستخدم الترميز الأصلي بشكل كبير. وباستخدام واجهات برمجة التطبيقات، يحصل مطوّرو البرامج على إمكانية وصول مباشر ومباشر إلى الفعاليات والملفات الصوتية والرسومات والنوافذ ومواد العرض ومساحة التخزين. ويمكن للمطوّرين أيضًا تنفيذ مراحل نشاط تطبيق Android باستخدام الرموز البرمجية الأصلية بمساعدة الفئة NativeActivity
الجديدة. للحصول على معلومات مفصّلة تصف التغييرات في هذا الإصدار، يمكنك قراءة مستند CHANGES.HTML
المضمَّن في حزمة NDK التي تم تنزيلها.
- ملاحظات عامة:
-
- يتيح هذا الإعداد استخدام الأنشطة الأصلية، ما يسمح لك بتنفيذ مراحل نشاط تطبيق Android في الرموز البرمجية الأصلية.
- إضافة توافق أصلي لما يلي:
- النظام الفرعي للإدخال (مثل لوحة المفاتيح والشاشة التي تعمل باللمس)
- الوصول إلى بيانات جهاز الاستشعار (مقياس التسارع، والبوصلة، والجيروسكوب، إلخ)
- واجهات برمجة التطبيقات لتكرار الأحداث لانتظار أمور مثل أحداث الإدخال وأجهزة الاستشعار.
- النظام الفرعي للنوافذ والسطح
- واجهات برمجة تطبيقات الصوت المستندة إلى معيار OpenSL ES الذي يتيح التشغيل والتسجيل، بالإضافة إلى التحكّم في التأثيرات الصوتية للنظام الأساسي
- الوصول إلى مواد العرض المجمّعة في ملف
.apk
- تضم هذه السلسلة سلسلة أدوات جديدة (تستند إلى الإصدار 4.4.3 من GCC)، وهي تعمل على إنشاء رموز برمجية أفضل، ويمكن استخدامها الآن كأداة مستقلة للتجميع المشترك، وذلك للمستخدمين الذين يريدون إنشاء المحتوى الخاص بهم باستخدام
./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). يتم أيضًا توفير برامج ثنائية تم إنشاؤها مسبقًا لـ STLport (ثابتة أو مشتركة) وGNU libstdc++ (ثابتة فقط) إذا اخترت التجميع ضمن تلك المكتبات بدلاً من تطبيق STL التلقائي، وذلك باستخدام لغة C++. لا تتوفّر استثناءات C++ وRTTI في تنفيذ STL التلقائي. لمزيد من المعلومات، يُرجى الاطّلاع على docs/CPLUSPLUS-SUPPORT.HTML.
- تم إدخال تحسينات على مكتبة مساعد
cpufeatures
لتحسين إعداد التقارير عن نوع وحدة المعالجة المركزية (CPU) (تم سابقًا تضمين وحدة معالجة مركزية (CPU) من نوع 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. للحصول على معلومات مفصّلة حول التغييرات في هذا الإصدار، يمكنك قراءة مستند CHANGES.TXT المضمّن في حزمة NDK التي تم تنزيلها.
- ملاحظات عامة:
-
- تعمل على توفير نظام إصدار مبسّط من خلال أمر الإصدار الجديد
ndk-build
. - تعمل هذه الميزة على إضافة إمكانية تصحيح الأخطاء الأصلية والسهلة للرموز البرمجية للجهاز التي تم إنشاؤها على أجهزة الإنتاج، وذلك من خلال الأمر
ndk-gdb
الجديد. - يضيف هذا الإعداد واجهة ABI جديدة خاصة بنظام التشغيل Android لبُنى وحدة المعالجة المركزية (CPU) المستندة إلى ARM،
armeabi-v7a
. تعمل واجهة التطبيق الثنائية (ABI) الجديدة على تمديد واجهة التطبيق الثنائية (ABI) الحالية فيarmeabi
لتشمل الإضافات التالية لمجموعة تعليمات وحدة المعالجة المركزية:- تعليمات تسجيل الإعجاب 2
- تعليمات FPU لجهاز VFP (VFPv3-D16)
- دعم اختياري لشرائح SIMD المتقدمة ARM (NEON) GCC وVFPv3-D32 متوافقة مع أجهزة مثل Verizon Droid من Motorola وGoogle Nexus One وغيرها
- تتم إضافة مكتبة
cpufeatures
ثابتة جديدة (تتضمّن مصادر) تسمح لتطبيقك باكتشاف ميزات وحدة المعالجة المركزية (CPU) للجهاز المضيف في وقت التشغيل. وعلى وجه التحديد، يمكن للتطبيقات التحقق من التوافق مع ARMv7-A، بالإضافة إلى التوافق مع VFPv3-D32 وNEON، ثم توفير مسارات رموز برمجية منفصلة حسب الحاجة. - إضافة نموذج تطبيق،
hello-neon
، يوضّح كيفية استخدام مكتبةcpufeatures
للتحقّق من ميزات وحدة المعالجة المركزية (CPU)، ثم توفير مسار رمز محسَّن باستخدام تقنيات NEON، إذا كانت وحدة المعالجة المركزية (CPU) متوافقة. - تتيح لك هذه الأداة إنشاء رمز جهاز لأي من مجموعتي التعليمات المتوافقة مع NDK أو كلتيهما. على سبيل المثال، يمكنك إنشاء بنية ARMv5 وARMv7-A في الوقت نفسه، مع الاحتفاظ بكل البيانات في ملف
.apk
النهائي لتطبيقك. - لضمان عدم إتاحة تطبيقاتك للمستخدمين إلا إذا كانت أجهزتهم قادرة على تشغيلها، يعمل Google Play الآن على فلترة التطبيقات استنادًا إلى معلومات مجموعة التعليمات المضمَّنة في تطبيقك، وليس عليك اتخاذ أي إجراء لتفعيل الفلترة. بالإضافة إلى ذلك، يفحص نظام Android نفسه تطبيقك أثناء التثبيت ولا يسمح بمتابعة التثبيت إلا إذا كان التطبيق يوفّر مكتبة يتم تجميعها لبنية وحدة المعالجة المركزية (CPU) للجهاز.
- تتوافق هذه الميزة مع الإصدار 2.2 من Android، بما في ذلك واجهة برمجة تطبيقات ثابتة جديدة للوصول إلى المخازن المؤقتة لوحدات
Bitmap
من الرموز البرمجية الأصلية.
- تعمل على توفير نظام إصدار مبسّط من خلال أمر الإصدار الجديد
Android NDK r3 (آذار (مارس) 2010)
- ملاحظات عامة:
-
- يؤدي هذا الخيار إلى إضافة توافق المكتبة الأصلية مع OpenGL ES 2.0.
- تتم إضافة نموذج تطبيق
hello-gl2
يوضّح استخدام OpenGL ES 2.0 وأدوات تظليل الأجزاء. - تم تحديث البرامج الثنائية لسلسلة الأدوات في هذا الإصدار باستخدام الإصدار 4.4.0 من GCC، ومن المفترض أن تنشئ هذه البرامج رمز آلة أكثر إحكامًا وفعاليةً قليلاً من الإصدار السابق (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 الأصلية، مع إدارة مراحل النشاط باستخدام الكائنGLSurfaceView
.
Android NDK r1 (حزيران/يونيو 2009)
تم إصداره في الأصل باسم "Android 1.5 NDK, Release 1".
- ملاحظات عامة:
-
- ويشمل ذلك إمكانية استخدام أداة التجميع (GCC) لتعليمات ARMv5TE، بما في ذلك تعليمات برنامج Thumb-1.
- يتضمن عناوين النظام لواجهات برمجة التطبيقات الأصلية الثابتة والوثائق ونماذج التطبيقات.