تقدّم هذه الصفحة معلومات عن التغييرات في جميع الإصدارات الثابتة من NDK التي تم طرحها. لتنزيل أحدث إصدار ثابت من NDK أو أي إصدار تجريبي متاح حاليًا، راجِع صفحة عمليات تنزيل NDK.
يمكنك الاطّلاع على مجموعة Google android-ndk-announce للحصول على معلومات أكثر شمولاً، كما يمكنك الاشتراك لتلقّي إشعارات الإصدارات.
Android NDK r29 (تشرين الأول/أكتوبر 2025)
سجلّ التغيير- المحتوى الذي تم تنزيله
-
- يمكنك تنزيل هذا الإصدار هنا.
Android NDK r28 (شباط/فبراير 2025)
سجلّ التغيير- المحتوى الذي تم تنزيله
-
- يمكنك تنزيل هذا الإصدار هنا.
الإصدار 27 من حزمة تطوير البرامج الأصلية (NDK) لنظام التشغيل Android (LTS) (يوليو 2024)
سجلّ التغيير- المحتوى الذي تم تنزيله
-
- يمكنك تنزيل هذا الإصدار هنا.
الإصدار 26 من حزمة تطوير البرامج الأصلية (NDK) لنظام التشغيل Android (إصدار LTS) (سبتمبر 2023)
سجلّ التغيير- المحتوى الذي تم تنزيله
-
- يمكنك تنزيل هذا الإصدار هنا.
- الإشعارات
-
- لم يعُد الإصدار KitKat (المستوى 19 و20 من واجهة برمجة التطبيقات) متوافقًا.
الإصدار 25 من حزمة تطوير البرامج الأصلية (NDK) لنظام التشغيل Android (الإصدار المتوافق مع أحدث التقنيات) (يوليو 2022)
سجلّ التغيير- المحتوى الذي تم تنزيله
-
- يمكنك تنزيل هذا الإصدار هنا.
- الإشعارات
-
- يتضمّن واجهات برمجة التطبيقات في Android 13.
- تم تعديل LLVM إلى clang-r450784d، استنادًا إلى تطوير LLVM 14.
Android NDK r24 (مارس 2022)
سجلّ التغيير- المحتوى الذي تم تنزيله
-
- يمكنك تنزيل هذا الإصدار هنا.
- الإشعارات
-
-
تمت إزالة GNU Assembler (GAS). إذا كنت تستخدم
-fno-integrated-as
، عليك إزالة هذه العلامة. راجِع ملاحظات نقل البيانات في Clang للحصول على نصائح حول كيفية جعل التجميع متوافقًا مع LLVM. - تمت إزالة GDB. استخدِم LLDB بدلاً من ذلك. يُرجى العِلم أنّ ndk-gdb تستخدم LLDB تلقائيًا، وأنّ Android Studio لم يتوافق إلا مع LLDB.
- لم يعُد نظام التشغيل Jelly Bean (مستويات واجهة برمجة التطبيقات 16 و17 و18) متوافقًا. الحد الأدنى لنظام التشغيل المتوافق مع NDK هو KitKat (المستوى 19 من واجهة برمجة التطبيقات).
- لم تعُد الأجهزة غير المتوافقة مع Neon متاحة. لا تتوافق بعض الأجهزة القديمة جدًا مع Neon، لذا لن تلاحظ معظم التطبيقات أي تغيير باستثناء تحسّن الأداء.
- تمت إزالة إمكانية إنشاء RenderScript. تم إيقاف RenderScript نهائيًا في Android 12. إذا لم تكمل نقل تطبيقاتك من RenderScript، يمكنك استخدام الإصدار 23 من NDK LTS.
-
تمت إزالة GNU Assembler (GAS). إذا كنت تستخدم
الإصدار 23 من حزمة تطوير البرامج الأصلية (NDK) لنظام التشغيل Android، الإصدار المتوافق مع المدى الطويل (أغسطس 2021)
سجلّ التغيير- المحتوى الذي تم تنزيله
-
- يمكنك تنزيل هذا الإصدار هنا.
- الإشعارات
-
-
تمت إزالة GNU binutils، باستثناء GNU Assembler (GAS). ستتم إزالة GAS في الإصدار التالي. إذا كنت تستخدم
-fno-integrated-as
، يُرجى الإبلاغ عن الأخطاء إذا كان هناك أي شيء يمنعك من إزالة هذه العلامة. -
تم إيقاف GDB. ستتم إزالة GDB من الإصدار التالي.
استخدِم LLDB بدلاً من ذلك. يُرجى العِلم أنّ
ndk-gdb
يستخدم LLDB تلقائيًا. - NDK r23 هو آخر إصدار سيكون متوافقًا مع الأجهزة التي لا تتضمّن Neon. بدءًا من NDK r24، سيتم إنشاء مكتبات armeabi-v7a في sysroot باستخدام Neon. لا تتوافق بعض الأجهزة القديمة جدًا مع Neon، لذا لن تلاحظ معظم التطبيقات أي تغيير باستثناء تحسُّن الأداء.
- لن يكون نظام التشغيل Jelly Bean (مستويات واجهة برمجة التطبيقات 16 و17 و18) متوافقًا مع إصدار NDK التالي. الحد الأدنى لنظام التشغيل المتوافق مع NDK للإصدار 24 هو KitKat (المستوى 19 لواجهة برمجة التطبيقات).
-
تمت إزالة GNU binutils، باستثناء GNU Assembler (GAS). ستتم إزالة GAS في الإصدار التالي. إذا كنت تستخدم
الإصدار 22b من حزمة تطوير البرامج الأصلية (NDK) لنظام التشغيل Android (مارس 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 (
الإصدار 21e من حزمة تطوير البرامج الأصلية (NDK) لنظام التشغيل Android، إصدار LTS (يناير 2021)
سجلّ التغيير- المحتوى الذي تم تنزيله
-
- يمكنك تنزيل هذا الإصدار هنا.
- الإشعارات
-
-
لم يعُد نظام التشغيل Windows 32 بت متاحًا. ولا يؤثّر ذلك في الغالبية العظمى من المستخدمين. إذا كنت لا تزال بحاجة إلى إنشاء تطبيقات NDK من إصدارات 32 بت من نظام التشغيل Windows، واصِل استخدام NDK r20.
لمزيد من المعلومات حول هذا التغيير في أدوات "مطوّر تطبيقات Android"، يمكنك الاطّلاع على مشاركة المدوّنة حول هذا الموضوع.
-
أصبحت LLD متاحة الآن للاختبار.
تم التبديل إلى استخدام LLD تلقائيًا في AOSP، وسيتم ذلك أيضًا في NDK
(لا يتوفّر جدول زمني). اختبِر الربط لصفحة في التطبيق في تطبيقك من خلال تمرير
-fuse-ld=lld
عند الربط. يُرجى العِلم أنّ المشكلة 843 ستؤثر في الإصدارات التي تستخدم LLD مع binutils strip وobjcopy بدلاً من llvm-strip وllvm-objcopy. -
ستتم إزالة مسارات تثبيت مجموعة الأدوات القديمة في الإصدارات القادمة. أصبحت هذه المسارات قديمة منذ الإصدار 19 من NDK، وتستهلك مساحة كبيرة في NDK. المسارات التي ستتم إزالتها هي:
- أنظمة أساسية
- sources/cxx-stl
- sysroot
- سلاسل الأدوات (باستثناء سلاسل الأدوات/llvm)
make_standalone_toolchain.py
(مع أنّ هذا النص البرمجي لم يعُد ضروريًا منذ الإصدار 19). للحصول على معلومات حول الترحيل من تنسيق سلسلة الأدوات القديمة، يُرجى الاطّلاع على دليل مشرفي نظام الإصدار لإصدار NDK الذي تستخدمه. - سيشترط "متجر Play" توفُّر إصدار 64 بت عند تحميل حزمة APK اعتبارًا من آب (أغسطس) 2019. ننصحك ببدء عملية النقل الآن لتجنُّب أي مفاجآت عند حلول الموعد النهائي. لمزيد من المعلومات، يُرجى الاطّلاع على منشور المدوّنة هذا.
- تتوفّر الآن حزمة تطبيقات macOS موقَّعة ومصدَّقة للتنزيل من موقعنا الإلكتروني وويكي. يُرجى العِلم أنّه بما أنّه لا يمكن استخدام مسارات RPATH واجتياز عملية التصديق إلا مع الحِزم، لا يمكن تصديق حزمة NDK التقليدية لنظام التشغيل macOS. ستواصل حزمة SDK استخدام الحزمة التقليدية لأنّ مجموعة حزمات التطبيق تتطلّب إجراء تغييرات في التصميم تجعلها غير متوافقة مع "استوديو Android". لا يتم عزل حزمة NDK عند تنزيلها من خلال "أداة إدارة حزمة SDK"، لذا يسمح بها Gatekeeper حاليًا. يُعدّ مدير حزمة SDK حاليًا الطريقة الأكثر موثوقية للحصول على NDK لنظام التشغيل macOS.
-
Android NDK r20b (يونيو 2019)
سجلّ التغيير- المحتوى الذي تم تنزيله
-
- يمكنك تنزيل هذا الإصدار هنا.
- الإشعارات
-
-
أصبحت LLD متاحة الآن للاختبار.
يعمل مشروع AOSP على التبديل إلى استخدام LLD تلقائيًا، وسيتم ذلك في NDK أيضًا (لا يتوفّر جدول زمني). اختبِر الربط لصفحة في التطبيق باستخدام
-fuse-ld=lld
عند الربط. - سيشترط "متجر Play" توفُّر إصدار 64 بت عند تحميل حزمة APK اعتبارًا من آب (أغسطس) 2019. ننصحك ببدء عملية النقل الآن لتجنُّب أي مفاجآت عند حلول الموعد النهائي. لمزيد من المعلومات، يُرجى الاطّلاع على منشور المدوّنة هذا.
- تمت إضافة واجهات برمجة تطبيقات Android Q.
-
أصبحت LLD متاحة الآن للاختبار.
يعمل مشروع AOSP على التبديل إلى استخدام LLD تلقائيًا، وسيتم ذلك في NDK أيضًا (لا يتوفّر جدول زمني). اختبِر الربط لصفحة في التطبيق باستخدام
Android NDK r19c (كانون الثاني/يناير 2019)
سجلّ التغيير- المحتوى الذي تم تنزيله
-
- يمكنك تنزيل هذا الإصدار هنا.
- الإشعارات
-
-
على المطوّرين بدء اختبار تطبيقاتهم باستخدام الربط المؤجَّل لصفحة معيّنة في التطبيق. تم التبديل في AOSP إلى استخدام LLD تلقائيًا، وسيتم استخدامها تلقائيًا في NDK في الإصدار التالي. ستتم إزالة BFD وGold بعد أن تمر LLD بدورة إصدار بدون مشاكل كبيرة لم يتم حلّها (الإصدار 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>
، وسيعثر عليها Clang تلقائيًا. بدلاً من إنشاء سلسلة أدوات مستقلة لإصدار ARM من واجهة برمجة التطبيقات 26، يمكنك استدعاء برنامج التجميع مباشرةً من NDK: بالنسبة إلى الإصدار 19، يتم أيضًا تثبيت مجموعة الأدوات في المسار القديم لمنح أنظمة الإنشاء فرصة للتكيّف مع التصميم الجديد. ستتم إزالة المسارات القديمة في الإصدار 20. لن تتم إزالة النص البرمجي$ $NDK/toolchains/llvm/prebuilt/
/bin/armv7a-linux-androideabi26-clang++ src.cpp make_standalone_toolchain.py
. أصبح هذا الإجراء غير ضروري وسيظهر تحذير يتضمّن المعلومات المذكورة أعلاه، ولكن سيتم الاحتفاظ بالنص البرمجي للحفاظ على سير العمل الحالي. إذا كنت تستخدم ndk-build أو CMake أو مجموعة أدوات مستقلة، لن يحدث أي تغيير في سير عملك. هذا التغيير مهم لمشرفي أنظمة الإنشاء التابعة لجهات خارجية، إذ سيصبح بإمكانهم الآن حذف بعض الرموز البرمجية الخاصة بنظام Android. لمزيد من المعلومات، يمكنك الاطّلاع على دليل المشرفين على أنظمة الإنشاء. - تمت إزالة ndk-depends. نعتقد أنّ ReLinker هو حلّ أفضل لمشاكل تحميل المكتبات الأصلية على إصدارات Android القديمة.
- المشكلة 862: تمت إزالة نصوص GCC البرمجية التي أعادت التوجيه إلى Clang، لأنّها لا تعمل بشكل كافٍ لتكون بدائل جاهزة للاستخدام.
-
على المطوّرين بدء اختبار تطبيقاتهم باستخدام الربط المؤجَّل لصفحة معيّنة في التطبيق. تم التبديل في AOSP إلى استخدام LLD تلقائيًا، وسيتم استخدامها تلقائيًا في NDK في الإصدار التالي. ستتم إزالة BFD وGold بعد أن تمر LLD بدورة إصدار بدون مشاكل كبيرة لم يتم حلّها (الإصدار r21 المقدَّر). اختبِر
LLD في تطبيقك عن طريق تمرير
Android NDK r18b (سبتمبر 2018)
سجلّ التغيير- المحتوى الذي تم تنزيله
-
- يمكنك تنزيل هذا الإصدار هنا.
- الإشعارات
-
- تمت إزالة GCC.
-
أصبحت LLD متاحة الآن للاختبار.
يعمل مشروع AOSP على التبديل إلى استخدام LLD تلقائيًا، وسيتم ذلك في NDK أيضًا (لا يتوفّر جدول زمني). اختبِر الربط لصفحة في التطبيق باستخدام
-fuse-ld=lld
عند الربط. - تمت إزالة gnustl وgabi++ وstlport.
- تمت إزالة دعم ICS (الإصداران 14 و15 من نظام التشغيل Android). لم تعُد التطبيقات التي تستخدم ملفات تنفيذية بحاجة إلى توفير ملف تنفيذي متوافق مع PIE وغير متوافق معه.
- سيشترط "متجر Play" توفُّر إصدار 64 بت عند تحميل حزمة APK اعتبارًا من آب (أغسطس) 2019. ننصحك ببدء عملية النقل الآن لتجنُّب أي مفاجآت عند حلول الموعد النهائي. لمزيد من المعلومات، يُرجى الاطّلاع على منشور المدوّنة هذا.
Android NDK r17c (يونيو 2018)
سجلّ التغيير- المحتوى الذي تم تنزيله
-
- يمكنك تنزيل هذا الإصدار هنا.
- الإشعارات
-
- لم يعُد GCC متاحًا. ستتم إزالتها في الإصدار 18 من حزمة تطوير البرامج الأصلية (NDK).
-
أصبحت libc++ الآن مكتبة قوالب STL التلقائية لكل من CMake وسلاسل الأدوات المستقلة. إذا اخترت يدويًا تنسيق STL مختلفًا، ننصحك بشدة بالانتقال إلى
libc++
. يُرجى العِلم أنّ ndk-build لا يزال يستخدم STL تلقائيًا. للحصول على مزيد من التفاصيل، يمكنك الاطّلاع على مشاركة المدونة هذه. - تم إيقاف gnustl وstlport نهائيًا وستتم إزالتهما في الإصدار 18 من حزمة تطوير البرامج الأصلية (NDK).
- تمت إزالة إمكانية استخدام ARMv5 (armeabi) وMIPS وMIPS64. وستؤدي محاولة إنشاء أي من واجهات التطبيق الثنائية هذه إلى حدوث خطأ.
- ستتم إزالة دعم ICS (android-14 وandroid-15) من الإصدار r18.
- سيشترط "متجر Play" توفُّر إصدار 64 بت عند تحميل حزمة APK اعتبارًا من آب (أغسطس) 2019. ننصحك ببدء عملية النقل الآن لتجنُّب أي مفاجآت عند حلول الموعد النهائي. لمزيد من المعلومات، يُرجى الاطّلاع على منشور المدوّنة هذا.
Android NDK r16b (كانون الأول/ديسمبر 2017)
سجلّ التغيير- المحتوى الذي تم تنزيله
- يمكنك تنزيل هذا الإصدار هنا.
- الإشعارات
-
- تمت إزالة العناوين المتوقّفة نهائيًا. أصبحت العناوين الموحّدة تُعرف ببساطة باسم "العناوين". للحصول على نصائح بشأن نقل البيانات، يُرجى الاطّلاع على ملاحظات حول نقل البيانات إلى "العناوين الموحّدة".
- لم يعُد GCC متاحًا. لن تتم إزالته من حزمة تطوير البرامج الأصلية (NDK) في الوقت الحالي، ولكن لن يتم توفير إصدارات متوافقة مع الإصدارات القديمة منه. ولا يمكن إزالته إلا بعد أن يصبح libc++ مستقرًا بما يكفي ليكون الإعداد التلقائي، لأنّ بعض أجزاء gnustl لا تزال غير متوافقة مع Clang. ستتم إزالته عند إزالة ملفات STL الأخرى في الإصدار 18.
- تمت إزالة علامة الإصدار التجريبي عن
libc++
، وأصبحت الآن مكتبة STL المفضّلة في حزمة NDK. بدءًا من الإصدار 17،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 في NDK الآن إنشاء رمز تجميع مكتوب بلغة YASM لتشغيله على بنية x86 وx86-64. لمزيد من المعلومات، يُرجى الاطّلاع على إنشاء رمز تجميع.
ملاحظة: ستتم إزالة العناوين التي تم إيقافها نهائيًا في إصدار قادم. إذا واجهت أي مشاكل في هذه العناوين، يُرجى الإبلاغ عن خطأ.
للحصول على نصائح بشأن نقل البيانات، راجِع ملاحظات نقل البيانات الخاصة بالعناوين الموحّدة.
- واجهات برمجة التطبيقات
-
تمت إضافة واجهات برمجة تطبيقات أصلية لنظام التشغيل Android 8.0. لمزيد من المعلومات حول واجهات برمجة التطبيقات هذه، يُرجى الاطّلاع على نظرة عامة على واجهات برمجة التطبيقات الأصلية.
للحصول على معلومات إضافية حول الميزات الجديدة والتغييرات في هذا الإصدار، يُرجى الاطّلاع على سجلّ التغيير.
الإصدار r14b من حزمة تطوير البرامج الأصلية (NDK) لنظام التشغيل Android (آذار/مارس 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 من الأداة. وهناك بعض الاختلافات السلوكية. يمكنك الاطّلاع على رسالة الالتزام للحصول على التفاصيل. - تمت إزالة بعض المكتبات الخاصة بواجهات التطبيق الثنائية غير المتوافقة (mips64r2 وmips32r6 وmips32r2 وx32). قد لا يزال هناك بعض المستخدمين الذين لم يتم نقلهم.
- تم حل المشاكل المتعلقة بملف crtbegin_static.o التي أدّت إلى عدم توفّر atexit في وقت الربط عند إنشاء ملف تنفيذي ثابت لنظام التشغيل Android 21 والإصدارات الأحدث على أجهزة ARM: المشكلة 132
- تمت إضافة ملف مجموعة أدوات CMake في build/cmake/android.toolchain.cmake.
- أصبحت
- المشاكل المعروفة
-
- هذه القائمة ليست شاملة لجميع الأخطاء المعلقة.
- لا تعمل سلاسل الأدوات المستقلة التي تستخدم libc++ وGCC. يبدو أنّ هذا خطأ في GCC. يمكنك الاطّلاع على رسالة التثبيت لمزيد من التفاصيل.
- لم يتم بعد عرض عناوين ومكتبات Bionic لنظامَي التشغيل Marshmallow وN، على الرغم من توفّر android-24. لا تزال هذه المنصات تستخدم عناوين ومكتبات Lollipop (وهذا ليس تراجعًا عن الإصدار 11).
- أدوات RenderScript غير متوفّرة (ليست مشكلة متكرّرة من الإصدار 11): المشكلة 7.
Android NDK r12b (يونيو 2016)
- المحتوى الذي تم تنزيله
- تمت أرشفة عمليات التنزيل لهذا الإصدار هنا.
- الإشعارات
- يتم تلقائيًا استخدام Clang في الإصدار 13 من الأمر
ndk-build
. سنزيل GCC في إصدار لاحق. - ستتم إزالة النص البرمجي
make-standalone-toolchain.sh
في الإصدار 13. تأكَّد من أنّmake_standalone_toolchain.py
يناسب احتياجاتك. - يمكنك الإبلاغ عن المشاكل في GitHub.
- لقد أصلحنا
ndk-gdb.py
. (العدد 118) -
لقد عدّلنا
NdkCameraMetadataTags.h
لكي لا يحتوي على قيمة تعداد غير صالحة. - تم إصلاح خطأ في ndk-build كان يؤدي إلى ظهور تحذيرات غير صحيحة للمكتبات الثابتة التي تستخدم libc++. لمزيد من المعلومات حول هذا التغيير، يُرجى الاطّلاع على التعليقات هنا.
- تم تعديل عناوين OpenSLES لإصدار Android 24.
- NDK
- أزلنا إمكانية استخدام واجهة التطبيق الثنائية (ABI) التي تتوافق مع armeabi-v7a-hard. لمزيد من المعلومات، اطّلِع على هذا الشرح.
- تمت إزالة جميع sysroot لمستويات النظام الأساسي السابقة لإصدار GB. وقد أوقفنا إتاحتها في الإصدار 11، ولكننا لم نزِلها فعليًا.
- أصبحت معالجة الاستثناءات عند استخدام c++_shared على ARM32 تعمل الآن في معظم الحالات. سيتم الآن ربط أداة فك التشفير بكل عنصر مرتبط بدلاً من ربطها بـ libc++ نفسها. لمزيد من المعلومات حول معالجة الاستثناءات هذه، يُرجى الاطّلاع على المشاكل المعروفة.
- تم تقليل عدد علامات المترجم التلقائية.
(العدد 27)
- للحصول على معلومات كاملة حول هذه التغييرات، يُرجى الاطّلاع على قائمة التغييرات هذه.
- تمت إضافة تنفيذ Python لسلاسل الأدوات المستقلة:
build/tools/make_standalone_toolchain.py
.- لم يعُد مستخدمو Windows بحاجة إلى Cygwin لاستخدام هذه الميزة.
- سنزيل إصدار bash في الإصدار 13، لذا ننصحك بتجربة الإصدار الجديد الآن.
- تم تفعيل
-fno-limit-debug-info
تلقائيًا لإصدارات تصحيح الأخطاء في Clang. من المفترض أن يحسّن هذا التغيير إمكانية تصحيح الأخطاء باستخدام LLDB. - تم الآن تفعيل
--build-id
تلقائيًا.- سيظهر معرّف الإصدار الآن في تقارير الأعطال الأصلية حتى تتمكّن من تحديد إصدار الرمز الذي كان يتم تنفيذه بسهولة.
- من المفترض ألا يتسبب
NDK_USE_CYGPATH
في حدوث مشاكل في libgcc بعد الآن. (Android المشكلة 195486) - تم الآن تفعيل الخيارات
-Wl
و--warn-shared-textrel
و-Wl,--fatal-warnings
تلقائيًا. إذا كانت لديك عمليات نقل نصية مشترَكة، لن يتمكّن تطبيقك من التحميل على الإصدار 6.0 من نظام التشغيل Android (المستوى 23 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث. لم يُسمح مطلقًا بنقل النص في التطبيقات التي تعمل بالإصدار 64 بت. - من المفترض أن تعمل العناوين المسبقة التجميع بشكل أفضل. (العدد 14 والعدد 16)
- تمت إزالة مكتبات STL غير القابلة للوصول إلى ARM (غير المصغّرة).
- تمت إضافة دعم Vulkan إلى android-24.
- تمت إضافة واجهة برمجة التطبيقات Choreographer إلى android-24.
- تمت إضافة واجهات برمجة التطبيقات
libcamera2
للأجهزة التي تعمل بالإصدارINFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
أو الإصدارات الأحدث. لمزيد من المعلومات، يُرجى الاطّلاع على خصائص الكاميرا. - Clang
- تم تعديل Clang إلى الإصدار 3.8svn (r256229، الإصدار 2812033).
- إنّ الملفات التنفيذية
clang.exe
وclang++.exe
في حزمة Windows ذات 32 بت هي في الواقع 64 بت. اسم الملف التنفيذي لنظام 32 بت هوclang_32.exe
.
من المفترض أن ينجح ذلك هذه المرة. - إنّ الملفات التنفيذية
- GCC
- تمت المزامنة مع ChromeOS GCC @ google/gcc-4_9 r227810.
- تم نقل تصحيح أداة تنظيف التغطية من ToT (الإصدار 231296).
- تم إصلاح libatomic لكي لا تستخدم
ifuncs
. (المشكلة 31) - Binutils
- تم إيقاف رسائل المعلومات "تم العثور على الخطأ 843419 وإصلاحه".
- تمت إضافة الخيار
--long-plt
لإصلاح خطأ داخلي في أداة الربط يحدث عند ربط ملفات ثنائية كبيرة بتنسيق arm32. - تم إصلاح جذوع وقت التشغيل غير الصحيحة لنظام AArch64. وقد كان ذلك يؤدي إلى احتساب عناوين القفز بشكل غير صحيح في أنظمة DSO الكبيرة جدًا.
- تم تقديم الخيار التلقائي
--no-apply-dynamic
لحلّ مشكلة في أداة الربط الديناميكية في إصدارات Android السابقة. - لا يعمل NDK r11 KI للإصدار
dynamic_cast
مع Clang. لقد أصلحنا المشاكل المتعلّقة بمعمارية x86 وstlport_static
والتحسين. - GDB
- تم التحديث إلى الإصدار 7.11 من GDB. لمزيد من المعلومات، يُرجى الاطّلاع على صفحة أخبار "قاعدة بيانات Google".
- إصلاح بعض الأخطاء في
ndk-gdb.py
- المشاكل المعروفة
- لا يزال x86 ASAN لا يعمل. لمزيد من المعلومات، راجِع المناقشة حول قائمة التغييرات هذه.
- لا يزال إلغاء تفعيل معالجة الاستثناءات باستخدام
c++_shared
لا يعمل مع ARM على الإصدار 2.3 من نظام التشغيل Android (المستوى 9 من واجهة برمجة التطبيقات) أو الإصدار 4.0 (المستوى 14 من واجهة برمجة التطبيقات). - لم يتم بعد عرض عناوين ومكتبات Bionic لنظام التشغيل Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) وAndroid 7.0 (المستوى 24 من واجهة برمجة التطبيقات)، وذلك على الرغم من توفّر android-24. لا تزال هذه المنصات هي رؤوس ومكتبات Android 5.0 (المستوى 21 لواجهة برمجة التطبيقات) (وهذا ليس تراجعًا عن الإصدار 11).
- أدوات 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. يمكنك الاطّلاع على الشرح في المستندات.
- تمت إزالة جميع sysroot لمستويات النظام الأساسي قبل Android 2.3 (المستوى 9 من واجهة برمجة التطبيقات). أوقفنا إتاحتها في الإصدار 11 من حزمة تطوير البرامج الأصلية (NDK)، ولكننا لم نتمكّن من إزالتها فعليًا.
- تم تعديل معالجة الاستثناءات عند استخدام c++_shared على ARM32 لكي تعمل بشكل جيد (راجِع المشاكل المعروفة). أصبح بإمكانك الآن ربط أداة فك التشفير بكل عنصر مرتبط بدلاً من ربطها بـ libc++ نفسها.
- تم حذف علامات المحول البرمجي التلقائية (المشكلة 27 في NDK). يمكنك الاطّلاع على تفاصيل هذا التعديل في التغيير 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
. إذا كنت قد شاركت عمليات نقل نصية، لن يتم تحميل تطبيقك على الإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات) والإصدارات الأحدث. يُرجى العِلم أنّه لم يُسمح مطلقًا بهذا الإعداد للتطبيقات المتوافقة مع 64 بت. - تم إصلاح بعض المشاكل لتعمل العناوين المسبقة التجميع بشكل أفضل (المشكلة رقم 14 في حزمة تطوير البرامج الأصلية (NDK)، المشكلة رقم 16 في حزمة تطوير البرامج الأصلية (NDK)).
- تمت إزالة مكتبات STL غير القابلة للوصول إلى ARM (غير المصغّرة).
- تمت إضافة دعم Vulkan إلى android-24.
- تمت إضافة واجهة برمجة التطبيقات Choreographer إلى android-24.
- تمت إضافة واجهات برمجة تطبيقات libcamera2 للأجهزة التي تتوافق مع مستوى الميزة
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
أو مستوى أعلى. لمزيد من المعلومات، راجِعCameraCharacteristics
. - Clang
- تم تعديل Clang إلى الإصدار 3.8svn (r256229، الإصدار 2812033). إنّ الملفات التنفيذية
clang.exe
وclang++.exe
في حزمة Windows ذات 32 بت هي في الواقع 64 بت. اسم الملف التنفيذي المتوافق مع نظام التشغيل 32 بت هوclang_32.exe
. - تم إصلاح
__thread
ليعمل بشكل صحيح هذه المرة. - GCC
- تمت مزامنة المترجم مع ChromeOS GCC @ google/gcc-4_9 r227810.
- تم نقل تصحيح أداة تنظيف التغطية من ToT (الإصدار 231296).
- تم إصلاح
libatomic
لعدم استخدام ifuncs (المشكلة 31 في NDK). - Binutils
- تم إيقاف رسائل المعلومات "تم العثور على الخطأ المطبعي 843419 وإصلاحه".
- تمت إضافة الخيار
--long-plt
لإصلاح خطأ داخلي في أداة الربط عند ربط ملفات ثنائية كبيرة بتنسيق arm32. - تم إصلاح رموز وقت التشغيل غير الصحيحة في
AArch64
. كانت هذه المشكلة تتسبّب في احتساب عناوين القفز بشكل غير صحيح لكائنات مشتركة ديناميكية (DSO) كبيرة جدًا. - تم تقديم الخيار التلقائي
--no-apply-dynamic
لتجنُّب خطأ في أداة الربط الديناميكية في إصدارات Android السابقة. - تم إصلاح مشكلة معروفة في NDK r11 حيث لم يكن
dynamic_cast
يعمل مع Clang وx86 وstlport_static والتحسين. - GDB
- تم التحديث إلى الإصدار 7.11 من GDB. لمزيد من المعلومات حول هذا الإصدار، يُرجى الاطّلاع على أخبار GDB.
- تم إصلاح عدد من الأخطاء في النص البرمجي
ndk-gdb.py
. - المشاكل المعروفة
- لا يعمل حاليًا Address Sanitizer (ASAN) لنظام التشغيل x86. لمزيد من المعلومات، يُرجى الاطّلاع على المشكلة 186276.
- لا يعمل إلغاء تفعيل معالجة الاستثناءات باستخدام
c++_shared
على معالجات ARM في الإصدار 2.3 من نظام التشغيل Android (المستوى 9 من واجهة برمجة التطبيقات) أو الإصدار 4.0 (المستوى 14 من واجهة برمجة التطبيقات). - لم يتم بعد عرض عناوين ومكتبات Bionic لنظام التشغيل Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) والإصدارات الأحدث، وذلك على الرغم من توفّر android-24. لا تزال هذه المنصات تتضمّن العناوين والمكتبات الخاصة بالإصدار 5.0 من نظام التشغيل Android (المستوى 21 من واجهة برمجة التطبيقات)، وهو ما يتوافق مع الإصدار 11 من حزمة تطوير البرامج الأصلية (NDK).
- أدوات RenderScript غير متوفّرة، وهو ما يتوافق مع NDK r11. (المشكلة 7 في حزمة تطوير البرامج الأصلية)
- في ملف العنوان
NdkCameraMetadataTags.h
، تم إدراج قيمة التعداد الخاصة بعلامة بيانات الكاميرا الوصفيةACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP
عن طريق الخطأ، وسيتم إزالتها في الإصدار التالي. استخدِم القيمةACAMERA_STATISTICS_LENS_SHADING_MAP
بدلاً من ذلك.
Android NDK r11c (مارس 2016)
- التغييرات
- تم تطبيق إصلاحات إضافية على النص البرمجي
ndk-gdb.py
. - تمت إضافة وسيط اسم حزمة اختياري إلى خيار
--attach
للأمرndk-gdb
. (المشكلة 13) - تم إصلاح مسارات مجموعة الأدوات غير الصالحة لمنصة Windows ذات 32 بت. (العدد 45)
- تم إصلاح المسار النسبي للأمر
ndk-which
. (العدد 29) - تم إصلاح استخدام cygpath لمترجم libgcc. (المشكلة 195486 في Android)
Android NDK r11b (مارس 2016)
- NDK
-
- الإشعارات المهمة
- نقلنا أداة تتبُّع الأخطاء إلى GitHub.
- التغييرات
- تم إصلاح الخطأ
ndk-gdb.py
. وقد تراجع الأداء تمامًا في الإصدار 11. - تم إصلاح مشكلة
ndk-gdb
في نظام التشغيل Mac . - تمت إضافة المزيد من الاختصارات ذات المستوى الأعلى لأدوات سطر الأوامر:
ndk-depends
.ndk-gdb
.ndk-stack
.ndk-which
. لم يكن هذا الأمر متاحًا في الإصدارات السابقة.
- تم إصلاح سلاسل الأدوات المستقلة الخاصة بـ libc++ التي كانت مفقودة
__cxxabi_config.h
. - تم إصلاح مستندات المساعدة الخاصة بالسمة
--toolchain
فيmake-standalone-toolchain.sh
.
- تم إصلاح الخطأ
- الإشعارات المهمة
- Clang
-
- الأخطاء المطبعية
- على عكس ما ذكرناه في ملاحظات الإصدار r11، لا تعمل السمة
__thread
. ويرجع ذلك إلى أنّ إصدار Clang الذي نقدّمه لا يتضمّن إصلاحًا لخطأ في دعم طبقة النقل الآمنة المحاكية.
Android NDK r11 (مارس 2016)
- Clang
-
- الإشعارات المهمة
- ننصحك بشدة بالتبديل إلى Clang.
- إذا واجهت مشاكل في Clang، يمكنك الإبلاغ عن الأخطاء هنا بشأن المشاكل الخاصة بـ Clang في NDK. لمزيد من المعلومات حول المشاكل العامة في Clang، يمكنك الإبلاغ عن الأخطاء باتّباع التعليمات الواردة في هذه الصفحة.
- تم تحديث Clang إلى الإصدار 3.8svn (الإصدار 243773، الإصدار 2481030).
- هذا الإصدار هو إصدار Clang أصلي تقريبًا.
- تحتوي حزمة NDK القابلة للتنزيل التي تعمل بنظام التشغيل Windows 64 بت على إصدار 32 بت من Clang.
- ننصحك بشدة بالتبديل إلى Clang.
- الإضافات
- يتوافق Clang الآن مع بروتوكول أمان طبقة النقل (TLS) المحاكى.
- يتوافق المترجم الآن مع
__thread
من خلال محاكاة ELF TLS باستخدام بيانات خاصة بخيوط pthread. - تعمل C++11
thread_local
في بعض الحالات، ولكن ليس مع البيانات التي تتضمّن دوالاً مدمرة غير بسيطة، لأنّ هذه الحالات تتطلّب توفّر دعم من libc. ولا ينطبق هذا القيد عند التشغيل على الإصدار 6.0 من نظام التشغيل Android (المستوى 23 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث. - لا يعمل بروتوكول أمان طبقة النقل (TLS) المحاكى بعد مع Aarch64 عند الوصول إلى متغيرات بروتوكول أمان طبقة النقل (TLS) من مكتبة مشترَكة.
- يتوافق المترجم الآن مع
- يتوافق Clang الآن مع بروتوكول أمان طبقة النقل (TLS) المحاكى.
- الإشعارات المهمة
- GCC
-
- إشعارات مهمة
- تم الآن إيقاف GCC نهائيًا في NDK لصالح Clang.
- لن تتم ترقية NDK إلى الإصدار 5.x، ولن يتم قبول عمليات نقل غير مهمة من الإصدارات الأقدم.
- سيتم التعامل مع عمليات الصيانة المتعلقة بالأخطاء في الترجمة البرمجية والأخطاء الداخلية في المترجم البرمجي في الإصدار 4.9 على أساس كل حالة على حدة.
- عمليات الإزالة
- تمت إزالة GCC 4.8. تستخدم جميع الاستهدافات الآن GCC 4.9.
- تغييرات أخرى
- تمت مزامنة google/gcc-4_9 مع r224707. في السابق، كان متزامنًا مع المراجعة r214835.
- NDK
-
- الإشعارات المهمة
- لم تعُد النماذج مضمّنة في حزمة NDK. بدلاً من ذلك، تتوفّر على GitHub.
- لم يعُد يتم تضمين المستندات في حزمة NDK. بدلاً من ذلك، يمكنك العثور عليه على الموقع الإلكتروني لمطوّري تطبيقات Android.
- الإضافات
- تمت إضافة واجهة برمجة تطبيقات تتبُّع أصلية إلى
android-23
. - تمت إضافة واجهة برمجة تطبيقات أصلية متعددة الشبكات إلى
android-23
. - تم تفعيل libc وm وdl لتوفير رموز ذات إصدارات، بدءًا من المستوى 21 لواجهة برمجة التطبيقات.
- تمت إضافة عناوين ومكتبة Vulkan إلى مستوى واجهة برمجة التطبيقات N.
- تمت إضافة واجهة برمجة تطبيقات تتبُّع أصلية إلى
- عمليات الإزالة
- تمت إزالة إمكانية استخدام
_WCHAR_IS_8BIT
. - تمت إزالة sed.
- تمت إزالة mclinker.
- تمت إزالة Perl.
- تمت إزالة جميع الرموز التي لا تتوافق مع إصدارات النظام الأساسي من مكتبات libc وm وdl في جميع إصدارات NDK.
- تمت إزالة التوافق مع mips64r2 جزئيًا. وستتم إزالة الباقي في المستقبل.
- تمت إزالة إمكانية استخدام
- تغييرات أخرى
- تم تغيير سلاسل أدوات ARM المستقلة إلى arm7 تلقائيًا.
- يمكنك استعادة السلوك القديم من خلال تمرير الخيار
-target
بالقيمةarmv5te-linux-androideabi
.
- يمكنك استعادة السلوك القديم من خلال تمرير الخيار
- تم تغيير نظام الإصدار لاستخدام
-isystem
لتضمين الأنظمة الأساسية.- لن تؤدي التحذيرات التي لا تتسبّب فيها مكتبة bionic إلى إيقاف عمليات إنشاء التطبيقات.
- تم إصلاح خطأ تقسيم حدث عند طرح ثنائي استثناءات عبر gabi++. (المشكلة 179410)
- تم تغيير مساحة الاسم المضمّنة في libc++ إلى
std::__ndk1
لمنع حدوث مشاكل في قاعدة تعريف الاستخدام الواحد (ODR) مع libc++ الأساسية. - يتم الآن إنشاء جميع مكتبات libc++ باستخدام libc++abi.
- تمت زيادة مستوى
APP_PLATFORM
التلقائي إلى Gingerbread.- من المتوقّع أن يتم إيقاف الإصدارات Froyo والأقدم في إصدار مستقبلي.
- تم تغيير سلاسل أدوات ARM المستقلة إلى arm7 تلقائيًا.
- تم تعديل بنية gabi++
_Unwind_Exception
لتتوافق مع 64 بت. - تمت إضافة الإمكانات التالية إلى cpufeatures:
- اكتشاف SSE4.1 وSSE4.2
- رصد ميزات وحدة المعالجة المركزية على 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 لمزيد من المعلومات حول هذا التغيير، يمكنك الاطّلاع على التعليقات هنا.
- تم تحسين موثوقية Gold لنظام التشغيل aarch64. استخدِم
-fuse-ld=gold
في وقت الربط لاستخدام gold بدلاً من bfd. من المرجّح أن يتم التبديل إلى الإعداد التلقائي في الإصدار التالي. - تم تحسين وقت الربط للملفات الثنائية الكبيرة في Gold ARM back end (انخفاض وقت الربط بنسبة تصل إلى% 50 لمتصفّح Chrome الذي يمكن تصحيح أخطائه).
- الإضافات
- GDB
-
- عمليات الإزالة
- تمت إزالة ndk-gdb واستخدام ndk-gdb.py بدلاً منه.
- التغييرات
- تم تحديث gdb إلى الإصدار 7.10.
- تحسين الأداء
- رسائل خطأ محسَّنة
- تم إصلاح مسارات المشاريع النسبية.
- تم إيقاف Ctrl-C من إيقاف gdbserver الذي يعمل في الخلفية.
- تحسين التوافق مع نظام التشغيل Windows
- عمليات الإزالة
- YASM
-
- التغييرات
- تم تحديث YASM إلى الإصدار 1.3.0.
- التغييرات
- المشاكل المعروفة
-
- لا يعمل x86 ASAN حاليًا. لمزيد من المعلومات، اطّلِع على المناقشة هنا.
- يؤدي الجمع بين Clang وx86 وstlport_static ومستويات التحسين الأعلى من
-O0
إلى حدوث أخطاء في الاختبارات معdynamic_cast
. لمزيد من المعلومات، اطّلِع على التعليقات هنا. - غالبًا ما يتعذّر التعامل مع الاستثناءات باستخدام c++_shared على ARM32. السبب الجذري هو عدم التوافق بين أداة LLVM unwinder التي تستخدمها libc++abi مع ARM32 وlibgcc. هذا السلوك ليس تراجعًا عن الإصدار r10e.
الإصدار 10e من Android NDK (مايو 2015)
- المحتوى الذي تم تنزيله
- تمت أرشفة عمليات التنزيل لهذا الإصدار هنا.
- التغييرات المهمة:
-
- تم دمج الحلّ البديل لخطأ Cortex-A53 Erratum 843419 في أداة الربط
aarch64-linux-android-4.9
. لمزيد من المعلومات حول هذا الحلّ البديل، يُرجى الاطّلاع على الحلّ البديل للخطأ 843419 في Cortex-A53. - تمت إضافة Clang 3.6، ويختار
NDK_TOOLCHAIN_VERSION=clang
الآن هذه النسخة من Clang تلقائيًا. - تمت إزالة Clang 3.4.
- تمت إزالة GCC 4.6.
- تمّت إضافة إمكانية استخدام سلاسل محادثات متعدّدة في
ld.gold
لجميع البِنى. يمكن الآن ربطها مع إتاحة استخدام عدة سلاسل محادثات أو بدون إتاحة ذلك، ويتم الربط بدون إتاحة ذلك تلقائيًا.- للتجميع باستخدام ميزة "تعدّد مؤشرات الترابط"، استخدِم الخيار
--threads
. - للتجميع بدون استخدام سلاسل التعليمات المتعددة، استخدِم الخيار
--no-threads
.
- للتجميع باستخدام ميزة "تعدّد مؤشرات الترابط"، استخدِم الخيار
- تمت ترقية GDB/gdbserver إلى الإصدار 7.7 لجميع البِنى.
- تمت إزالة حزمة NDK لنظام التشغيل Darwin ذي 32 بت.
- تم دمج الحلّ البديل لخطأ Cortex-A53 Erratum 843419 في أداة الربط
- إصلاحات مهمة للأخطاء:
-
- تم إصلاح عُطل كان يحدث عند توفّر حلقات OpenMP خارج سلسلة التعليمات الرئيسية.
- تم إصلاح خطأ داخلي في برنامج التجميع (ICE) في GCC 4.9 حدث عندما حدّد المستخدم
#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
. - تم إصلاح تحذير خاطئ بشأن حدود المصفوفة كان الإصدار 4.9 من GCC يعرضه على x86، وتمت إعادة تفعيل التحذير بشأن حدود المصفوفة الذي كان الإصدار 4.9 من GCC يعرضه على 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
. لمزيد من المعلومات، يُرجى الاطّلاع على المشكلة رقم 20098 في LLVM. - تم إصلاح الأعطال في Clang 3.5 التي حدثت بسبب التعليقات التي تتضمّن أحرفًا غير ASCII. (المشكلة 81440)
- تم تعديل
stlport collate::compare
لعرض-1
و1
. في السابق، كان يعرض أرقامًا عشوائية موقعة. - تم إصلاح
ndk-gdb
لواجهات التطبيق الثنائية 64 بت. (المشكلة 118300) - تم إصلاح الخطأ الذي كان يتسبّب في تعطُّل نموذج HelloComputeNDK الخاص بـ RenderScript على الإصدار 4.4 من نظام التشغيل Android (المستوى 19 من واجهة برمجة التطبيقات). لمزيد من المعلومات، يُرجى الاطّلاع على هذه الصفحة.
- تم إصلاح الخطأ
libc++ __wrap_iter
في دول مجلس التعاون الخليجي. لمزيد من المعلومات، يُرجى الاطّلاع على المشكلة رقم 22355 في LLVM. - تم إصلاح مشكلة عدم التوافق مع واجهة التطبيق الثنائية (ABI)
x86_64
بحلول .asm
. - تم تنفيذ حلّ بديل لمشكلة
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
بـ-fstack-protector-strong
في سلاسل أدوات ARM وAArch64 وX86 وX86_64 لإصدارات GCC 4.9 وClang 3.5 وClang 3.6. - تمت إضافة خيار سطر الأوامر
--package
إلىndk-gdb
للسماح لنظام الإنشاء بتجاوز اسم الحزمة. (المشكلة 56189) - تم إيقاف
-mno-ldc1-stc1
نهائيًا في MIPS. قد لا يعمل هذا الخيار مع الخيارَين الجديدَين-fpxx
و-mno-odd-spreg
، أو مع FPXX ABI. - تمت إضافة ميزة رصد MIPS MSA وR6 إلى
cpu-features
.
- تمت إضافة
Android NDK r10d (ديسمبر 2014)
- التغييرات المهمة:
-
- تم ضبط GCC 4.8 كإعداد تلقائي لجميع واجهات التطبيق الثنائية (ABI) ذات 32 بت. تم إيقاف GCC 4.6 نهائيًا،
وسيتم إزالته في الإصدار التالي. لاستعادة السلوك السابق، أضِف
NDK_TOOLCHAIN_VERSION=4.6
إلى ndk-build، أو أضِف--toolchain=arm-linux-androideabi-4.6
عند تنفيذmake-standalone-toolchain.sh
على سطر الأوامر. سيظل الإصدار 4.9 من GCC هو الإصدار التلقائي لواجهات التطبيق الثنائية (ABI) التي تعمل بنظام 64 بت. - تم إيقاف جميع سلاسل أدوات x86[_64] من إضافة
-mstackrealign
تلقائيًا. يفترض سلسلة أدوات NDK محاذاة المكدس بمقدار 16 بايت. تفرض الأدوات والخيارات المستخدَمة تلقائيًا هذه القاعدة. على المستخدم الذي يكتب رمز تجميع التأكّد من الحفاظ على محاذاة المكدّس، والتأكّد من أنّ برامج التجميع الأخرى تلتزم أيضًا بهذه القاعدة. (خطأ GCC 38496) - تمت إضافة وظيفة Address Sanitizer إلى الإصدار 3.5 من Clang لتتوافق مع واجهات التطبيق الثنائية ARM وx86. لمزيد من المعلومات حول هذا التغيير، يُرجى الاطّلاع على مشروع Address Sanitizer.
- تم طرح شرط استخدام
-fPIE -pie
عند الإنشاء، وذلك بدءًا من مستوى واجهة برمجة التطبيقات 21. في المستوى 16 لواجهة برمجة التطبيقات والإصدارات الأحدث، يستخدم ndk-buildPIE
عند الإنشاء. يترتّب على هذا التغيير عدد من الآثار التي تم تناولها في العدد 888 من "معاينة المطوّر". لا تنطبق هذه الآثار على المكتبات المشتركة.
- تم ضبط GCC 4.8 كإعداد تلقائي لجميع واجهات التطبيق الثنائية (ABI) ذات 32 بت. تم إيقاف GCC 4.6 نهائيًا،
وسيتم إزالته في الإصدار التالي. لاستعادة السلوك السابق، أضِف
- إصلاحات مهمة للأخطاء:
-
- تم إجراء المزيد من الإصلاحات المتعلّقة
بالخطأ المطبعي رقم 835769 في A53 في برنامج الربط aarch64-linux-android-4.9. في إطار ذلك، تمرِّر GCC خيارًا جديدًا، وهو
--fix-cortex-a53-835769
، عند تحديد-mfix-cortex-a53-835769
(مفعَّل تلقائيًا). لمزيد من المعلومات، يُرجى الاطّلاع على رسالة binutils ورسالة binutils. - تم توثيق إصلاح لتعليق
sscanf/vsscanf
في libc++ حدث في المستوى 21 من واجهة برمجة التطبيقات. تم تنفيذ الإصلاح نفسه في الإصدار r10c. (المشكلة 77988) - تم إصلاح عُطل في AutoFDO (
-fauto-profile
) حدث مع GCC 4.9 عند تحديد-Os
. (المشكلة 77571)
- تم إجراء المزيد من الإصلاحات المتعلّقة
بالخطأ المطبعي رقم 835769 في A53 في برنامج الربط aarch64-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
. - تم إصلاح طريقة تعامل ndk-build مع
thumb
فيLOCAL_ARM_MODE
: في الإصدار r10d، يضيف ndk-build السمةLOCAL_LDFLAGS+=-mthumb
تلقائيًا، ما لم ينطبق أحد الشروط التالية: - لقد ضبطت
LOCAL_ARM_MODE
علىarm
. - أنّك بصدد إنشاء إصدار تصحيح أخطاء (مع إعدادات مثل
APP_OPTIM=debug
وAndroidManifest.xml
التي تتضمّنandroid:debuggable="true"
)، حيث يكون وضع ARM هو الوضع التلقائي من أجل الحفاظ على التوافق مع سلاسل الأدوات السابقة. (المشكلة 74040) - تم إصلاح
LOCAL_SRC_FILES
في ndk-build لاستخدام المسارات المطلقة في نظام التشغيل 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
إلى struct user_regs_struct*.
الإصدار 10c من حزمة تطوير البرامج الأصلية (NDK) لنظام التشغيل Android (أكتوبر 2014)
- التغييرات المهمة:
-
- أجرينا التغييرات التالية على بنية التنزيل:
- تحتوي كل حزمة الآن على العناوين والمكتبات والأدوات المتوافقة مع الإصدارين 32 و64 بت للنظام الأساسي المعني.
- لم يعُد من الضروري تنزيل مكتبات STL التي تتضمّن معلومات تصحيح الأخطاء بشكل منفصل.
- تم تغيير كل ما كان يُعرف سابقًا باسم
Android-L
إلى الإصدار الرسميandroid-21
. - تم تعديل GCC 4.9 من خلال إعادة الأساس إلى فرع
google
من مستودع GCC. تشمل الاختلافات الرئيسية عن الإصدار الأولي من GCC 4.9 ما يلي: - يؤدي الخيار
-O2
الآن إلى تفعيل عملية تحويل التعليمات البرمجية إلى متجهات، بدون إزالة الحلقات المتكررة ولكن مع عملية فك أكثر فعالية. - تحسينات على FDO و LIPO
- تمت إضافة توافق Clang 3.5 إلى جميع المضيفين:
NDK_TOOLCHAIN_VERSION=clang
يختار الآن Clang 3.5. يُرجى ملاحظة ما يلي: - يتم تلقائيًا استخدام المجمّع المدمج في ARM وx86. إذا تسبّب ذلك في حدوث مشاكل، استخدِم
-fno-integrated-as
كحلّ بديل. - يصدر الإصدار 3.5 من Clang المزيد من التحذيرات بشأن العلامات غير المستخدَمة، مثل الخيار
-finline-functions
الذي يتيحه GCC. - أتحنا إمكانية الدخول إلى وضع تصحيح الأخطاء في ART عند تصحيح الأخطاء على جهاز Android 5.0 باستخدام ART كجهاز افتراضي، وذلك من خلال تحديد الخيار
art-on
. لمزيد من المعلومات، راجِعprebuilt/common/gdb/common.setup
في الدليل الذي يحتوي على NDK. - تمت إزالة التوافق مع الإصدار 3.3 من Clang.
- تم إيقاف GCC 4.6 نهائيًا، وقد تتم إزالته من الإصدارات المستقبلية.
- تم تعديل mclinker إلى الإصدار 2.8 مع إتاحة ميزة "طي الرموز المتطابقة" (ICF). حدِّد ICF باستخدام الخيار
--icf
. - توسيع نطاق دعم
arm_neon.h
في x86 وx86_64، ما يتيح تغطية% 93 تقريبًا من NEON intrinsics. لمزيد من المعلومات حول توافق NEON:- انتقِل إلى "دليل المبرمجين في NDK" (
docs/Programmers_Guide/html/
)، ثم اطّلِع على "البِنى ووحدات المعالجة المركزية" > "Neon". - اطّلِع على
hello-neon
النموذج المعدَّل فيsamples/
. - يمكنك الاطّلاع على دليل Intel حول نقل البيانات من ARM NEON إلى Intel SSE.
- انتقِل إلى "دليل المبرمجين في NDK" (
- تمت إضافة معلومات عن السمة
_FORTIFY_SOURCE
فيheaders/libs/android-21
، والتي ظهرت في الإصدار 10 (عندما كان اسمandroid-21
هوAndroid-L
)، ولكن لم تكن هناك أي معلومات عنها.
لمزيد من المعلومات التفصيلية، يُرجى الاطّلاع على إصلاحات الأخطاء المهمة أدناه.
عند نقل البيانات من مشاريع تستخدم GCC، يمكنك استخدام
-Wno-invalid-command-line-argument
و-Wno-unused-command-line-argument
لتجاهل العلامات غير المستخدَمة إلى أن تتمكّن من تحديد ما يجب فعله بها على المدى الطويل. - إصلاحات مهمة للأخطاء:
-
- تم إصلاح خطأ داخلي في برنامج التجميع باستخدام GCC4.9/aarch64 كان يتسبّب في ظهور رسالة الخطأ التالية (المشكلة 77564):
- تم إصلاح مشكلة إنشاء الرمز غير الصحيح من GCC4.9/arm. (المشكلة 77567)
- تم إصلاح خطأ داخلي في برنامج الترجمة البرمجية GCC4.9/mips يتضمّن تجميعًا مضمّنًا. (المشكلة 77568)
- تم إصلاح الرمز غير الصحيح الذي كان يتم إنشاؤه في GCC4.9/arm للسمة
x = (cond) ? y : x
. (المشكلة 77569) - تم إصلاح GCC4.9/aarch64 وClang3.5/aarch64 للتعامل مع
خطأ Cortex-A53 (835769) تلقائيًا. يمكنك إيقاف الحل البديل من خلال تحديد
-mno-fix-cortex-a53-835769
.
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- إصلاحات أخرى للأخطاء:
-
- تم إجراء إصلاحات على العناوين والمكتبات التالية في
android-21
:- تمت إضافة المزيد من رموز التلفزيون:
android/keycodes.h
- تمت إضافة المزيد من الثوابت وستة دوال استشعار جديدة إلى
android/sensor.h
:ASensorManager_getDefaultSensorEx
وASensor_getFifoMaxEventCount
وASensor_getFifoReservedEventCount
وASensor_getStringType
وASensor_getReportingMode
وASensor_isWakeUpSensor
. - تم إصلاح
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 و4.9 من GCC مع mips. لم تكن هذه الميزة متاحة في الإصدارَين r10 وr10b لأنّهما كانا مجمّعَين باستخدام 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. كانت رسالة الخطأ تتضمّن ما يلي: - تم تصحيح خطأ إملائي في
build-binary.mk.
(المشكلة 76992)
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- تم تحسين
- المشاكل المعروفة المهمة:
-
- قد يؤدي تحديد -Os (
-fauto-profile
) في GCC4.9 إلى حدوث أعطال. (المشكلة 77571)
- قد يؤدي تحديد -Os (
Android NDK r10b (سبتمبر 2014)
- ملاحظات مهمة:
-
- بسبب القيود المفروضة على حجم الحِزم القابلة للتنزيل والبالغ 512 ميغابايت، لا تتضمّن حِزم NDK القابلة للتنزيل والمتوافقة مع 32 بت العناصر التالية المتوافقة مع 32 بت. بدلاً من ذلك، تكون موجودة في تلك التي تعمل بنظام 64 بت:
- عناوين Android-L
- GCC 4.9
- في الوقت الحالي، لا يوفّر حزمة تطوير البرامج (NDK) سوى دعم Renderscript 32 بت على الإصدار 4.4 من نظام التشغيل Android (المستوى 19 من واجهة برمجة التطبيقات). لا يمكنك إنشاء HelloComputeNDK (نموذج Renderscript الوحيد) باستخدام أي مجموعة أخرى من Renderscript (32 أو 64 بت) وإصدار Android.
- لتجميع native-codec، يجب استخدام حزمة NDK بنظام 64 بت، وهي المكان الذي توجد فيه جميع عناوين Android-L.
- إصلاحات مهمة للأخطاء:
- إصلاحات أخرى للأخطاء:
-
- تمت إزالة
stdio.h
من أدلةinclude-fixed/
في جميع إصدارات GCC. (المشكلة 73728) - تمت إزالة ملفات العناوين المكرّرة من حِزم Windows في أدلة
platforms/android-L/arch-*/usr/include/linux/netfilter*/
. (المشكلة 73704) - تم إصلاح مشكلة كانت تمنع Clang من إنشاء HelloComputeNDK.
- تم إصلاح atexit. (المشكلة 66595)
- تم إجراء إصلاحات متنوّعة على المستندات في
docs/
وsources/third_party/googletest/README.NDK
. (المشكلة 74069) - تم إجراء الإصلاحات التالية على عناوين Android-L:
- تمت إضافة الدوال التالية إلى
ctype.h
وwchar.h
:dn_expand()
وgrantpt()
وinet_nsap_addr()
وinet_nsap_ntoa()
وinsque()
وnsdispatch()
وposix_openpt()
و__pthread_cleanup_pop()
و__pthread_cleanup_push()
وremque()
وsetfsgid()
وsetfsuid()
وsplice()
وtee()
وtwalk()
(المشكلة 73719) و42 دالة*_l()
. - تمت إعادة تسمية
cmsg_nxthdr
إلى__cmsg_nxthdr
. - تمت إزالة
__libc_malloc_dispatch
. - تم تغيير النموذج الأوّلي
ptrace()
إلىlong ptrace(int, ...);
. - تمت إزالة
sha1.h
. - تم تمديد الفترة بمقدار
android_dlextinfo
فيandroid/dlext.h
. - تمت إضافة التعليق التوضيحي
__NDK_FPABI__
إلى الدوال التي تتلقّى أو تعرض قيمًا من النوع float أو double فيstdlib.h
وtime.h
وwchar.h
وcomplex.h
.
- تمت إزالة
- تغييرات أخرى:
-
- تم تعديل
mipsel-linux-android-4.9
وmips64el-linux-android-4.9
، وتم تنفيذ تصميم جديد لدليل multilib، وتوفير دعم الإصدار 7.7 من gdb - تم تحسين
cpu-features
لرصد المزيد من ميزات arm64. (قائمة التغييرات 100339)
- تم تعديل
Android NDK r10 (يوليو 2014)
- التغييرات المهمة:
-
- تمت إضافة 3 واجهات تطبيق ثنائية جديدة، وجميعها 64 بت: arm64-v8a وx86_64 وmips64. يُرجى ملاحظة ما يلي:
- إنّ GCC 4.9 هو برنامج التجميع التلقائي لواجهات التطبيق الثنائية (ABI) ذات 64 بت. الإصدار الحالي من Clang هو 3.4.
قد لا تعمل
NDK_TOOLCHAIN_VERSION=clang
مع arm64-v8a وmips64. - Android-L هو المستوى الأول الذي يتيح استخدام الإصدار 64 بت. يُرجى العِلم أنّ مستوى واجهة برمجة التطبيقات هذا مؤقت ومخصّص لمعاينة الإصدار L فقط. وسيتم استبدالها برقم مستوى واجهة برمجة التطبيقات الفعلي في إصدار L.
- يتضمّن هذا الإصدار الآن إعدادات
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
إلى اختيار جميع واجهات التطبيقات الثنائية.
- يحتوي الإصدار الجديد من GNU libstdc++ في Android-L على جميع
<tr1/cmath>
قبل تحديد دالة رياضية خاصة بك، تحقَّق من_GLIBCXX_USE_C99_MATH_TR1
لمعرفة ما إذا كانت هناك دالة بهذا الاسم، وذلك لتجنُّب أخطاء "التعريف المتعدد" من الرابط. - تم تعديل مكتبة cpu-features لتتوافق مع نواة ARMv8. قد يتعذّر على مكتبة cpu-features الحالية رصد توفّر NEON على منصة ARMv8. أعِد تجميع الرمز باستخدام الإصدار الجديد.
- تمت إضافة دليل جديد لواجهات برمجة التطبيقات
platforms/android-L/
. ويشمل ذلك: - تم تعديل عناوين Bionic التي لم تتغيّر منذ مستويات واجهة برمجة التطبيقات في Android من 3 (Cupcake) إلى 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 في GCC 4.8/4.9 و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. - تم تعديل GCC من الإصدار 4.8 إلى الإصدار 4.8.3.
- تحسين توافق ARM libc++ EH من خلال التبديل من gabi++ إلى libc++abi لمزيد من التفاصيل، يُرجى الاطّلاع على قسم "توافق C++" في المستندات. يُرجى ملاحظة ما يلي:
- تنجح الآن جميع الاختبارات باستثناء اختبار اللغة في Clang 3.4 وGCC 4.8. لمزيد من المعلومات، يُرجى الاطّلاع على قسم "توافق C++" في المستندات.
- لا تزال مكتبات libc++ لكلّ من X86 وMIPS libc++ تستخدم gabi++.
- يمكن الآن استخدام <atomic> في الإصدار 4.7 والإصدارات الأحدث من GCC.
- يجب إضافة
-fno-strict-aliasing
إذا كنت تستخدم<list>
، لأنّ__list_imp::_end
_ يخالف قواعد TBAA. (المشكلة 61571) - اعتبارًا من GCC 4.6، لم يعُد LIBCXX_FORCE_REBUILD:=true يعيد إنشاء libc++. ويتطلّب إعادة إنشائه استخدام برنامج ترجمة مختلف. يُرجى العِلم أنّه لم يتم اختبار الإصدار 3.3 من Clang.
- أصبح mclinker الآن الإصدار 2.7، وهو متوافق مع نظام التشغيل Linux على بنية aarch64.
- تمت إضافة دعم للعناوين المسبقة التجميع التي يحدّدها
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
على: - تم إصلاح العطل التالي في الإصدار 3.3/3.4 من Clang:
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
. - تمت إزالة الرموز غير المتوفّرة من
libc.so
بنظام 32 بت، وتمت إضافةpread64
وpwrite64
وftruncate64
لمستوى واجهة برمجة التطبيقات 12 من نظام Android والإصدارات الأحدث. (المشكلة 69319) لمزيد من المعلومات، يُرجى الاطّلاع على رسالة الالتزام المصاحبة لقائمة التغييرات في AOSP 94137. - تم إصلاح تحذير GCC بشأن إعادة تعريف
putchar
. تتضمّن رسالة التحذير ما يلي: - تم إصلاح
make-standalone-toolchain.sh --stl=libc++
ليصبح: - النُسخ
cxxabi.h
(المشكلة 68001) - يتم تشغيله في أدلة أخرى غير دليل تثبيت NDK. (المشكلتان 67690 و68647)
- تم إصلاح مشكلة في GCC/Windows حيث يتم وضع علامات اقتباس حول الوسيطات فقط عند الضرورة لإنشاء عمليات في برامج خارجية. يقلّل هذا التغيير من احتمال تجاوز الحد الأقصى للطول البالغ 32 ألف حرف.
- تم إصلاح مشكلة تعذُّر تعديل متغير البيئة
APP_PLATFORM
. - تم إصلاح عملية تنفيذ
IsSystemLibrary()
في crazy_linker لتستخدمstrrchr()
بدلاً منstrchr()
للعثور على الاسم الأساسي الفعلي لمسار المكتبة. - تم إصلاح مشكلة عدم إمكانية إنشاء native-audio في وضع تصحيح الأخطاء.
- تم إصلاح مشكلة عدم قدرة 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 Neon intrinsics في مستندات x86. - تم نقل تحسين ARM/GOT_PREL (المتوفّر في الإصدار 4.6 من GCC الذي تم إنشاؤه من فرع Google في GCC) إلى الإصدار 4.8/4.9 من ARM GCC. يؤدي هذا التحسين أحيانًا إلى تقليل عدد التعليمات عند الوصول إلى المتغيرات العامة. للاطّلاع على مثال، راجِع النص البرمجي build.sh في
$NDK/tests/build/b14811006-GOT_PREL-optimization/
. - تمت إضافة إصدار ARM لكل من STL gabi++ وstlport وlibc++. وأصبحت هذه الإصدارات تتضمّن وضعَي ARM وThumb.
- يمكن الآن استدعاء البرنامج النصي 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
الآن الإصدار 3.4 من Clang. لا يزال GCC 4.6 هو برنامج التجميع التلقائي. - تمت إضافة
APP_ABI=armeabi-v7a-hard
، مع خيار multilib إضافي-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
. لكي يعمل make على النحو المتوقّع، لا يمكنك تحديد كل منarmeabi-v7a
وarmeabi-v7a-hard
كأهداف لـ make (أي على السطر APP_ABI=). ويؤدي ذلك إلى تجاهل إحداهما. يُرجى العِلم أنّAPP_ABI=all
لا يزال مكافئًا لـarmeabi armeabi-v7a x86 mips
. - تنسخ السمة
make-standalone-toolchain.sh
النصوص البرمجية لمكتبات إضافية ضمن أدلة/hard
. أضِف الرمزينCFLAGS
وLFLAGS
أعلاه إلى ملف makefile لتتمكّن من ربط 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++ (الإصدار الأولي r201101). يمكنك استخدام هذه الميزة الجديدة باتّباع الخطوات التالية:
- أضِف
APP_STL := c++_static
أوAPP_STL := c++_shared
فيApplication.mk
. يمكنك إعادة الإنشاء من المصدر عبرLIBCXX_FORCE_REBUILD := true
- نفِّذ
make-standalone-toolchain.sh --stl=libc++
لإنشاء سلسلة أدوات مستقلة تتضمّن عناوين/مكتبة libc++.
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++ reflection.
- إصلاحات أخرى للأخطاء:
-
- إصلاحات في الرأس:
- تم إصلاح مشكلة عدم توفّر
#include <sys/types.h>
فيandroid/asset_manager.h
للإصدار 13 من واجهة برمجة التطبيقات Android والإصدارات الأحدث. (المشكلة 64988) - تم إصلاح مشكلة عدم توفّر
#include
فيandroid/rect_manager.h
لنظام التشغيل Android بالإصدار 14 من واجهة برمجة التطبيقات والإصدارات الأحدث. - تمت إضافة
JNICALL
إلىJNI_OnLoad
وJNI_OnUnload
فيjni.h
. يُرجى العِلم أنّJNICALL
يتم تعريفه على أنّه__NDK_FPABI__
لمزيد من المعلومات، يُرجى الاطّلاع علىsys/cdefs.h
. - تم تعديل العناوين التالية لتتمكّن من تضمينها بدون الحاجة إلى تضمين التبعيات يدويًا (المشكلة 64679):
- تمت إضافة
sys/cachectl.h
لجميع البِنى. يمكن لمطوّري MIPS الآن تضمين هذا العنوان بدلاً من كتابة#ifdef __mips__
. - تم إصلاح الخطأ
platforms/android-18/include/android/input.h
من خلال إضافة__NDK_FPABI__
إلى الدوال التي تستخدم قيمًا من النوع float أو double أو تعرضها. - تم إصلاح MIPS
struct stat
، الذي تم ضبطه بشكل غير صحيح على الإصدار 64 بت لنظام التشغيل Android API المستوى 12 والإصدارات الأحدث. كان هذا الإعداد الخاطئ تراجعًا تم تقديمه في الإصدار r9c. - تم تحديد
__PTHREAD_MUTEX_INIT_VALUE
و__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE
و__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE
للمستوى 9 من واجهة برمجة التطبيقات Android API والإصدارات الأقدم. - تمت إضافة
scalbln
وscalblnf
وscalblnl
إلىlibm.so
x86 للإصدار 18 من واجهات برمجة التطبيقات والإصدارات الأحدث. - تم تصحيح خطأ إملائي في
sources/android/support/include/iconv.h
. (المشكلة 63806)
android/tts.h EGL/eglext.h fts.h GLES/glext.h GLES2/gl2ext.h OMXAL/OpenMAXSL_Android.h SLES/OpenSLES_Android.h sys/prctl.h sys/utime.h
- تم إصلاح مشكلة عدم توفّر
- تم إصلاح gabi++
std::unexpected()
لاستدعاءstd::terminate()
حتى تتاح فرصة تنفيذ معالجstd::terminate()
يحدّده المستخدم. - تم إصلاح gabi++ لاكتشاف
std::nullptr
. - عينات ثابتة من Teapot وMoreTeapots:
- تم حلّ مشكلة في شرائح 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
shell فقط، في حال فضّل المطوّرون استخدام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 يتسبب في إنشاء رمز يؤدي إلى حدوث خطأ عشوائي في التجزئة. (المشكلة 62910)
- تم إصلاح خطأ ICE في GCC 4.8 في 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. تتوفّر هذه المكتبات الآن لجميع مستويات واجهة برمجة التطبيقات Android من 12 إلى 19. - تمت إضافة
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.
القديمتَين
- تم تغيير النموذج الأولي لـ
- في الأمثلة Teapot وMoreTeapots و
source/android/ndk_helper
:- تم تغييرها لتستخدم الآن واجهة ثنائية للتطبيق (ABI) ذات فاصلة عائمة ثابتة لـ armeabi-v7a.
- تم تعديلها لاستخدام وضع ملء الشاشة على المستوى 19 من واجهة برمجة التطبيقات Android API والإصدارات الأحدث.
- تم إصلاح مشكلة في
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++ ليصبح:
- لا تستخدم malloc() لتخصيص عناصر C++ thread-local.
- تجنُّب حالات التوقف التام في gabi++ في الحالات التي تكون فيها قيمة libc.debug.malloc غير صفرية في إصدارات منصة Android الخاصة بـ userdebug/eng.
- إصلاحات في الرأس:
- تغييرات أخرى:
-
- تمت إضافة "
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
في واجهة التطبيق الثنائية (ABI) الحالية armeabi-v7a. لمزيد من المعلومات والقيود الحالية على Clang، يُرجى الاطّلاع علىtests/device/hard-float/jni/Android.mk
. - تمت الترقية من الإصدار 4.8 من مجموعة أدوات تجميع GNU (GCC) إلى الإصدار 4.8.2، وتمت إضافة ميزة دعم الألوان التشخيصية. لتفعيل ألوان التشخيص، اضبط
-fdiagnostics-color=auto
أو-fdiagnostics-color=always,
أو صدِّرGCC_COLORS
كما هو موضّح أدناه: لمزيد من المعلومات، يُرجى الاطّلاع على GCC Language Independent Options.GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
- تمت إضافة عينتَين جديدتَين لتوضيح ميزات OpenGL ES 3.0: Teapot وMoreTeapots. تعمل هذه النماذج على الأجهزة التي تعمل بالإصدار 4.1 من نظام التشغيل Android (المستوى 16 من واجهة برمجة التطبيقات) والإصدارات الأحدث.
- تم إيقاف الإصدار 4.7 من GCC والإصدار 3.2 من Clang نهائيًا، وستتم إزالتهما في الإصدار التالي.
- تم تعديل
- إصلاحات مهمة للأخطاء:
-
- تم إصلاح مشكلة عدم تمكُّن ARM GCC 4.6
thumb2
من إنشاء جداول القفز النسبي ذات 16 بت. (مشكلة في GCC) - تم إصلاح خطأ داخلي في برنامج التجميع (ICE) في GCC 4.8 على
g++.dg/cpp0x/lambda/lambda-defarg3.C
. (التغيير 62770، مشكلة في GCC) - تم إصلاح مشكلة عدم تشغيل ملفات
*-gdb.exe
القابلة للتنفيذ على نظام التشغيل Windows 32 بت. (المشكلة 58975) - تم إصلاح خطأ ICE في GCC 4.8 عند إنشاء مكتبة Bullet. رسالة الخطأ هي كما يلي:
(المشكلة 58916، مشكلة GCC)internal compiler error: verify_flow_info failed
- تم تعديل إصدار GDB/ARM لتخطّي بيانات
ARM.exidx
عند التراجع في رمز المقدمة، وتمت إضافة أمر (set arm exidx-unwinding
) للتحكّم في التراجع المستند إلى exidx. (المشكلة 55826) - تم إصلاح مشكلة برنامج التجميع Clang 3.3 MIPS حيث تتم إعادة استخدام سجلَّي HI وLO بشكل غير صحيح.
- تم إصلاح مشكلة في MIPS 4.7 ICE في
dbx_reg_number
. رسالة الخطأ هي كما يلي: (تصحيح GCC)external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
- تم إصلاح مشكلة عدم تمكُّن 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++
terminate وunexpected_handler لتكون آمنة للاستخدام المتزامن. - تم إصلاح عدة مشاكل في الخيار
-integrated-as
في Clang، ما يتيح اجتياز الاختبارات الخاصة بـ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
مخصّص. (مشكلة Clang)
- إصلاحات الرأس
- تغييرات أخرى:
-
- تم تفعيل 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 أيضًا - تمت إضافة أداة crazy linker. لمزيد من المعلومات، يمكنك الاطّلاع على
sources/android/crazy_linker/README.TXT
. - تم إصلاح
bitmap-plasma
ليتم الرسم بملء الشاشة بدلاً من منطقة بحجم 200 × 200 بكسل. - تم تقليل أحجام سلاسل الأدوات في نظامَي التشغيل Linux وDarwin بنسبة% 25 من خلال إنشاء روابط رمزية للملفات المتطابقة.
- تم تفعيل OpenMP لجميع إصدارات GCC. لاستخدام هذه الميزة، أضِف العلامات التالية إلى إعدادات الإصدار:
الإصدار 9 من حزمة تطوير البرامج الأصلية (NDK) لنظام التشغيل Android (يوليو 2013)
- التغييرات المهمة:
-
- تمت إضافة الدعم لنظام التشغيل Android 4.3 (المستوى 18 لواجهة برمجة التطبيقات). لمزيد من المعلومات، يُرجى الاطّلاع على
STABLE-APIS.html
وأمثلة الرموز الجديدة فيsamples/gles3jni/README
. - تمت إضافة العناوين والمكتبات الخاصة بالإصدار 3.0 من OpenGL ES المتوافق مع الإصدار 4.3 من نظام التشغيل Android (المستوى 18 من واجهة برمجة التطبيقات) والإصدارات الأحدث.
- تمت إضافة برنامج التجميع GNU Compiler Collection (GCC) 4.8 إلى حزمة NDK. بما أنّ الإصدار 4.6 من GCC لا يزال الإعداد التلقائي، عليك تفعيل هذا الخيار بشكل صريح:
- بالنسبة إلى الإصدارات
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.ملاحظة: في الإصدار 4.7 من GCC والإصدارات الأحدث، تنشئ برامج الترجمة البرمجية ARM رمز وصول غير متوافق تلقائيًا لإصدارات ARMv6 والإصدارات الأحدث من أهداف الإنشاء. قد تحتاج إلى إضافة خيار الإنشاء
-mno-unaligned-access
عند إنشاء النواة التي لا تتوافق مع هذه الميزة. - بالنسبة إلى الإصدارات
- تمت إضافة دعم Clang 3.3. يختار خيار الإنشاء
NDK_TOOLCHAIN_VERSION=clang
الآن Clang 3.3 تلقائيًا.ملاحظة: تم إيقاف كل من GCC 4.4.3 وClang 3.1 نهائيًا، وستتم إزالتهما من إصدار NDK التالي.
- تم تعديل أداة تصحيح الأخطاء في مشروع GNU (GDB) لتتوافق مع الإصدار 2.7.5 من Python.
- تمت إضافة 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 لإنشاء محاذاة كافية لأوامر VST وVLD الخاصة بتحميل وتخزين NEON. (GCC Issue 57271)
- تم إصلاح خطأ داخلي في برنامج التجميع (ICE) في GCC 4.4.3/4.6/4.7 لقيمة فهرس سالبة ثابتة في سلسلة حرفية. (المشكلة 54623)
- تم إصلاح خطأ التقسيم في GCC 4.7 عند إعداد ثابت باستخدام عنوان عنصر. (المشكلة 56508)
- تم إصلاح خطأ تقسيم الذاكرة في GCC 4.6 ARM لقيم
-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 OS لاستخدام توجيهات CFI، وبدونها
ld.mcld --eh-frame-hdr
يتعذّر تنفيذه بشكل متكرر. - تم إصلاح خطأ داخلي في برنامج التجميع Clang 3.2 X86/MIPS في
llvm/lib/VMCore/Value.cpp
. (التغيير 59021) - تم إصلاح عُطل برنامج تجميع Windows 64 بت في GCC 4.7. (الخطأ:
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) - تم إصلاح مشكلة كانت تتسبب في اختيار الإصدار 64 بت من NDK على نظام التشغيل 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
. - تم إصلاح GCC 4.4.3/4.6/4.7 لإيقاف الخيار
-export-dynamic
للبرامج المرتبطة بشكل ثابت. لم يعُد GCC يضيف قسم.interp
للبرامج المرتبطة بشكل ثابت. - تم إصلاح خطأ التجميع
stlport
في GCC 4.4.3 بشأن عدم اتساقtypedef
في_Unwind_Control_Block
. (المشكلة 54426) - تم إصلاح البرامج النصية
awk
للتعامل مع ملفاتAndroidManifest.xml
التي تم إنشاؤها على نظام التشغيل Windows والتي قد تحتوي على أحرف\r
لاحقة وتتسبب في حدوث أخطاء في الإنشاء. (المشكلة 42548) - تم إصلاح
make-standalone-toolchain.sh
لفحص الدليلprebuilts/
لتحديد ما إذا كان المضيف 32 بت أو 64 بت. - تم إصلاح الخيار
-integrated-as
في Clang 3.2. - تم إصلاح بيانات معالج
pr1
وpr2
في نموذج Clang 3.2 ARM EHABI المضغوط. - تمت إضافة الخيار 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 والإصدارات الأحدث. في العادة، يجب أن تنتهي جميع المسارات بعبارة إرجاع لدالة تعرض قيمة. إذا لم يكن الأمر كذلك، يدرج clang تعليمات غير محدّدة (أو مصيدة في وضع التصحيح) في المسار بدون عبارة إرجاع. إذا كنت متأكدًا من أنّ الرمز صحيح، استخدِم هذا الخيار للسماح للمحسِّن بالاستفادة من السلوك غير المحدّد. إذا لم تكن متأكدًا، لا تستخدِم هذه العلامة. قد يتلقّى المتصل قيمة عشوائية غير صحيحة، ولكن لن يستغلّ المحسِّن هذه القيمة، ما سيجعل تصحيح الأخطاء في الرمز البرمجي أكثر صعوبة. - تمت إضافة علامة
-fglobal-ctor-const-promotion
لإعادة تفعيل ترويج المتغيّرات العامة باستخدام الدالة الإنشائية الثابتة لتكون ثوابت. باستخدام هذا الخيار، تحاول عملية تحسين المتغيرات العمومية في LLVM تقييم المتغيرات العمومية باستخدام دوال الإنشاء الثابتة وترقيتها إلى ثوابت عمومية. على الرغم من أنّ هذا التحسين صحيح، قد يتسبّب في بعض حالات عدم التوافق مع الرمز البرمجي الذي تم تجميعه بواسطة GCC. على سبيل المثال، قد ينفّذ الرمزconst_cast
لتحويل الثابت إلى متغير وتعديله. في GCC، يكون المتغير في وضع القراءة والكتابة ويتم تشغيل الرمز عن طريق الخطأ. في Clang، يكون المتغيّر الثابت في ذاكرة للقراءة فقط، وقد يؤدي ذلك إلى تعطُّل تطبيقك.
- تمت إضافة العلامة
- تمت إضافة
-mldc1-sdc1
إلى برامج تجميع MIPS GCC وClang. تتضمّن معظم برامج التجميع تعليماتldc1
وsdc1
لنقل العناصر التي يبلغ حجمها 8 بايت وترتيبها بشكل صحيح. إذا كان تطبيقك يستخدم أداة تخصيص مخصّصة لا تتوافق دائمًا مع حدود 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
في الإصدار 4.7 من GCC لتجميع 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 في أداة الربط GCC 4.7. (مشكلة في Sourceware)
- تم إصلاح خطأ داخلي في المحوّل البرمجي GCC 4.7
build_data_member_initialization, at cp/semantics.c:5790
. - تم إصلاح خطأ داخلي في المحوّل البرمجي GCC 4.7
redirect_eh_edge_1, at tree-eh.c:2214
. (المشكلة 52909) - تم إصلاح خطأ تقسيم الذاكرة في GCC 4.7. (مشكلة في GCC)
- تم إصلاح دقة ساعة
<chrono>
وتفعيلsteady_clock
. (المشكلة 39680) - تم إصلاح سلسلة الأدوات لتفعيل
_GLIBCXX_HAS_GTHREADS
لإصدار 4.7 من libstdc++ في GCC. (المشكلة 41770, المشكلة 41859) - تم إصلاح المشكلة المتعلّقة بتعذُّر ربط رمز X86 MXX/SSE بسبب عدم توفّر
posix_memalign
. (التغيير 51872) - تم إصلاح خطأ تقسيم GCC4.7/X86 في
i386.c
، الدالةdistance_non_agu_define_in_bb()
. (تغيير 50383) - تم إصلاح GCC4.7/X86 لاستعادة سلوك
cmov
السابق. (مشكلة في GCC) - تم إصلاح معالجة قيمة الإرجاع 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)
- تم إصلاح مشكلة SIGILL في أداة تصحيح أخطاء GNU (GDB) عند تصحيح الأخطاء على Android 4.1.2. (المشكلة 40941)
- تم إصلاح مشكلة عدم قدرة GDB على ضبط نقاط توقّف
source:line
عندما تحتوي الرموز على مسارات ملفات طويلة وغير مباشرة. (المشكلة 42448) - تم إصلاح خطأ GDB
read_program_header
في ملفات 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)
- Removed Gabi++ redundant free on exception object (Change 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) - تم إصلاح الإصدار 3.1 من Clang ليتمكّن من تجميع libgabi++ واجتياز اختبارات
test-stlport
لإصدارات MIPS المستهدَفة. (التغيير 51961) - تم إصلاح Clang 3.1 لكي يتم تفعيل الاستثناء تلقائيًا للغة C++ فقط، وليس للغة C.
- تم إصلاح عدة مشاكل في الإصدار 3.1 من Clang لاجتياز معظم اختبارات استثناءات GNU.
- تم إصلاح النصَّين البرمجيَّين
clang
وclang++
في برنامج NDK المترجم المستقل لرصد-cc1
وعدم تحديد-target
عند العثور عليه. - تم إصلاح
ndk-build
لمراقبةNDK_APP_OUT
التي تم ضبطها فيApplication.mk
. - تم إصلاح
libc.so
وlib.a
في X86 اللذين كانا يفتقران إلى الدالتَينsigsetjmp
وsiglongjmp
اللتين تم تعريفهما مسبقًا فيsetjmp.h
. (المشكلة 19851) - تم تصحيح GCC 4.4.3/4.6/4.7 libstdc++ لتعمل مع Clang في C++ 11. (مشكلة Clang)
- تم إصلاح مسار cygwin في الوسيطة التي تم تمريرها إلى
HOST_AWK
. - تم إصلاح تحذير البرنامج النصي
ndk-build
في النوافذ عند التشغيل من دليل JNI الخاص بالمشروع. (المشكلة 40192) - تم إصلاح المشكلة التي لا يتم فيها إنشاء النص البرمجي
ndk-build
إذا كان ملف makefile يتضمّن مساحة بيضاء لاحقة في تعريفLOCAL_PATH
. (المشكلة 42841)
- عناوين NDK الثابتة:
- تغييرات أخرى:
-
- تم تفعيل إمكانية استخدام سلاسل المحادثات في مجموعة أدوات GCC/MIPS.
- تم تعديل أدوات معالجة الاستثناءات في GCC
__cxa_begin_cleanup
و__cxa_type_match
لتصبح مرئية تلقائيًا بدلاً من أن تكون مخفية في GNU libstdc++. لمزيد من المعلومات، يُرجى الاطّلاع علىCHANGES.HTML
. - تم تعديل نصوص البرامج الإنشائية لتصبح المكتبات الثابتة Gabi++ وSTLport الآن مضمّنة مع إمكانية إخفاء الرؤية باستثناء أدوات معالجة الاستثناءات.
- تم تعديل الإصدار بحيث يتم إنشاء
STLport
لوحدة المعالجة المركزية ARM في وضع Thumb. - تمت إضافة دعم لـ
std::set_new_handler
في Gabi++. (المشكلة 52805) - تم تفعيل استدعاء نظام
FUTEX
في مكتبة GNU libstdc++. - تم تعديل
ndk-build
لكي لا يتم نسخ المكتبة الثابتة المسبقة الإنشاء إلى الدليلobj/local/<abi>/
الخاص بالمشروع. (المشكلة 40302) - تمت إزالة
__ARM_ARCH_5*__
من نص برمجيtoolchains/*/setup.mk
في ARM. (المشكلة 21132) - تم إنشاء مكتبات GNU libstdc++ إضافية في thumb لبنية ARM.
- تم تفعيل تعليمات MIPS ذات الفاصلة العائمة
madd/msub/nmadd/nmsub/recip/rsqrt
باستخدام وحدة معالجة أرقام الفاصلة العائمة (FPU) ذات 32 بت. - تم تفعيل أداة تحسين الحلقات في Graphite في الإصدارَين 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 وMax OS X 32 بت التي تحلّل وتحسّن الوصول إلى الذاكرة. (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
في عنوان bionic. لمزيد من المعلومات، يُرجى الاطّلاع على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 بت وإتاحة إنشاء Canadian Cross.
- تم تعديل النص البرمجي
build-mingw64-toolchain.sh
إلى إصدار أحدث. - تمت إضافة خيار إنشاء
libgnustl_static.a
وstlport_static.a
بدون مستوى ظهور مخفي.
- تم إصلاح مشكلة تزامن في
Android NDK r8d (ديسمبر 2012)
- التغييرات المهمة:
-
- تمت إضافة برنامج التجميع GNU Compiler Collection (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-undefined}، عليك تضمين الخيار-ldl
يدويًا.
CPLUSPLUS-SUPPORT.html
.ملاحظة: هذه الميزة تجريبية وتعمل بشكل أفضل مع برامج التجميع GCC 4.6/4.7 مقارنةً ببرامج GCC 4.4.3 أو Clang 3.1. يُرجى تجربة هذه الميزة والإبلاغ عن أي مشاكل.
- لم يعُد بإمكانك إنشاء ملف تنفيذي ثابت باستخدام الخيار
- تمت إضافة الخيار
-mstack-protector-guard=
إلى x86 للاختيار بين مسار تلقائي عام متوافق مع مكتبة C القديمة لنظام التشغيل Android (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
ممكنًا في الإصدار 4.1 من نظام التشغيل Android والإصدارات الأحدث. (Chromium Issue 164154)
- تمت إضافة برنامج التجميع GNU Compiler Collection (GCC) 4.7 إلى حزمة NDK. لا يزال برنامج التجميع GCC 4.6 هو البرنامج التلقائي، لذا عليك تفعيل الإصدار الجديد بشكل صريح باتّباع الخطوات التالية:
- إصلاحات مهمة للأخطاء:
-
- تم إصلاح مشكلة إعادة إنشاء ملفات الكائنات بدون داعٍ عند استخدام النص البرمجي
ndk-build
. (المشكلة 39810) - تم إصلاح خطأ في أداة الربط في الإصدار 8c من حزمة تطوير البرامج الأصلية (NDK) لنظام التشغيل Mac OS X 10.6.x، وقد كان يؤدي إلى ظهور الخطأ التالي:
حدثت هذه المشكلة بسبب إنشاء التطبيق على نظام التشغيل Mac OS X 10.7، ما أدّى إلى إنشاء ملفات ثنائية غير متوافقة مع نظام التشغيل Mac OS 10.6.x وNDK.dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
- تمت إزالة الخيارين
-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 at reload1.c:1061. (المشكلة 20862)
- تم إصلاح خطأ داخلي في برنامج التجميع GCC 4.4.3 ARM في emit-rtl.c:1954. (المشكلة 22336)
- تم إصلاح خطأ داخلي في برنامج التجميع GCC 4.4.3 ARM في postreload.c:396. (المشكلة 22345)
- تم إصلاح مشكلة في GCC 4.6/4.7 تتسبّب في تخطّي دوال 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 Debugger (GDB) لتقليل الوقت المستغرَق في استعراض خريطة روابط الهدف
أثناء أحداث
solib
. (المشكلة 38402) - تم إصلاح مشكلة عدم توفّر ملف
libgcc.a
عند ربط مكتبات مشتركة.
- إصلاحات ملفات العناوين في NDK:
- تغييرات أخرى:
-
- تمت إعادة نقل الدوال الذرية المضمّنة 64 بت إلى الإصدار 4.6 من GCC لأجهزة ARM.
- تمت إضافة مستندات حول وقت استجابة إخراج الصوت، بالإضافة إلى مستندات أخرى وإصلاحات.
- تم إصلاح إصدارات تصحيح الأخطاء باستخدام 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 Compiler Collection (GCC) هو الإعداد التلقائي، لذا عليك تفعيل خيار برنامج الترجمة Clang بشكل صريح باتّباع الخطوات التالية:
- بالنسبة إلى
ndk-build
، صدِّرNDK_TOOLCHAIN_VERSION=clang3.1
أو أضِف إعداد متغير البيئة هذا إلىApplication.mk
. - بالنسبة إلى الإصدارات المستقلة، أضِف
--llvm-version=3.1
إلىmake-standalone-toolchain.sh
واستبدِلCC
وCXX
في ملف makefile بـ<tool-path>/bin/clang
و<tool-path>/bin/clang++
. يمكنك الاطّلاع علىSTANDALONE-TOOLCHAIN.html
لمعرفة التفاصيل.
ملاحظة: هذه الميزة تجريبية. يُرجى تجربة هذه الميزة والإبلاغ عن أي مشاكل.
- بالنسبة إلى
- تمت إضافة أداة الربط Gold
ld.gold
إلى مجموعة أدوات Windows. يتم أيضًا استخدام Gold linker تلقائيًا مع ARM وX86 على جميع المضيفين. يمكنك تجاهل هذا الإعداد واستخدامld.bfd
linker من خلال إضافة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
. - تم تعديل الإصدار لكي يتم تجميع الملفات التنفيذية التي تستخدم الإصدار 16 من نظام التشغيل Android (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
لمعرفة التفاصيل. - تم تعديل النوع long double على منصة X86 ليصبح 8 بايت. أصبح حجم هذا النوع من البيانات الآن مماثلاً لحجم النوع المزدوج، ولكن لا يزال يتم التعامل معه كنوع مميز.
- إصدار جديد من تطبيق "
APP_ABI=armeabi-v7a
":- تم تعديل نوع الإصدار هذا لتمرير المَعلمة
-march=armv7-a
إلى أداة الربط. يضمن هذا التغيير ربط المكتبات وcrt*.o
الخاصة بالإصدار 7 بشكل صحيح. - تمت إضافة
-mfpu=vfpv3-d16
إلىndk-build
بدلاً من الخيار-mfpu=vfp
المستخدَم في الإصدارات السابقة.
- تم تعديل نوع الإصدار هذا لتمرير المَعلمة
- تمت إضافة برنامج التجميع Clang 3.1 إلى حزمة NDK. لا يزال الإصدار 4.6 من مجموعة أدوات الترجمة GNU Compiler Collection (GCC) هو الإعداد التلقائي، لذا عليك تفعيل خيار برنامج الترجمة Clang بشكل صريح باتّباع الخطوات التالية:
- إصلاحات مهمة للأخطاء:
-
- تم إصلاح المشكلة التي كانت تتسبب في عدم إمكانية وصول بعض المستخدمين إلى سلسلة الأدوات المستقلة عند تشغيل
make-standalone-toolchain.sh
باستخدام امتيازات الجذر. (المشكلة 35279)- تم ضبط جميع الملفات والملفات التنفيذية في حزمة إصدار NDK على أن تتضمّن أذونات القراءة والتنفيذ للجميع.
- يتم الآن الحفاظ على ملكية/مجموعة
libstdc++.a
عند نسخها.
- تمت إزالة
\r
المكرّرة منecho.exe
المسبقة الإنشاء في Windows. تسبّبت السلسلة المكرّرة\r
في تعذُّر تنفيذgdb.setup
في أداة تصحيح الأخطاء GNU (GDB) لأنّها أصبحت جزءًا من المسار بشكل غير صحيح. (المشكلة 36054) - تم إصلاح المشاكل المتعلقة بعمليات الإنشاء المتوازية في Windows التي كانت تتعذّر أحيانًا بسبب مشاكل في التوقيت في تنفيذ
host-mkdir
. (المشكلة 25875) - تم إصلاح GCC 4.4.3 GNU
libstdc++
لكي لا يدمج أسماءtypeinfo
تلقائيًا. لمزيد من التفاصيل، يمكنك الاطّلاع علىtoolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo
. (المشكلة 22165) - تم إصلاح مشكلة في سياق
null
في GCC 4.6cp/mangle.c::write_unscoped_name
، حيث قد يتعطّل GCC عندما يكون السياقnull
ويتم إلغاء الإشارة إليه فيTREE_CODE
. - تم إصلاح الأعطال التي تحدث في GCC 4.4.3 على تعريفات الأنواع الخاصة بـ ARM NEON للأرقام العشرية. (المشكلة 34613)
- تم إصلاح مشكلة في التنفيذ الداخلي
STLport
_IteWrapper::operator*()
حيث تم عرض موقع مكدّس قديم يحتوي على القيمة التي تمت إزالة المرجع إليها، ما تسبّب في حدوث أعطال أثناء وقت التشغيل. (المشكلة 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
قبل إضافة مساراتheader/lib
الخاصة بمكتبة STL إلى عملية التجميع. تم تعديلndk-build
لاستبعاد اللاحقتَين.arm
و.neon
قبل البحث، وإلا لن يتم تجميع العناصر فيLOCAL_SRC_FILES
مثلmyfile.cpp.arm.neon
كرمز C++. - تم إصلاح
binutils-2.21/ld.bfd
ليكون قادرًا على ربط العنصر من إصدارات binutils القديمة بدونtag_FP_arch
، ما كان يؤدي إلى ظهور رسائل الخطأ assertion fail في GNU Binutils. (المشكلة 35209) - تمت إزالة التحذير Unknown EABI object attribute 44 عند ربط
binutils-2.19/ld
بعنصر مسبق الإنشاء باستخدامbinutils-2.21
أحدث - تم إصلاح مشكلة في تجميع GNU
stdc++
باستخدام كل من-mthumb
و-march=armv7-a
، وذلك عن طريق تعديلmake-standalone-toolchain.sh
لملءheaders/libs
في الدليل الفرعيarmv7-a/thumb
. (المشكلة 35616) - تم إصلاح الخطأ unresolvable R_ARM_THM_CALL relocation. (المشكلة 35342)
- تم إصلاح خطأ داخلي في المترجم البرمجي في
reload1.c:3633
، والذي كان يحدث بسبب توقّع ARM لنوع معامل غير صحيح عند إجراء عملية توسيع الإشارة منchar
. (المشكلة 50099 في GCC) - تم إصلاح خطأ داخلي في المحوّل البرمجي مرتبط بمقدار الإزاحة السالب. (مشكلة في GCC)
- تم إصلاح ARM GCC 4.4.3/4.6
- تم إصلاح
-fstack-protector
في X86، وهو أيضًا الإعداد التلقائيndk-build
المستهدف لواجهة التطبيق الثنائية x86. - إصلاحات خاصة بمقياس MIPS:
- تم إصلاح مشكلة
STLport
endian-ness من خلال ضبط_STLP_LITTLE_ENDIAN
على 1 عند تجميع MIPSlibstlport_*
. - تم إصلاح مشكلة GCC
__builtin_unreachable
عند تجميع LLVM. (GCC Issue 54369) - تم إصلاح مشكلة في عملية تجميع
cc1
تؤدي إلى استهلاك% 100 من وحدة المعالجة المركزية. (GCC Issue 50380)
- تم إصلاح مشكلة
- إصلاحات خاصة بأداة تصحيح الأخطاء GNU:
- تم إيقاف دعم Python في gdb-7.x أثناء الإنشاء، وإلا قد تختار الدالة gdb-7.x configure
أي إصدار من Python متاح على المضيف وتنشئ
gdb
مع اعتماد ثابت على إصدار معيّن من Python. (المشكلة 36120) - تم إصلاح الخطأ
ndk-gdb
الذي كان يحدث عندما يحتويAPP_ABI
علىall
ولا يتطابق مع أي من البِنى المعروفة. (المشكلة 35392) - تم إصلاح مشكلة عدم التوافق مع أسماء المسارات في Windows من خلال الاحتفاظ بالحرف
:
إذا كان يبدو وكأنّه يمكن أن يكون جزءًا من مسار Windows يبدأ بحرف محرك أقراص. (GDB Issue 12843) - تم إصلاح مشكلة إضافة إمكانية استخدام نقاط توقّف الأجهزة في ARM في
gdbserver
. (مشكلة في "قاعدة بيانات Google") - تمت إضافة إصلاح لقراءة
solibs
الحالي فقط عندما يكون الرابط متسقًا. يؤدي هذا التغيير إلى تسريع معالجة أحداثsolib
. (المشكلة 37677) - تمت إضافة إصلاح لإجراء محاولات متكررة للعثور على نقاط توقّف
solib
. تعيد أداة تصحيح الأخطاء من Google (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 configure
أي إصدار من 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 لدعم المكتبات الأصلية القديمة. يجب ألا تشير إلى هذه الملفات مباشرةً. بدلاً من ذلك، يجب أن يتضمّن كل ملف مكتبة مشتركة أو ملف تنفيذي نسخته الخاصة من هذه الرموز، التي يوفّرهاcrtbegin_*.o
.إذا كان مشروعك مرتبطًا بخيارات
-nostdlib -Wl,--no-undefined
، عليك تقديم__dso_handle
خاص بك لأنّcrtbegin_so.o
غير مرتبط في هذه الحالة. لا يهمّ محتوى__dso_handle
، كما هو موضّح في نموذج الرمز التالي:extern "C" { extern void *__dso_handle __attribute__((__visibility__ ("hidden"))); void *__dso_handle; }
- تم إصلاح أداة فك ترميز الرموز الثابتة الخاصة بمعالج ARM والمستخدَمة في
objdump
لإدخالاتplt
من أجل إنشاء نموذجfunction@plt
أكثر قابلية للقراءة. - تمت إزالة الرموز التالية التي تم تقديمها في GCC 4.6
libgcc.a
من مكتبة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 لا تتوافق إلا مع المستوى 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
، ويتم تحسينه لتجميع معظم الاختبارات لجميع واجهات التطبيق الثنائية المتوافقة وتشغيلها على جميع الأجهزة المتصلة.
- تمت إزالة الرأسين
Android NDK r8b (يوليو 2012)
تتضمّن الميزات الرئيسية لهذا الإصدار مجموعة أدوات جديدة من GNU Compiler Collection (GCC) 4.6 وGNU Debugger (GDB) 7.3.x، ما يتيح إمكانية تصحيح الأخطاء في صورة نظام التشغيل Android 4.1 (المستوى 16 من واجهة برمجة التطبيقات).
- إصلاحات مهمة للأخطاء:
-
- تم إصلاح
LOCAL_SHORT_COMMANDS
مشاكل على نظام التشغيل Mac OS وبيئات 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 OS. يكون هذا الخيار غير مفعّل تلقائيًا. أضِفLOCAL_LDLIBS += -fuse-ld=gold
فيAndroid.mk
لتفعيلها. - تتطلّب البرامج التي تم تجميعها باستخدام
-fPIE
استخدامGDB
الجديد لتصحيح الأخطاء، بما في ذلك الملفات الثنائية في صور نظام Android 4.1 (المستوى 16 لواجهة برمجة التطبيقات). - تحتوي الأداة
binutils
2.21ld
على إصلاحات تم نقلها من الإصدار 2.22:- تم إصلاح الخطأ
ld --gc-sections
الذي يحتفظ بشكل غير صحيح بمراجع غير صالحة لمكتبات خارجية. (مزيد من المعلومات). - تم إصلاح الأمر ARM
strip
للحفاظ علىp_align
وp_flags
الأصليين في القسمGNU_RELRO
إذا كانا صالحَين. وبدون هذا الإصلاح، لا يمكن تصحيح الأخطاء في البرامج التي تم إنشاؤها باستخدام-fPIE
. (مزيد من المعلومات)
- تم إصلاح الخطأ
- تم إيقاف تحسين
sincos()
للتوافق مع المنصات القديمة.
- أصبحت مجموعة أدوات GCC 4.6 هي مجموعة الأدوات التلقائية. يمكنك ضبط
- تم تعديل خيارات الإنشاء لتفعيل بت Never eXecute (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
. (مزيد من المعلومات) - تم إصلاح مشكلة احتساب
GOT_PAGE
MIPS. (مزيد من المعلومات) - تم إصلاح رابط رمز التحذير الخاص بميزة "المتابعة" في
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 نفسه من تطبيقك أثناء التثبيت ولا يسمح بمواصلة التثبيت إلا إذا كان التطبيق يوفّر مكتبة تم تجميعها لبنية وحدة المعالجة المركزية للجهاز.
- تمت إضافة إمكانية استخدام واجهة MIPS ABI، ما يتيح لك إنشاء رمز آلة يعمل على أجهزة Android المتوافقة المستندة إلى MIPS. تشمل الميزات الرئيسية لنظام MIPS سلاسل أدوات خاصة بنظام MIPS، وعناوين نظام، ومكتبات، ودعم تصحيح الأخطاء. لمزيد من التفاصيل حول
التوافق مع MIPS، يُرجى الاطّلاع على
- إصلاحات مهمة للأخطاء:
-
- تم إصلاح خطأ إملائي في تنفيذ GAbi++ حيث تم تعديل نتيجة
dynamic_cast<D>(b)
لعنصر الفئة الأساسيةb
إلى الفئة المشتقةD
بشكل غير صحيح في الاتجاه المعاكس من الفئة الأساسية. (المشكلة 28721) - تم إصلاح مشكلة تعذُّر نسخ
make-standalone-toolchain.sh
libsupc++.*
.
- تم إصلاح خطأ إملائي في تنفيذ GAbi++ حيث تم تعديل نتيجة
- إصلاحات أخرى للأخطاء:
-
- تم إصلاح
ndk-build.cmd
لضمان عملها بشكل صحيح حتى إذا أعاد المستخدم تحديد متغير البيئةSHELL
، والذي قد يتم تغييره عند تثبيت مجموعة متنوعة من أدوات التطوير في بيئات Windows.ndk-build.cmd
- تم إصلاح
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
. - تمت العودة إلى الإصدار
binutils
2.19 لحلّ مشاكل تصحيح الأخطاء التي ظهرت في NDK r7 (الذي تم التبديل فيه إلى الإصدارbinutils
2.20.1). - تم إصلاح الخطأ
ndk-build
على نظام التشغيل Linux 32 بت. تسبّب خطأ في التغليف في وضع إصدار 64 بت من الملف التنفيذيawk
ضمنprebuilt/linux-x86/bin
في الإصدار 7 من NDK. - تم إصلاح إصدار Windows الأصلي (
ndk-build.cmd
). ولم تتأثر أوضاع الإصدار الأخرى. تشمل الإصلاحات ما يلي:- تمت إزالة خطأ في حلقة لا نهائية / تجاوز سعة التخزين المؤقت كان يحدث عند محاولة استدعاء
ndk-build.cmd
من دليل ليس في أعلى مسار مشروعك (على سبيل المثال، في أي دليل فرعي منه). - تم إصلاح مشكلة تجاهل ملفات التبعية التي يتم إنشاؤها تلقائيًا. كان هذا يعني أنّ تعديل ملف رأس لا يؤدي إلى إعادة تجميع المصادر التي تتضمّنه.
- تم إصلاح مشكلة عدم معالجة الرموز الخاصة في الملفات أو المسارات بشكل صحيح، باستثناء المسافات وعلامات الاقتباس.
- تمت إزالة خطأ في حلقة لا نهائية / تجاوز سعة التخزين المؤقت كان يحدث عند محاولة استدعاء
- تم إصلاح مجموعة الأدوات المستقلة لإنشاء ملفات ثنائية مناسبة عند استخدام
-lstdc++
(أي الربط بوقت تشغيلlibstdc++
C++ من GNU). يجب استخدام-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
، والتي تكون عادةً عملية خدمة. - تم إصلاح خطأ نادر كان يتسبّب في عدم التزام الإصدار 7 من NDK بالقيمة
LOCAL_ARM_MODE
، وكان يؤدي دائمًا إلى تجميع بعض ملفات المصدر (وليس كلها) إلى تعليمات 32 بت. STLport
: أعِد تحميل المصادر لتتطابق مع إصدار نظام Android الأساسي. يتضمّن هذا التحديث إصلاحات لبعض الأخطاء البسيطة:- تم إصلاح إنشاء مثيل لنوع غير مكتمل
- تم إصلاح خطأ إملائي بسيط في استخدام "==" بدلاً من "="
- تم استخدام
memmove
بدلاً منmemcpy
فيstring::assign
- تمت إضافة معالجة أفضل للقيم
IsNANorINF
وIsINF
وIsNegNAN
وما إلى ذلك.
للحصول على التفاصيل الكاملة، راجِع سجلّ عمليات الإيداع.
-
STLport
: تمت إزالة 5 أدوات تهيئة ثابتة غير ضرورية من المكتبة. - تم تجميع مكتبات GNU libstdc++ الخاصة بـ armeabi-v7a عن طريق الخطأ لتتوافق مع armeabi بدلاً من ذلك. لم يؤثر هذا التغيير في صحة النتائج، ولكن من المفترض أن يؤدي استخدام واجهة التطبيق الثنائية المناسبة إلى تحسين الأداء بشكل طفيف.
- تم تعديل مكتبة
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 الرسمية لنظام التشغيل Android 4.0 (المستوى 14 لواجهة برمجة التطبيقات)، ما يضيف الميزات الأصلية التالية إلى النظام الأساسي:
- تمت إضافة واجهة برمجة تطبيقات وسائط متعدّدة أصلية استنادًا إلى معيار OpenMAX AL 1.0.1 من Khronos Group. يتيح العنوانان الجديدان
<OMXAL/OpenMAXAL.h>
و<OMXAL/OpenMAXAL_Android.h>
للتطبيقات التي تستهدف المستوى 14 من واجهة برمجة التطبيقات إمكانية عرض الوسائط المتعددة مباشرةً من الرمز البرمجي الأصلي باستخدام واجهة جديدة خاصة بنظام Android لتخزين البيانات مؤقتًا في قائمة الانتظار. لمزيد من التفاصيل، يُرجى الاطّلاع علىdocs/openmaxal/index.html
وhttp://www.khronos.org/openmax/. - تم تعديل واجهة برمجة التطبيقات الأصلية للصوت استنادًا إلى معيار Khronos Group OpenSL ES 1.0.1. باستخدام المستوى 14 من واجهة برمجة التطبيقات، يمكنك الآن فك ترميز الصوت المضغوط (مثل MP3 وAAC وVorbis) إلى PCM. لمزيد من التفاصيل، يُرجى الاطّلاع على
docs/opensles/index.html
وhttp://www.khronos.org/opensles/.
- تمت إضافة واجهة برمجة تطبيقات وسائط متعدّدة أصلية استنادًا إلى معيار OpenMAX AL 1.0.1 من Khronos Group. يتيح العنوانان الجديدان
- تمت إضافة دعم CCache. لتسريع عمليات إعادة الإنشاء الكبيرة، حدِّد متغيّر البيئة
NDK_CCACHE
علىccache
(أو مسار الملف الثنائيccache
). عند تعريفها، يستخدم نظام إنشاء NDK تلقائيًا CCache عند تجميع أي ملف مصدر. مثلاً:export NDK_CCACHE=ccache
ملاحظة: لا يتم تضمين CCache في إصدار NDK، لذا يجب تثبيته قبل استخدامه. لمزيد من المعلومات حول CCache، يُرجى الاطّلاع على http://ccache.samba.org.
- تمت إضافة إمكانية ضبط
APP_ABI
علىall
للإشارة إلى أنّك تريد إنشاء وحدات NDK لجميع واجهات ABI التي يتيحها إصدار NDK المحدّد. وهذا يعني أنّ أحد السطرَين التاليَين فيApplication.mk
يعادل هذا الإصدار:APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
يعمل هذا الإجراء أيضًا إذا حدّدت
APP_ABI
عند استدعاءndk-build
من سطر الأوامر، وهي طريقة سريعة للتأكّد من أنّ مشروعك يتوافق مع جميع واجهات التطبيق الثنائية المتوافقة بدون تغييرApplication.mk file
في المشروع. مثلاً:ndk-build APP_ABI=all
- تمت إضافة المتغيّر
LOCAL_CPP_FEATURES
فيAndroid.mk
الذي يتيح لك تحديد ميزات C++ (RTTI أو Exceptions) التي تستخدمها الوحدة. يضمن ذلك عمل الربط النهائي بشكل صحيح إذا كانت لديك وحدات مسبقة الإنشاء تعتمد على هذه الميزات. لمزيد من التفاصيل، يُرجى الاطّلاع علىdocs/ANDROID-MK.html
وdocs/CPLUSPLUS-SUPPORT.html
. - مسارات مختصرة إلى ملفات المصدر وملفات العناصر المستخدَمة في أوامر الإنشاء عند استدعاء
$NDK/ndk-build
من مسار مشروعك، تصبح مسارات الملفات المصدر وملفات العناصر وملفات الثنائيات التي يتم تمريرها إلى أوامر الإنشاء أقصر بكثير الآن، لأنّها يتم تمريرها بالنسبة إلى الدليل الحالي. ويكون ذلك مفيدًا عند إنشاء مشاريع تتضمّن الكثير من ملفات المصدر، وذلك لتجنُّب القيود المفروضة على الحد الأقصى لطول سطر الأوامر الذي يتيحه نظام التشغيل المضيف. يبقى السلوك بدون تغيير إذا استدعيتndk-build
من دليل فرعي لشجرة مشروعك، أو إذا حدّدتNDK_PROJECT_PATH
للإشارة إلى دليل معيّن.
- تمت إضافة واجهات برمجة تطبيقات NDK الرسمية لنظام التشغيل Android 4.0 (المستوى 14 لواجهة برمجة التطبيقات)، ما يضيف الميزات الأصلية التالية إلى النظام الأساسي:
- ميزات تجريبية
-
يمكنك الآن إنشاء ملفات المصدر الخاصة بـ NDK على نظام التشغيل Windows بدون Cygwin من خلال استدعاء
البرنامج النصي
ndk-build.cmd
من سطر الأوامر من مسار مشروعك. يتلقّى النص البرمجي الوسيط الوسيطات نفسها التي يتلقّاها النص البرمجي الأصليndk-build
. تتضمّن حزمة Windows NDK برامج ثنائية مسبقة الإنشاء خاصة بها لكل من 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
الآن بشكل صحيح مع الأنشطة التي تتضمّن فئات متعددة في فلاتر MAIN intent. - أصبحت عمليات استيراد المكتبات الثابتة متعدية بشكلٍ صحيح. على سبيل المثال، إذا كان أحد الوحدات
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 وOpenGLES Khronos لتوفير المزيد من الإضافات. يُرجى العِلم أنّ هذا لا يغيّر واجهات التطبيق الثنائية (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
- GLES 2.0
-
GL_OES_element_index_uint
GL_OES_get_program_binary
GL_OES_mapbuffer
GL_OES_packed_depth_stencil
GL_OES_texture_3D
GL_OES_texture_float
GL_OES_texture_float_linear
GL_OES_texture_half_float_linear
GL_OES_texture_npot
GL_OES_vertex_array_object
GL_OES_EGL_image_external
GL_AMD_program_binary_Z400
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_EXT_multi_draw_arrays
GL_EXT_read_format_bgra
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_compression_dxt1
GL_IMG_program_binary
GL_IMG_read_format
GL_IMG_shader_binary
GL_IMG_texture_compression_pvrtc
GL_IMG_multisampled_render_to_texture
GL_NV_coverage_sample
GL_NV_depth_nonlinear
GL_QCOM_extended_get
GL_QCOM_extended_get2
GL_QCOM_writeonly_rendering
GL_QCOM_tiled_rendering
- EGL
-
EGL_ANDROID_recordable
EGL_NV_system_time
Android NDK r6b (أغسطس 2011)
لا يتضمّن إصدار NDK هذا أي ميزات جديدة مقارنةً بالإصدار 6. يعالج الإصدار r6b المشاكل التالية التي ظهرت في الإصدار r6:
- إصلاحات مهمة للأخطاء
-
- تم إصلاح خطأ في عملية الإنشاء عند استخدام
APP_ABI="armeabi x86"
لعمليات إنشاء متعددة البِنى. - تم إصلاح موقع ملفات STLport الثنائية المُنشأة مسبقًا في حزمة إصدار NDK. حدث خطأ في النص البرمجي للحزمة، ما أدّى إلى وضعها في الموقع الجغرافي الخطأ.
- تم إصلاح مشكلة استخدام
atexit()
في المكتبات المشتركة مع مجموعة أدوات x86standalone. - تم حلّ المشكلة في
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 إمكانية استخدام واجهة x86 ABI وتغييرات طفيفة أخرى.
للحصول على معلومات مفصّلة تصف التغييرات في هذا الإصدار، يُرجى قراءة مستند 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
، الذي تم إيقافه نهائيًا منذ الإصدار 5 من حزمة تطوير البرامج (NDK)، من حزمة NDK.
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 من واجهة برمجة التطبيقات (Android 2.3) وكانتا غير صحيحتَين. على الرغم من أنّ هذا الإجراء يؤدي إلى إيقاف واجهة برمجة التطبيقات المصدر، إلا أنّ الواجهة الثنائية للنظام تبقى بدون تغيير. كانت الدوال غير الصحيحة تفتقد إلى المَعلمةhistory_index
، ويتم عرض التعريفات الصحيحة أدناه:float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event, size_t pointer_index, size_t history_index); float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event, size_t pointer_index, size_t history_index);
- تم تعديل ملف C الثنائي المتوافق مع ARM الخاص بالمستوى 9 من واجهة برمجة التطبيقات (Android 2.3) لعرض الدوال الجديدة التي تمت إضافتها في مستوى واجهة برمجة التطبيقات هذا بشكل صحيح في وقت الربط (على سبيل المثال،
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 من واجهة برمجة التطبيقات (Android 2.3) والإصدارات الأحدث. - تم إصلاح مشكلة كان يمكن فيها لوحدة استيراد نفسها، ما يؤدي إلى حلقة لا نهائية في GNU Make.
- تم إصلاح الخطأ الذي كان يتسبب في تعذُّر الإنشاء إذا تم ضبط
LOCAL_ARM_NEON
على true (خطأ إملائي فيbuild/core/build-binary.mk
). - تم إصلاح الخطأ الذي كان يمنع تجميع ملفات
.s
(لم تكن هناك مشكلة في ملفات.S
).
- يتم الآن ربط ملفات الكائنات دائمًا بالترتيب الذي تظهر به في
Android NDK r5b (كانون الثاني/يناير 2011)
لا يتضمّن إصدار NDK هذا أي ميزات جديدة مقارنةً بالإصدار 5. يعالج الإصدار r5b المشاكل التالية التي ظهرت في الإصدار r5:
- كانت حِزم r5 الثنائية تتطلّب الإصدار 2.11 من glibc، ولكن يتم إنشاء حِزم r5b الثنائية باستخدام سلسلة أدوات خاصة تستهدف الإصدار 2.7 من glibc أو إصدارًا أحدث بدلاً من ذلك. يمكن الآن تشغيل ملفات Linux الثنائية الخاصة بسلسلة الأدوات على الإصدار 8.04 من Ubuntu أو الإصدارات الأحدث.
- إصلاح خطأ في برنامج التجميع في سلسلة أدوات arm-linux-androideabi-4.4.3 كانت السلسلة الثنائية السابقة تنشئ تسلسلات تعليمات غير صالحة عند التعامل مع الأحرف الموقّعة.
- تمت إضافة المستندات الناقصة الخاصة بالقيمة "gnustl_static" لـ APP_STL، والتي تتيح لك الربط بإصدار مكتبة ثابتة من GNU libstdc++. الـ
- تم حلّ المشاكل التالية البالغ عددها
ndk-build
:- تم إصلاح الخطأ الذي كان يؤدي إلى إنشاء ملفات تبعية غير متسقة عند حدوث خطأ في التجميع على نظام التشغيل Windows. وقد أدّى ذلك إلى منع إنشاء إصدار صحيح بعد إصلاح الخطأ في الرمز المصدر.
- خطأ خاص بـ Cygwin، حيث يؤدي استخدام مسارات قصيرة جدًا لتثبيت Android NDK أو مسار المشروع إلى إنشاء ملفات تبعية غير صالحة. وقد أدّى ذلك إلى تعذُّر إجراء عمليات إنشاء تدريجية.
- خطأ إملائي منع مكتبة cpufeatures من العمل بشكل صحيح مع سلسلة أدوات NDK الجديدة
- تكون عمليات الإنشاء في Cygwin أسرع من خلال تجنُّب طلبات
cygpath -m
من GNU Make لكل ملف مصدر أو ملف كائن، ما كان يتسبّب في حدوث مشاكل مع أشجار المصادر الكبيرة جدًا. في حال عدم عمل ذلك بشكل صحيح، حدِّدNDK_USE_CYGPATH=1
في بيئتك لاستخدامcygpath -m
مرة أخرى. - يُعلم برنامج تثبيت Cygwin الآن المستخدم بمسارات التثبيت غير الصالحة التي تحتوي على مسافات. في السابق، كان المسار غير الصالح يعرض خطأً يشير إلى أنّ إصدار GNU Make غير صحيح، حتى إذا كان الإصدار الصحيح مثبّتًا.
- تم إصلاح خطأ إملائي كان يمنع عمل متغيّر البيئة
NDK_MODULE_PATH
بشكل صحيح عندما كان يحتوي على أدلة متعددة مفصولة بنقطتين رأسيتين. - يحتوي البرنامج النصي
prebuilt-common.sh
على إصلاحات للتحقّق من أنّ المترجم البرمجي يتيح إنشاء رمز آلة 64 بت، بدلاً من الاعتماد على علامة المضيف، ما يتيح إعادة بناء سلسلة الأدوات 32 بت بشكل صحيح على نظام التشغيل Snow Leopard. تتيح النصوص البرمجية لإعادة إنشاء سلسلة الأدوات الآن أيضًا استخدام سلسلة أدوات مضيفة 32 بت. - تمت إضافة بيان ناقص لـ
INET_ADDRSTRLEN
إلى<netinet/in.h>
. - تمت إضافة بيانات
IN6_IS_ADDR_MC_NODELOCAL
وIN6_IS_ADDR_MC_GLOBAL
الناقصة إلى<netinet/in6.h>
. - تم استبدال "asm" بـ "__asm__" في
<asm/byteorder.h>
للسماح بالتجميع باستخدام-std=c99
.
Android NDK r5 (ديسمبر 2010)
يتضمّن هذا الإصدار من NDK العديد من واجهات برمجة التطبيقات الجديدة، ومعظمها تم تقديمه
لدعم تطوير الألعاب والتطبيقات المشابهة التي تستخدم الرموز البرمجية الأصلية بشكل مكثف. باستخدام واجهات برمجة التطبيقات، يمكن للمطوّرين الوصول مباشرةً إلى الأحداث والصوت والرسومات وإدارة النوافذ والأصول والتخزين. يمكن للمطوّرين أيضًا تنفيذ دورة حياة تطبيق Android في الرمز البرمجي الأصلي بمساعدة فئة NativeActivity
الجديدة. للحصول على معلومات مفصّلة تصف التغييرات في هذا الإصدار، يُرجى قراءة مستند CHANGES.HTML
المضمّن في حزمة NDK التي تم تنزيلها.
- ملاحظات عامة:
-
- تضيف هذه السمة إمكانية استخدام الأنشطة الأصلية، ما يتيح لك تنفيذ دورة حياة تطبيق Android في الرمز البرمجي الأصلي.
- إضافة دعم مدمج لما يلي:
- النظام الفرعي للإدخال (مثل لوحة المفاتيح وشاشة اللمس)
- الوصول إلى بيانات أجهزة الاستشعار (مقياس التسارع والبوصلة والجيروسكوب وما إلى ذلك)
- واجهات برمجة تطبيقات حلقة الأحداث لانتظار أشياء مثل أحداث الإدخال وأحداث المستشعر
- النظام الفرعي للنافذة والسطح
- واجهات برمجة تطبيقات الصوت المستندة إلى معيار OpenSL ES التي تتيح التشغيل والتسجيل بالإضافة إلى التحكّم في المؤثرات الصوتية على النظام الأساسي
- الوصول إلى مواد العرض المجمّعة في ملف
.apk
- يتضمّن مجموعة أدوات جديدة (استنادًا إلى GCC 4.4.3) تنشئ رمزًا برمجيًا أفضل، ويمكن الآن استخدامها أيضًا كبرنامج ترجمة برمجية مستقل، وذلك للمستخدمين الذين يريدون إنشاء تطبيقاتهم باستخدام
./configure && make
. يمكنك الاطّلاع على التفاصيل في docs/STANDALONE-TOOLCHAIN.html. لا تزال الملفات الثنائية للإصدار 4.4.0 من GCC متوفّرة، ولكن تمت إزالة الملفات الثنائية للإصدار 4.2.1. - تضيف هذه السمة إمكانية استخدام المكتبات الثابتة والمشترَكة المعدّة مسبقًا (docs/PREBUILTS.html) وعمليات تصدير واستيراد الوحدات النمطية لتسهيل مشاركة الوحدات النمطية التابعة لجهات خارجية وإعادة استخدامها (docs/IMPORT-MODULE.html يوضّح السبب).
- توفّر هذه السمة عملية تنفيذ تلقائية لـ C++ STL (استنادًا إلى STLport) كوحدة مساعدة. ويمكن استخدامها إما كمكتبة ثابتة أو مشترَكة (تتوفّر التفاصيل وأمثلة الاستخدام في sources/android/stlport/README). تتوفّر أيضًا ملفات ثنائية مُنشأة مسبقًا لـ STLport (ثابتة أو مشترَكة) وGNU libstdc++ (ثابتة فقط) إذا اخترت إجراء عملية التجميع باستخدام هذه المكتبات بدلاً من التنفيذ التلقائي لمكتبة قوالب C++ القياسية. لا تتوافق استثناءات C++ وRTTI مع التنفيذ التلقائي لمكتبة STL. لمزيد من المعلومات، يُرجى الاطّلاع على docs/CPLUSPLUS-SUPPORT.HTML.
- يتضمّن هذا الإصدار تحسينات على مكتبة
cpufeatures
المساعدة التي تعمل على تحسين إعداد التقارير عن نوع وحدة المعالجة المركزية (CPU) (كانت بعض الأجهزة تُبلغ سابقًا عن وحدة معالجة مركزية ARMv7، بينما كان الجهاز في الواقع وحدة ARMv6). ننصح المطوّرين الذين يستخدمون هذه المكتبة بإعادة إنشاء تطبيقاتهم ثم تحميلها على Google Play للاستفادة من التحسينات. - تضيف هذه السمة مكتبة EGL التي تتيح لك إنشاء زخارف وخدمات OpenGL ES وإدارتها.
- تضيف هذه السمة تطبيقات نموذجية جديدة،
native-plasma
وnative-activity
، لتوضيح كيفية كتابة نشاط أصلي. - يتضمّن هذا الإصدار العديد من إصلاحات الأخطاء والتحسينات الصغيرة الأخرى. يمكنك الاطّلاع على docs/CHANGES.html للحصول على قائمة أكثر تفصيلاً بالتغييرات.
الإصدار 4b من حزمة تطوير البرامج الأصلية (NDK) لنظام التشغيل Android (يونيو 2010)
- ملاحظات حول الإصدار 4b من حزمة NDK:
-
يتضمّن هذا الإصدار إصلاحات للعديد من المشاكل في النصوص البرمجية لتصحيح الأخطاء وإنشاء NDK. إذا كنت تستخدم NDK r4، ننصحك بتنزيل الإصدار NDK r4b. للحصول على معلومات تفصيلية تصف التغييرات في هذا الإصدار، يُرجى قراءة مستند CHANGES.TXT المضمّن في حزمة NDK التي تم تنزيلها.
- ملاحظات عامة:
-
- توفير نظام إنشاء مبسط من خلال الأمر الجديد
ndk-build
build - تتيح هذه السمة تصحيح الأخطاء بسهولة في الرموز البرمجية الأصلية التي تم إنشاؤها على أجهزة الإنتاج من خلال الأمر الجديد
ndk-gdb
. - تضيف هذه السمة واجهة تطبيق ثنائية جديدة خاصة بنظام التشغيل Android لبُنى وحدة المعالجة المركزية المستندة إلى ARM، وهي
armeabi-v7a
. توسّع واجهة التطبيق الثنائية الجديدة نطاق واجهة التطبيق الثنائيةarmeabi
الحالية لتشمل إضافات مجموعة تعليمات وحدة المعالجة المركزية التالية:- تعليمات Thumb-2
- تعليمات وحدة النقطة العائمة (FPU) لأجهزة VFP (VFPv3-D16)
- دعم اختياري لـ ARM Advanced SIMD (NEON) GCC intrinsics وVFPv3-D32 متوافق مع أجهزة مثل Verizon Droid by Motorola وGoogle Nexus One وغيرها.
- تضيف هذه السمة
cpufeatures
مكتبة ثابتة جديدة (مع المصادر) تتيح لتطبيقك رصد ميزات وحدة المعالجة المركزية للجهاز المضيف في وقت التشغيل. على وجه التحديد، يمكن للتطبيقات التحقّق من توفّر ARMv7-A، بالإضافة إلى VFPv3-D32 وNEON، ثم توفير مسارات رموز منفصلة حسب الحاجة. - تضيف هذه السمة تطبيقًا نموذجيًا،
hello-neon
، يوضّح كيفية استخدام مكتبةcpufeatures
للتحقّق من ميزات وحدة المعالجة المركزية (CPU)، ثم توفير مسار رمز محسّن باستخدام وظائف NEON المضمّنة، إذا كانت وحدة المعالجة المركزية متوافقة معها. - تتيح لك إنشاء رمز آلة لأي من مجموعتَي التعليمات المتوافقتَين مع NDK أو كلتيهما. على سبيل المثال، يمكنك إنشاء إصدار لكل من بنية ARMv5 وبنية ARMv7-A في الوقت نفسه وتخزين كل شيء في
.apk
النهائي لتطبيقك. - لضمان عدم توفّر تطبيقاتك للمستخدمين إلا إذا كانت أجهزتهم متوافقة معها، يفلتر Google Play التطبيقات الآن استنادًا إلى معلومات مجموعة التعليمات المضمّنة في تطبيقك، ولا يلزمك اتّخاذ أي إجراء لتفعيل الفلترة. بالإضافة إلى ذلك، يتحقّق نظام Android نفسه أيضًا من تطبيقك أثناء التثبيت ولا يسمح بمواصلة التثبيت إلا إذا كان التطبيق يوفّر مكتبة تم تجميعها لبنية وحدة المعالجة المركزية للجهاز.
- تضيف هذه الحزمة إمكانية استخدام الإصدار 2.2 من نظام التشغيل Android، بما في ذلك واجهة برمجة تطبيقات جديدة وثابتة للوصول إلى مخازن مؤقتة لوحدات البكسل الخاصة بكائنات
Bitmap
من الرمز البرمجي الأصلي.
- توفير نظام إنشاء مبسط من خلال الأمر الجديد
الإصدار 3 من حزمة تطوير البرامج الأصلية (NDK) لنظام التشغيل Android (مارس 2010)
- ملاحظات عامة:
-
- تضيف هذه السمة إمكانية استخدام المكتبة الأصلية OpenGL ES 2.0.
- تضيف هذه السمة تطبيقًا نموذجيًا،
hello-gl2
، يوضّح كيفية استخدام تظليل الرأس وتظليل الأجزاء في OpenGL ES 2.0. - تمت إعادة ضبط ملفات toolchain الثنائية لهذا الإصدار باستخدام GCC 4.4.0، ما يؤدي إلى إنشاء رمز آلة أكثر إحكامًا وكفاءة من الإصدار السابق (4.2.1). ولا يزال NDK يوفّر أيضًا ملفات ثنائية 4.2.1، والتي يمكنك استخدامها اختياريًا لإنشاء رمز الآلة.
Android NDK r2 (سبتمبر 2009)
تم إصداره في الأصل باسم "Android 1.6 NDK, Release 1".
- ملاحظات عامة:
-
- تضيف هذه السمة إمكانية استخدام المكتبة الأصلية OpenGL ES 1.1.
- تضيف هذه السمة تطبيقًا نموذجيًا،
san-angeles
، يعرض رسومات ثلاثية الأبعاد من خلال واجهات برمجة تطبيقات OpenGL ES الأصلية، مع إدارة مراحل نشاط التطبيق باستخدام العنصرGLSurfaceView
.
Android NDK r1 (يونيو 2009)
تم إصداره في الأصل باسم "Android 1.5 NDK, Release 1".
- ملاحظات عامة:
-
- يتضمّن دعم المترجم (GCC) لتعليمات ARMv5TE، بما في ذلك تعليمات Thumb-1.
- يتضمّن هذا المكوّن عناوين النظام لواجهات برمجة التطبيقات الأصلية الثابتة والوثائق والتطبيقات النموذجية.