سجل نسخة NDK

توفِّر هذه الصفحة معلومات عن التغييرات في جميع الإصدارات الثابتة التي تم إصدارها من NDK. لتنزيل أحدث إصدار ثابت من NDK أو أي إصدار تجريبي متاح حاليًا، اطّلِع على صفحة عمليات تنزيل NDK.

يمكنك الاطّلاع على android-ndk-announce لمجموعة Google" لمزيد من المعلومات الكاملة، الاشتراك لتلقي إعلانات الإصدارات.

Android NDK r27 LTS (تموز/يوليو 2024)

سجلّ التغييرات
عملية تنزيل
  • تتوفّر إمكانية تنزيل هذا الإصدار هنا.
سجلّ التغييرات
عملية تنزيل
  • تتوفّر إمكانية تنزيل هذا الإصدار هنا.
الإشعارات
  • لم يعُد إصدار KitKat (واجهة برمجة التطبيقات 19 و20) متوفّرًا.
سجلّ التغييرات
عملية تنزيل
  • تتوفّر إمكانية تنزيل هذا الإصدار هنا.
الإشعارات
  • وتتضمّن واجهات برمجة التطبيقات لنظام التشغيل Android 13.
  • تم تعديل LLVM إلى clang-r450784d، استنادًا إلى تطوير LLVM 14.
سجلّ التغييرات
عملية تنزيل
  • تتوفّر إمكانية تنزيل هذا الإصدار هنا.
الإشعارات
  • تمت إزالة مُجمع GNU (GAS). إذا كنت تنشئ باستخدام -fno-integrated-as عليك إزالة تلك العلامة. عرض ملاحظات حول نقل البيانات من Clang للحصول على نصائح حول جعل التجميع متوافقًا باستخدام LLVM.
  • تمت إزالة GDB. يمكنك استخدام LLDB بدلاً منه. تجدر الإشارة إلى أنّ ndk-gdb يستخدم LLDB من خلال وكان تطبيق LLDB متاح فقط في أي وقت مضى.
  • لم يعُد Jelly Bean (واجهات برمجة التطبيقات 16 و17 و18) متاحًا. الحد الأدنى نظام التشغيل الذي يتوافق مع NDK هو KitKat (المستوى 19 من واجهة برمجة التطبيقات).
  • ولن تتوفّر الأجهزة التي لا تعمل بالنيون بعد الآن. هناك عدد قليل جدًا من الأجهزة القديمة لا تتوافق مع النيون، لذا لن تلاحظ معظم التطبيقات جانبًا من تحسين الأداء.
  • تمت إزالة إمكانية استخدام إصدار RenderScript. RenderScript كان متوقفة نهائيًا في Android 12. في حال عدم الانتهاء من نقل البيانات يمكن استخدام تطبيقاتك بعيدًا عن RenderScript، إذ يمكن استخدام NDK r23 LTS.
سجلّ التغييرات
عملية تنزيل
  • تتوفّر إمكانية تنزيل هذا الإصدار هنا.
الإشعارات
  • تمت إزالة binutils GNU، باستثناء مجمع GNU (GAS). خدمات Google للسيارات (GAS) في الإصدار التالي. إذا كنت تنشئ باستخدام -fno-integrated-as، يُرجى الإبلاغ عن الأخطاء إذا كان هناك أي شيء يمنعك من ذلك. ومنعك من إزالة العلامة.
  • توقّف التوافق مع GDB. ستتم إزالة GDB من الإصدار التالي. يمكنك استخدام LLDB بدلاً منه. يُرجى العِلم أنّ تطبيق ndk-gdb يستخدم LLDB تلقائيًا.
  • NDK r23 هو الإصدار الأخير الذي سيدعم غير النيون. تبدأ بـ في NDK r24، سيتم إنشاء مكتبات armeabi-v7a في نظام sysroot باستخدام نيون. هناك عدد قليل جدًا من الأجهزة القديمة لا تتوافق مع النيون، لن يلاحظها معظم التطبيقات باستثناء تحسُّن الأداء.
  • لن يتم توفير Jelly Bean (واجهات برمجة التطبيقات 16 و17 و18) في خطة NDK التالية. . سيكون الحد الأدنى لنظام التشغيل الذي يدعمه NDK for r24 هو KitKat (المستوى 19 من واجهة برمجة التطبيقات)
سجلّ التغييرات
عملية تنزيل
  • تتوفّر إمكانية تنزيل هذا الإصدار هنا.
الإشعارات
  • تم إيقاف binutils GNU نهائيًا وستتم إزالتها في خطة NDK القادمة . لاحظ أن مجمع GNU (as) هو جزء من هذا. إذا كنت تنشئ باستخدام -fno-integrated-as، يُرجى الإبلاغ عن الأخطاء إذا كان هناك أي شيء يمنعك من ذلك. ومنعك من إزالة العلامة. في حال استخدام "as" مباشرةً، يمكنك استخدام clang بدلاً من ذلك.
  • أصبحت العلامة LLD هي أداة الربط التلقائية. تم أيضًا نقل ملف ndk-build وملف CMake Toolchain إلى استخدام llvm-ar وllvm-strip.
  • يستخدم ndk-gdb الآن lldb كبرنامج تصحيح الأخطاء. تم إيقاف gdb نهائيًا وسوف في إصدار مستقبلي. للرجوع إلى gdb، استخدم --no-lldb . لكن رجاءً الإبلاغ عن خطأ يشرح سبب عدم تمكّنك من استخدام lldb.
  • يتوفر دعم std::filesystem الآن. هناك خياران المشكلات المعروفة:
    • المشكلة 1258: قد std::filesystem::perm_options::nofollow على الأجهزة القديمة.
    • المشكلة 1260: سينفّذ std::filesystem::canonical الإجراء التالي: نجاح غير صحيح عند تجاوز مسار غير موجود على الأجهزة.
سجلّ التغييرات
عملية تنزيل
  • تتوفّر إمكانية تنزيل هذا الإصدار هنا.
الإشعارات
  • لم يعُد من الممكن استخدام نظام التشغيل Windows بسرعة 32 بت. ولا يؤثر ذلك في قاعدة بيانات غالبية المستخدمين. إذا كنت لا تزال بحاجة إلى إنشاء تطبيقات NDK من إصدارات 32 بت من نظام التشغيل Windows، تابع استخدام NDK r20.

    لمزيد من المعلومات حول هذا التغيير في أدوات مطوّري برامج Android، اطّلِع على مشاركة مدونة حول هذا الموضوع.

  • نموذج LLD متاح الآن للاختبار. لقد تحوّلت AOSP إلى استخدام LLD تلقائيًا وسيتبعها NDK. (المخطط الزمني غير معروف). اختبِر النموذج اللغوي الكبير في تطبيقك من خلال اجتياز -fuse-ld=lld. عند الربط. لاحظ أن المشكلة 843 سيؤثر في الإنشاءات التي تستخدم LLD مع شريط binutils وobjcopy بدلاً من llvm-strip وllvm-objcopy.
  • وستتم إزالة مسارات تثبيت سلسلة الأدوات القديمة خلال الفترة المقبلة والإصدارات. وكانت هذه المسارات قديمة منذ NDK r19 وتستغرق مساحة كبيرة في NDK. في ما يلي المسارات التي تتم إزالتها:
    • أنظمة أساسية
    • المصادر/cxx-stl
    • نظام sysroot
    • سلاسل الأدوات (باستثناء الأدوات/llvm)
    بشكل عام، من المفترض ألا يؤثر هذا التغيير إلا في مستخدمي نظام الإنشاء. أولئك الذين يستخدمون أنظمة إنشاء غير محدثة. ndk-build عدم تأثُّر مستخدمي سلسلة الأدوات من خلال أداة CMake make_standalone_toolchain.py مستخدم (على الرغم من أنه كان غير ضروري منذ r19). للحصول على معلومات حول الانتقال من تنسيق سلسلة الأدوات القديم، اطّلِع على دليل صيانة أنظمة الإنشاء لإصدار NDK الذي تستخدمه.
  • سيحتاج "متجر Play" إلى التوافق مع إصدارات 64 بت عند تحميل APK بدءًا من أغسطس 2019. يمكنك بدء النقل الآن لتجنُّب المفاجآت عند يحين وقته. لمزيد من المعلومات، يُرجى مراجعة مشاركة المدونة هذه.
  • تتوفَّر الآن حِزمة تطبيق macOS التي تم توقيعها وتوثيقها. التنزيل من موقع wiki وموقعنا الإلكتروني. لاحظ أنه نظرًا لأن الحزم فقط استخدام RPATH واجتياز خدمات الوثائق، وهي حزمة NDK التقليدية لا يمكن توثيق نظام التشغيل macOS. وستواصل حزمة SDK استخدام حزمة التطبيق التقليدية، نظرًا لأن حِزمة التطبيق تتطلب تغييرات في التنسيق قد يجعلها غير متوافقة مع Android Studio. إن NDK ليس ويتم عزلها عند تنزيلها عبر مدير حِزم SDK، يسمح بها مسؤول حماية البيانات. أداة إدارة حزمة تطوير البرامج (SDK) هي الأداة الأكثر طريقة موثوقة للحصول على NDK لنظام التشغيل macOS.
سجلّ التغييرات
عملية تنزيل
  • تتوفّر إمكانية تنزيل هذا الإصدار هنا.
الإشعارات
  • نموذج LLD متاح الآن للاختبار. تعمل شركة AOSP حاليًا على التبديل إلى استخدام "النموذج اللغوي الكبير" (LLD) بشكل تلقائي سيتابع NDK (المخطط الزمني غير معروف). اختبار LLD في تطبيقك من خلال اجتياز -fuse-ld=lld عند الربط.
  • سيحتاج "متجر Play" إلى التوافق مع إصدارات 64 بت عند تحميل APK بدءًا من أغسطس 2019. يمكنك بدء النقل الآن لتجنُّب المفاجآت عند يحين وقته. لمزيد من المعلومات، يُرجى مراجعة مشاركة المدونة هذه.
  • تمت إضافة واجهات برمجة تطبيقات Android Q.
سجلّ التغييرات
عملية تنزيل
  • تتوفّر إمكانية تنزيل هذا الإصدار هنا.
الإشعارات
  • على المطوّرين بدء اختبار تطبيقاتهم باستخدام LLD. لقد تحولت AOSP إلى استخدام ستستخدمه شركة LLD تلقائيًا خلال . ستتم إزالة BFD والمستوى الذهبي بعد إكمال دورة إصدار بدون مشكلات رئيسية لم يتم حلها (تقدير r21). اختبار LLD في تطبيقك من خلال تمرير -fuse-ld=lld عند الربط. ملاحظة: لا تتيح الدالة lld حاليًا استخدام الرموز المضغوطة على نظام التشغيل Windows. المشكلة 888. لا يمكن لأداة Clang أيضًا إنشاء رموز مضغوطة على Windows، ولكن هذا يمكن أن يكون مشكلة عند استخدام القطع الأثرية التي أنشأها داروين أو نظام التشغيل Linux.
  • سيحتاج "متجر Play" إلى التوافق مع إصدارات 64 بت عند تحميل APK بدءًا من أغسطس 2019. يمكنك بدء النقل الآن لتجنُّب المفاجآت عند يحين وقته. لمزيد من المعلومات، يُرجى مراجعة مشاركة المدونة هذه.
  • المشكلة 780: مستقل سلاسل الأدوات غير ضرورية الآن. وClang وbinutils وsysroot وقطع سلسلة الأدوات الأخرى مثبتة الآن $NDK/toolchains/llvm/prebuilt/<host-tag> وClang سيعثر عليها تلقائيًا. وبدلاً من إنشاء صفحة مستقلة لـ API 26 ARM، بدلاً من استدعاء المحول البرمجي مباشرة من NDK:
    $ $NDK/toolchains/llvm/prebuilt//bin/armv7a-linux-androideabi26-clang++ src.cpp
               
    بالنسبة لـ r19، يتم تثبيت سلسلة الأدوات أيضًا على المسار القديم لتحديد والأنظمة فرصة للتكيّف مع التخطيط الجديد. ستكون المسارات القديمة تمت إزالتها في r20. لن يتم تنفيذ النص البرمجي "make_standalone_toolchain.py" تمت إزالته. أصبح الإجراء غير ضروري الآن وسيصدر تحذيرًا بما ورد أعلاه. ولكن النص البرمجي سيحافظ على وحالات سير العمل. إذا كنت تستخدم ndk-build أو CMake أو سلسلة أدوات مستقلة، ينبغي ألا يكون لها أي تغيير في سير عملك. هذا التغيير مفيد الذين يتولون صيانة أنظمة التصميم التابعة لجهات خارجية، والذين من المفترض أن يكونوا قادرين الآن على حذف بعض الرموز الخاصة بنظام Android. لمزيد من المعلومات، يُرجى الاطّلاع على إنشاء دليل صيانة النظام
  • تمت إزالة التي تعتمد على ndk. نعتقد أن ReLinker حلّ أفضل لمشاكل تحميل مكتبة التطبيقات الأصلية على الإصدار القديم من نظام التشغيل Android مماثلة.
  • المشكلة 862: تمت إزالة النصوص البرمجية الخاصة ببرنامج تضمين GCC التي أُعيدت توجيهها إلى Clang، لأنها لا تؤدي وظائفها بدرجة كافية ليتم إسقاطها في البدائل.
سجلّ التغييرات
عملية تنزيل
  • تتوفّر إمكانية تنزيل هذا الإصدار هنا.
الإشعارات
  • تمت إزالة GCC.
  • نموذج LLD متاح الآن للاختبار. تعمل شركة AOSP حاليًا على التبديل إلى استخدام "النموذج اللغوي الكبير" (LLD) بشكل تلقائي سيتابع NDK (المخطط الزمني غير معروف). اختبار LLD في تطبيقك من خلال اجتياز -fuse-ld=lld عند الربط.
  • تمّت إزالة كل من gnustl وgabi++ وstlport.
  • تمت إزالة دعم ICS (android-14 وandroid-15). حملة التطبيقات استخدام الملفات التنفيذية لم يعد بحاجة إلى توفير كل من PIE وPIE ملف تنفيذي.
  • سيحتاج "متجر Play" إلى التوافق مع إصدارات 64 بت عند تحميل APK بدءًا من أغسطس 2019. يمكنك بدء النقل الآن لتجنُّب المفاجآت عند يحين وقته. لمزيد من المعلومات، يُرجى مراجعة مشاركة المدونة هذه.
سجلّ التغييرات
عملية تنزيل
  • تتوفّر إمكانية تنزيل هذا الإصدار هنا.
الإشعارات
  • لم تعُد خدمة GCC متاحة. ستتم إزالته في الإصدار NDK r18.
  • أصبحت libc++ الآن STL التلقائي لسلاسل الأدوات في CMake وسلاسل الأدوات المستقلة. في حال حذف إذا اخترت يدويًا STL مختلفًا، فننصحك بشدة نقل إلى libc++. تجدر الإشارة إلى أنّ ndk-build لا تزال القيمة التلقائية هي "لا". STL. لمزيد من التفاصيل، يُرجى مراجعة مشاركة المدونة هذه.
  • تم إيقاف gnustl وstlport نهائيًا في الإصدار NDK r18.
  • تم إيقاف دعم ARMv5 (armeabi) وMIPS وMIPS64. وستؤدي محاولة إنشاء أي من واجهات التطبيق الثنائية (ABI) هذه إلى حدوث خطأ.
  • ستتم إزالة دعم ICS (android-14 وandroid-15) من r18.
  • سيحتاج "متجر Play" إلى التوافق مع إصدارات 64 بت عند تحميل APK بدءًا من أغسطس 2019. يمكنك بدء النقل الآن لتجنُّب المفاجآت عند يحين وقته. لمزيد من المعلومات، يُرجى مراجعة مشاركة المدونة هذه.
سجلّ التغييرات
عملية تنزيل
  • تتوفّر إمكانية تنزيل هذا الإصدار هنا.
الإشعارات
  • وتمت إزالة العناوين المتوقّفة نهائيًا. أصبحت العناوين الموحّدة الآن ببساطة "العناوين". للحصول على نصائح بشأن نقل البيانات، يُرجى الاطّلاع على ملاحظات حول نقل العناوين الموحّدة
  • لم تعُد خدمة GCC متاحة. لن تتم إزالتها من NDK بعد، ولكن لم تعد استقبال المنافذ الخلفية. ولا يمكن إزالته إلا بعد أن تصبح libc++ مستقرة بما يكفي لتكون افتراضيًا، حيث لا تزال بعض أجزاء gnustl غير متوافقة مع Clang. وستتم إزالته عند تتم إزالة STL الأخرى في r18.
  • انتهت المرحلة التجريبية لـ "libc++" وأصبحت الآن STL المفضّل في إندونيسيا. بدءًا من r17، libc++ هي STL التلقائي لسلاسل الأدوات لإنشاء C وسلاسل الأدوات المستقلة. إذا حددت يدويًا STL (رقم STL) مختلف، نشجعك بشدة على الانتقال إلى libc++. لمزيد من التفاصيل، يُرجى مراجعة هذا مشاركة مدونة.
  • تم إيقاف دعم ARM5 (armeabi) وMIPS وMIPS64 نهائيًا. لن يتم إنشاؤها تلقائيًا بعد الآن باستخدام ndk-build، ولكنها لا تزال قابلة للإنشاء إذا تم تسميتها بشكل صريح، وسيتم تضمينها بواسطة "all"، و"all32" و"all64". وقد تمت إزالة الدعم لكل من هذه العناصر في الإصدار r17. كل من CMake وndk-build سيُصدر تحذيرًا في حال استهداف أي من واجهات التطبيق الثنائية (ABI) هذه.
واجهات برمجة التطبيقات

تمت إضافة واجهات برمجة التطبيقات الأصلية لنظام Android 8.1. لمزيد من المعلومات عن واجهات برمجة التطبيقات هذه، يمكنك الاطّلاع على نظرة عامة على واجهات برمجة التطبيقات الأصلية.

للحصول على مزيد من المعلومات عن الميزات الجديدة والميزات التي تم تغييرها في هذا الإصدار، يُرجى الاطّلاع على changelog.

سجلّ التغييرات
عملية تنزيل
  • تتوفّر إمكانية تنزيل هذا الإصدار هنا.
الإشعارات
  • تكون العناوين الموحّدة مفعّلة تلقائيًا. ولمعرفة كيفية استخدام هذه الرؤوس، راجع العناوين الموحدة:
  • ملاحظة: ستتم إزالة الرؤوس المتوقّفة نهائيًا في ملف . في حال واجهت أيّ مشاكل في هذه العناوين، يُرجى تقديم bug.

    للحصول على نصائح بشأن نقل البيانات، يُرجى الاطّلاع على ملاحظات نقل العناوين الموحّدة

  • لم تعُد خدمة GCC متاحة. لم تتم إزالتها من NDK بعد، ولكنها لم تعد تتلقى منافذ للخلف. ولا يمكن إزالته إلا بعد ثبات libc++ بما يكفي ليكون الإعداد الافتراضي، حيث إن بعض أجزاء لا يزال gnustl غير متوافق مع Clang.
  • لم يعُد الإصدار 2.3 (android-9) من نظام التشغيل Android متوافقًا. الحد الأدنى لمستوى واجهة برمجة التطبيقات المستهدف في أصبح NDK الآن بالإصدار 4.0 من نظام التشغيل Android (android-14). إذا تم ضبط APP_PLATFORM أقل من android-14، يتم استخدام android-14 بدلاً منها.
  • يدعم CMake in NDK الآن إنشاء رمز تجميع مكتوب بلغة YASM للتشغيل على x86 بُنى x86-64. لمزيد من المعلومات، يُرجى مراجعة رمز تجميع المبنى:
واجهات برمجة التطبيقات

تمت إضافة واجهات برمجة التطبيقات الأصلية لنظام Android 8.0. معرفة المزيد حول واجهات برمجة التطبيقات هذه، يمكنك الاطلاع على نظرة عامة على واجهات برمجة التطبيقات الأصلية.

للحصول على مزيد من المعلومات عن الميزات الجديدة والميزات التي تم تغييرها في هذا الإصدار، يُرجى الاطّلاع على changelog.

سجلّ التغييرات
عملية تنزيل
  • تتوفّر إمكانية تنزيل هذا الإصدار هنا.
الإشعارات
  • العناوين الموحّدة: يقدّم هذا الإصدار عناوين النظام الأساسي التي تتم مزامنتها. والمحافظة على دقتها وحداثتها دائمًا من خلال نظام Android الأساسي. إصلاح الأخطاء في عناوين URL فقط تؤثر على جميع مستويات واجهة برمجة التطبيقات. يؤدي إدخال الرؤوس الموحدة إلى إصلاح التناقضات في NDK السابقة الإصدارات، مثل:
    • العناوين في M وN كانت في الواقع عناوين لـ L.
    • لم تتطابق بيانات الدوال في العناوين مع مستويات النظام الأساسي الخاصة بها بشكل صحيح. تشير إلى عدم وجود دوال أو تعذّر إعلان الدوال المتوفرة.
    • كانت هناك ثوابت مفقودة أو غير صحيحة في العديد من مستويات واجهة برمجة التطبيقات القديمة كما كانت في واجهة برمجة التطبيقات الأحدث المستويات.

    وهذه العناوين الموحّدة الجديدة غير مفعَّلة تلقائيًا. ولمعرفة كيفية تفعيل هذه الأدوات واستخدامها الرؤوس، راجع العناوين الموحّدة:

  • إيقاف GCC: ينهي هذا الإصدار الدعم النشط لـ GCC. لا تتم إزالة GCC من NDK حتى الآن، ولكن لن يتلقى بعد الآن عمليات نقل خلفية. ونظرًا لأن بعض قفزة المرض لا تزال غير متوافق مع Clang، لن تتم إزالة GCC بالكامل إلا بعد أن تصبح libc++ مستقرة بما يكفي ليكون الإعداد الافتراضي.

للحصول على مزيد من المعلومات عن الميزات الجديدة والميزات التي تم تغييرها في هذا الإصدار، يُرجى الاطّلاع على changelog.

عملية تنزيل
  • تمت أرشفة المحتوى الذي تم تنزيله لهذا الإصدار. هنا.
الإشعارات
  • لم تعُد خدمة GCC متاحة. لن تتم إزالته من NDK فقط حتى الآن، ولكنها لم تعد تتلقى منافذ للخلف. لا يمكن إزالته حتى بعد أن تصبح libc++ مستقرة بما يكفي لتكون الافتراضية، حيث إن بعض الأجزاء من قبالة لا تزال غير متوافقة مع كلانغ. من المحتمل أن تتم إزالته بعد هذه المرحلة.
  • تمت الإضافة simpleperf، محلّل وحدة المعالجة المركزية (CPU) لـ Android.
r13b
كرونة دنماركية
  • يتم ضبط NDK_TOOLCHAIN_VERSION تلقائيًا الآن على Clang.
  • تم تحديث libc++ إلى r263688.
  • لقد أعدنا الضبط على (تقريبًا) نظيف. من المفترض أن يؤدي هذا إلى إزالة عدد من الأخطاء، لكننا ما زلنا بحاجة إلى تنظيف libandroid_support قبل وأوصي به كإعداد افتراضي.
  • أصبح make-standalone-toolchain.sh الآن مجرد برنامج تضمين إصدار بايثون من الأداة. هناك بعض الاختلافات السلوكية. يمكنك الاطّلاع على إتمام الرسالة للاطّلاع على التفاصيل.
  • تمت إزالة بعض مكتبات واجهات التطبيق الثنائية (ABI) غير المتوافقة (mips64r2 mips32r6 وmips32r2 وx32). ربما لا يزال هناك بعض المشتغلين.
  • مشاكل متعلقة بسياسة crtbegin_static.o التي أدّت إلى عدم تحديد نقطة الوصول عند الرابط الوقت الذي تم فيه إنشاء ملف ثابت قابل للتنفيذ لـ ARM android-21+ تم حلها: مشكلة 132
  • تمت إضافة ملف سلسلة الأدوات CMake في الإصدار Build/cmake/android.toolchain.cmake.
المشاكل المعروفة
  • ولا يُقصَد من هذه المجموعة أن تكون قائمة شاملة تحتوي على جميع الأخطاء المعلّقة.
  • ولا تعمل سلاسل الأدوات المستقلة التي تستخدم libc++ وGCC. يبدو أن هذا خطأ في دول مجلس التعاون الخليجي. عرض الالتزام جديدة للاطّلاع على مزيد من التفاصيل.
  • لم يتم الكشف بعد عن عناوين ومكتبات Bionic لـ Marshmallow وN على الرغم من استخدام android-24. هذه المنصات لا تزال هي رؤوس ومكتبات Lollipop (وليس التراجع عن r11).
  • أدوات RenderScript غير متوفّرة (ليست نتيجة تراجع عن الإصدار r11): المشكلة 7.
عملية تنزيل
  • تتم أرشفة عمليات تنزيل هذا الإصدار هنا.
الإشعارات
  • يتم ضبط الأمر ndk-build تلقائيًا على استخدام Clang في r13. سنزيل GCC في الإصدار اللاحق.
  • ستتم إزالة النص البرمجي "make-standalone-toolchain.sh" في r13. تأكَّد من أنّ make_standalone_toolchain.py يتناسب مع احتياجاتك.
  • يُرجى إبلاغ GitHub عن المشاكل.
R12B
  • لقد أصلحنا ndk-gdb.py. (المشكلة 118)
  • تم تحديث NdkCameraMetadataTags.h بحيث لم يعد يحتوي على قيمة غير صالحة قيمة التعداد.
  • يشير هذا المصطلح إلى خطأ في ndk-build يؤدي إلى ظهور تحذيرات كاذبة للمكتبات الثابتة التي تستخدم libc++ . النهج التحليلي. لمزيد من المعلومات حول هذا التغيير، يُرجى الاطّلاع على التعليقات هنا.
  • تم تعديل عناوين OpenSLES للإصدار android-24.
كرونة دنماركية
  • لقد أزلنا دعم واجهة التطبيق الثنائية (ABI) التي تستخدم الإصدار armeabi-v7a. لمزيد من المعلومات عرض شرح.
  • تمت إزالة جميع sysroots لمستويات النظام الأساسي قبل بريطانيا العظمى. توقفنا عن دعمهم في الإصدار r11 لكنّها أهملت إزالتها فعليًا.
  • أصبحت الآن معالجة الاستثناءات عند استخدام c++_shared على ARM32 تعمل في الغالب. ستفتح أداة إلغاء التخصيص الآن مرتبطة بكل كائن مرتبط بدلاً من libc++ نفسها. لمزيد من المعلومات عن التعامل مع الاستثناءات، يمكنك مراجعة المشاكل المعروفة:
  • تم اختصار علامات التجميع التلقائية. (المشكلة 27).
  • تمت إضافة تنفيذ سلاسل الأدوات المستقلة بلغة بايثون: build/tools/make_standalone_toolchain.py
    • لم يعد مستخدمو Windows بحاجة إلى Cygwin لاستخدام هذه الميزة.
    • سنزيل نكهة الباش في r13، لذا ننصحك باختبار الصيغة الجديدة الآن.
  • تم تفعيل -fno-limit-debug-info تلقائيًا لإصدارات تصحيح أخطاء Clang. من المفترض أن يؤدي هذا التغيير إلى تحسين قابلية تصحيح الأخطاء باستخدام LLDB.
  • أصبحت ميزة --build-id مفعّلة الآن تلقائيًا.
    • سيُعرض الآن رقم تعريف الإصدار في تقارير الأعطال المدمجة مع المحتوى لتسهيل تنفيذ الإجراءات التالية: لتحديد إصدار التعليمة البرمجية الذي كان قيد التشغيل.
  • من المفترض ألا تتسبب NDK_USE_CYGPATH في حدوث مشاكل مع libgcc بعد الآن. (نظام التشغيل Android المشكلة 195486)
  • -Wl و--warn-shared-textrel و-Wl,--fatal-warnings تم تمكين الخيارات افتراضيًا. إذا كنت قد شاركت في عمليات نقل النص، لن يكون بإمكان تطبيقك على نظام التشغيل Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث. لم يتم السماح مطلقًا بنقل النص لـ تطبيقات 64 بت
  • من المفترض أن تعمل العناوين المجمّعة مسبقًا بشكل أفضل. (المشكلة 14 المشكلة 16)
  • تمت إزالة مكتبات STL التي لا يمكن الوصول إليها.
  • تمت إضافة دعم Vulkan إلى android-24.
  • تمت إضافة Choreographer API إلى android-24.
  • تمت إضافة واجهات برمجة تطبيقات libcamera2 للأجهزة التي تتضمّن INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED أو أعلى. لمزيد من المعلومات، يُرجى مراجعة خصائص الكاميرا:
كلانغ
  • تم تحديث Clang إلى 3.8svn (r256229، الإصدار 2812033).
    • clang.exe وclang++.exe قابل للتنفيذ في 32 بت حزمة Windows هي بالفعل 64 بت. تتم تسمية ملف 32 بت القابل للتنفيذ clang_32.exe
  • من المفترض أن يعمل __thread بشكل فعلي هذه المرة.
دول مجلس التعاون الخليجي
  • تمت المزامنة مع نظام التشغيل ChromeOS GCC @ google/gcc-4_9 r227810.
  • لاصقة معقّم بغطاء خلفي من ToT (r231296).
  • تم إصلاح ليبوتومي لعدم استخدام ifuncs. (المشكلة 31)
بينتيلس
  • تم كتم صوت رسائل المعلومات حول "تم العثور على Erratum 843419 وتم إصلاحها".
  • تم تقديم الخيار --long-plt لإصلاح خطأ الربط الداخلي الذي يحدث عندما وربط برامج ثنائية ضخمة في Arm32.
  • تم إصلاح التنويهات الموجزة لوقت التشغيل الخاطئ لـ AArch64. كان هذا يتسبب في حساب عناوين الانتقال السريع. بشكل غير صحيح بالنسبة إلى كائنات DSO الكبيرة للغاية.
  • تم تقديم الخيار التلقائي --no-apply-dynamic للتغلب على خطأ الرابط الديناميكي في إصدارات Android السابقة.
  • لا يعمل NDK r11 KI لـ dynamic_cast مع Clang. لقد أصلحنا x86، stlport_static، والتحسين.
قاعدة البيانات الدولية
  • تم التحديث إلى الإصدار 7.11 من GDB. لمزيد من المعلومات، يُرجى الاطّلاع على أخبار GDB.
  • بعض إصلاحات الأخطاء في ndk-gdb.py.
المشاكل المعروفة
  • لا يزال x86 ASAN لا يعمل. لمزيد من المعلومات، راجع المناقشة حول قائمة التغيير هذه.
  • لا يزال إلغاء الاستثناء باستخدام c++_shared غير متوافق مع معالجات ARM. في Android 2.3 (المستوى 9 لواجهة برمجة التطبيقات) أو Android 4.0 (المستوى 14 من واجهة برمجة التطبيقات).
  • عناوين ومكتبات Bionic لنظام التشغيل Android 6.0 (المستوى 23 لواجهة برمجة التطبيقات) وAndroid 7.0 (مستوى واجهة برمجة التطبيقات 24) لم يتم الكشف عنها بعد على الرغم من توفُّر android-24. ولا تزال هذه الأنظمة الأساسية هي عناوين ومكتبات Android 5.0 (مستوى واجهة برمجة التطبيقات 21). (وليس انحدارًا من r11).
  • أدوات RenderScript غير متوفّرة (وهي ليست تراجعًا من الإصدار r11). (المشكلة 7)
  • لا يُقصَد من سجلّ التغييرات هذا أن يكون قائمة شاملة تحتوي على جميع الأخطاء المعلّقة.
عملية تنزيل
  • تتم أرشفة عمليات تنزيل هذا الإصدار هنا.
الإشعارات
  • سيتم ضبط الأمر ndk-build تلقائيًا على استخدام كلانغ في إصدار قادم. ستتم إزالة GCC في إصدار لاحق.
  • ستتم إزالة النص البرمجي "make-standalone-toolchain.sh". في إصدار قادم. إذا كنت تستخدم هذا النص البرمجي، يُرجى التخطيط للانتقال إلى make_standalone_toolchain.py في أقرب وقت ممكن.
كرونة دنماركية
  • تمت إزالة التوافق مع واجهة التطبيق الثنائية (ABI) armeabi-v7a-hard. يمكنك الاطّلاع على الشرح في ذات الصلة.
  • تمت إزالة جميع sysroots لمستويات النظام الأساسي التي تسبق Android 2.3 (المستوى 9 من واجهة برمجة التطبيقات). لقد تركنا دعمهم في الإصدار NDK r11، ولكننا أهملنا إزالتهما فعليًا.
  • تم تحديث معالجة الاستثناءات عند استخدام c++_shared على ARM32 لكي يصبح (يُرجى الاطّلاع على المشاكل المعروفة). استرخاء مرتبط الآن بكل كائن مرتبط بدلاً من libc++ نفسها.
  • تم اختزال علامات برنامج التجميع التلقائية (مشكلة NDK رقم 27). يمكنك الاطّلاع على تفاصيل هذا التحديث في تغيير 207721.
  • تمت إضافة عملية تنفيذ لسلاسل أدوات مستقلة بلغة Python في اللغة build/tools/make_standalone_toolchain.py. على نظام التشغيل Windows، لم تعد إلى Cygwin لاستخدام هذه الميزة. يُرجى العِلم أنّه ستتم إزالة نكهة الباش. في إصدار قادم، لذا يرجى اختبار الإصدار الجديد الآن.
  • تم ضبط إصدارات تصحيح أخطاء Clang لتتوافق مع -fno-limit-debug-info هذا الخيار مُفعَّلاً تلقائيًا. يتيح هذا التغيير تصحيح الأخطاء بشكل أفضل باستخدام LLDB.
  • تم تفعيل --build-id كخيار تلقائي. هذا الخيار في عرض معرّف في تقارير الأعطال المدمجة مع المحتوى، ما يتيح لك لتحديد إصدار التعليمة البرمجية الذي كان قيد التشغيل.
  • تم إصلاح مشكلة "NDK_USE_CYGPATH" لكي لا تكون مسببة مشاكل في libgcc (المشكلة 195486).
  • تم تفعيل الخيارات التالية كخيار تلقائي: "-Wl,--warn-shared-textrel" و-Wl,--fatal-warnings" إذا شاركت عمليات نقل النص، لن يتم تحميل تطبيقك على Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) والإصدارات الأحدث لاحظ أن هذا الإعداد لم يتم المسموح بها لتطبيقات 64 بت.
  • تم إصلاح بعض المشاكل لتعمل العناوين المجمّعة مسبقًا بشكل أفضل. (المشكلة 14 من NDK، المشكلة 16 من NDK).
  • تمت إزالة مكتبات STL التي لا يمكن الوصول إليها.
  • تمت إضافة دعم Vulkan إلى android-24.
  • تمت إضافة Choreographer API إلى android-24.
  • تمت إضافة واجهات برمجة تطبيقات libcamera2 للأجهزة التي تدعم مستوى الميزة INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED أو أعلى. لمزيد من المعلومات، يُرجى الاطّلاع على مرجع CameraCharacteristics.
كلانغ
  • تم تحديث Clang إلى 3.8svn (r256229، الإصدار 2812033). يعمل clang.exe الملفات التنفيذية لـ clang++.exe في حزمة Windows بإصدار 32 بت هي في الواقع نظام 64 بت. تشير رسالة الأشكال البيانية تتم تسمية برنامج 32 بت القابل للتنفيذ باسم clang_32.exe.
  • تم إصلاح __thread بحيث يعمل في الوقت الفعلي.
دول مجلس التعاون الخليجي
  • تمت مزامنة برنامج التجميع مع نظام التشغيل ChromeOS GCC @ google/gcc-4_9 r227810.
  • لاصقة معقّم بغطاء خلفي من ToT (r231296).
  • تم إصلاح libatomic لعدم استخدام ifuncs (المشكلة NDK 31).
بينتيلس
  • تم كتم صوت "تم العثور على جهاز Erratum 843419 وإصلاحه" المعلومات.
  • تم تقديم الخيار --long-plt لإصلاح خطأ في الرابط الداخلي. عند ربط ثنائيات Arm32 ضخمة.
  • تم إصلاح كعبات وقت التشغيل الخاطئة في AArch64. كانت هذه المشكلة يتسبب في حساب عناوين الانتقال بشكل غير صحيح للأحجام الكبيرة جدًا الكائنات المشتركة الديناميكية (DSOs).
  • تم تقديم الخيار التلقائي --no-apply-dynamic لحلّه. هو خلل في الرابط الديناميكي لإصدارات Android السابقة.
  • تم إصلاح مشكلة معروفة في الإصدار NDK r11 حيث لم يكن dynamic_cast والعمل باستخدام Clang وx86 وstlport_static والتحسين.
قاعدة البيانات الدولية
  • تم التحديث إلى الإصدار 7.11 من GDB. لمزيد من المعلومات حول هذا الإصدار، يُرجى الاطّلاع على أخبار GDB
  • تم إصلاح عدد من الأخطاء في نص ndk-gdb.py البرمجي.
المشاكل المعروفة
  • عنوان x86 لا يعمل المطهّر (ASAN) حاليًا. لمزيد من المعلومات، يُرجى مراجعة المشكلة 186276.
  • لا يتوافق إلغاء الاستثناء مع c++_shared مع معالجات ARM على Android 2.3 (المستوى 9 من واجهة برمجة التطبيقات) أو Android 4.0 (المستوى 14 من واجهة برمجة التطبيقات).
  • رؤوس ومكتبات Bionic لنظام التشغيل Android 6.0 (المستوى 23 لواجهة برمجة التطبيقات) والإصدارات الأحدث لم يتم الكشف عنها بعد على الرغم من توفُّر android-24. لا تزال هذه المنصات تحتوي على عناوين ومكتبات Android 5.0 (مستوى واجهة برمجة التطبيقات 21)، وهي متسقة باستخدام NDK r11.
  • أدوات RenderScript غير متوفرة، وهذا يتوافق مع الإصدار 11 من NDK. (المشكلة 7 من NDK)
  • في ملف العنوان NdkCameraMetadataTags.h، تم جمع البيانات الوصفية للكاميرا قيمة تعداد العلامة ACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP تم إدراجها عن طريق الخطأ وستتم إزالتها في الإصدار التالي. استخدام بقيمة ACAMERA_STATISTICS_LENS_SHADING_MAP بدلاً من ذلك.
التغييرات
  • تم تطبيق إصلاحات إضافية على النص البرمجي "ndk-gdb.py".
  • تمت إضافة وسيطة اسم حزمة اختيارية إلى ndk-gdb. الأمر --attach. (المشكلة 13)
  • تم إصلاح مسارات سلسلة الأدوات غير الصالحة لنظام التشغيل Windows إصدار 32 بت. (المشكلة 45)
  • تم إصلاح المسار النسبي للأمر ndk-which. (المشكلة 29)
  • تم إصلاح استخدام cygpath للمحول البرمجي لـ libgcc. (المشكلة 195486 في Android)
كرونة دنماركية
  • إعلانات مهمة
    • لقد نقلنا أداة تعقب الأخطاء إلى GitHub.
  • التغييرات
    • تم إصلاح ndk-gdb.py. كان لـ تراجعها كليًا في الإصدار r11.
    • ndk-gdb لنظام التشغيل Mac إصلاح المشكلة.
    • تمت إضافة المزيد من اختصارات المستوى الأعلى لأدوات سطر الأوامر:
      • ndk-depends.
      • ndk-gdb.
      • ndk-stack.
      • ndk-which هذا الأمر لم يكن حاضرًا تمامًا في الأقسام السابقة والإصدارات.
    • إصلاح سلاسل الأدوات المستقلة لـ libc++، والتي كانت غير موجودة __cxxabi_config.h
    • تم إصلاح مستندات المساعدة بشأن --toolchain في make-standalone-toolchain.sh
كلانغ
  • قائمة بالأخطاء
    • على عكس ما أبلغنا به في ملاحظات الإصدار r11، __thread لا يعمل. هذا لأن إصدار Clang الذي نشحنه يفتقر إلى إصلاح للخطأ دعم بروتوكول أمان طبقة النقل (TLS) الذي تمت محاكاته.
كلانغ
  • إعلانات مهمة
    • ننصحك بشدة بالتبديل إلى Clang.
      • إذا واجهت مشاكل مع Clang، أبلِغ عن الأخطاء يمكنك الانتقال إلى هذه الصفحة للاطّلاع على المشاكل. الخاصة بكلانغ في NDK. بالنسبة إلى مشاكل Clang الأكثر شيوعًا، الإبلاغ عن الأخطاء باتباع الإرشادات على هذه الصفحة.
    • تم تحديث Clang إلى 3.8svn (r243773، الإصدار 2481030).
      • هذه النسخة هي إصدار سابق تمامًا من Clang.
      • تحتوي حزمة NDK القابلة للتنزيل في Windows 64 بت على 32 بت من Clang.
  • الإضافات
    • الآن تتيح منصة Clang استخدام بروتوكول أمان طبقة النقل (TLS) الذي تتم محاكاته.
      • يدعم برنامج التجميع الآن __thread من خلال محاكاة ELF TLS مع البيانات الخاصة بسلسلة محادثات pthread
      • يمكن استخدام C+11 thread_local في بعض الحالات، ولكن لا للبيانات التي تحتوي على عوامل تسبّب غير تافهة، لأن هذه الحالات تتطلب الدعم من libc. لا يؤدي هذا القيد تسري عند استخدام نظام التشغيل Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) أو إصدار أحدث.
      • ولا تعمل ميزة محاكاة بروتوكول أمان طبقة النقل (TLS) بعد مع Aarch64 عندما يمكن الوصول إلى متغيرات بروتوكول أمان طبقة النقل (TLS) من مكتبة مشتركة.
دول مجلس التعاون الخليجي
  • إعلانات مهمة
    • تم إيقاف العمل بدول مجلس التعاون الخليجي في جمهورية إندونيسيا الديمقراطية لصالح Clang.
      • لن تتم ترقية NDK إلى الإصدار 5.x، ولن يتم قبولها العمليات الخلفية غير المهمة.
      • الصيانة لأخطاء التجميع غير الصحيح وأخطاء برنامج التحويل البرمجي الداخلي في 4.9 على أساس كل حالة على حدة.
  • عمليات الإزالة
    • تمت إزالة الإصدار 4.8 من GCC. تستخدم جميع الاستهدافات الآن الإصدار 4.9 من GCC.
  • التغييرات الأخرى
    • تمت مزامنة google/gcc-4_9 مع r224707. في السابق، كانت بالتزامن مع r214835.
كرونة دنماركية
  • إعلانات مهمة
  • الإضافات
    • تمت إضافة واجهة برمجة تطبيقات tracing API إلى android-23.
    • تمت إضافة واجهة برمجة تطبيقات محلية متعددة الشبكات إلى android-23.
    • تم تفعيل libc وm وdl لتوفير رموز ذات نُسخ مختلفة، بدءًا من من المستوى 21 لواجهة برمجة التطبيقات.
    • تمت إضافة عناوين Vulkan والمكتبة إلى المستوى N لواجهة برمجة التطبيقات.
  • عمليات الإزالة
    • تمت إزالة الدعم لـ _WCHAR_IS_8BIT.
    • تمت إزالة sed.
    • تمت إزالة mclinker.
    • تمت إزالة Perl.
    • تمت إزالتها من جميع إصدارات NDK libc وm وdl جميع الرموز التي لا تدعمها إصدارات النظام الأساسي من هذه المكتبات.
    • تمت إزالة الدعم لـ mips64r2 جزئيًا. ستتم إزالة باقي الشرائح في المستقبل.
  • التغييرات الأخرى
    • تم تغيير سلاسل الأدوات المستقلة من ARM إلى التشغيل التلقائي Arm7.
      • ويمكنك استعادة السلوك القديم من خلال تمرير الخيار "-target" على أنّه armv5te-linux-androideabi.
    • تم تغيير نظام التصميم لاستخدام "-isystem" للنظام الأساسي. على الموقع.
      • التحذيرات التي تؤدي إلى تعطّل إصدارات التطبيقات الحيوية بعد الآن.
    • تم إصلاح خطأ segError الذي حدث عند طرح استثناءات ثنائية عبر gabi++ (المشكلة 179410)
    • تم تغيير مساحة الاسم المضمّنة في libc++ إلى std::__ndk1 لمنع مشكلات ODR مع النظام الأساسي libc++.
    • تم إنشاء جميع مكتبات libc++ الآن باستخدام libc++abi.
    • تم ربط APP_PLATFORM التلقائي إلى Gingerbread.
      • من المتوقع أن تنخفض الدعم لجهاز Froyo والأجهزة الأقدم في الإصدار المستقبلي.
  • تم تعديل بنية gabi++ _Unwind_Exception لمدّة 64 بت.
  • تمت إضافة الإمكانات التالية إلى cpufeatures:
    • اكتشف SSE4.1 وSSE4.2.
    • اكتشاف ميزات وحدة المعالجة المركزية (CPU) على x86_64
  • تحديث libc++abi إلى العنوان الرئيسي r231075.
  • تاريخ التعديل: byteswap.h وendian.h وsys/procfs.h sys/ucontext.h وsys/user.h وuchar.h من ToT Bionic.
  • تمت مزامنة sys/cdefs.h على جميع مستويات واجهة برمجة التطبيقات.
  • تم إصلاح fegetenv and fesetenv لمجموعة التجربة.
  • إصلاح حجم/محاذاة مؤشر النهاية crtend_* للعدد mips64 وx86_64.
بينتيلس
  • الإضافات
    • تمت إضافة خيار جديد: --pic-veneer.
  • عمليات الإزالة
    • لم تعد حزمة Windows 32 بت تحتوي على ld.gold. وبدلاً من ذلك يمكنك الحصول على ld.gold من حزمة Windows 64 بت.
  • التغييرات
    • مصدر binutils الموحّد بين Android وChromeOS. لمزيد من المعلومات حول هذا التغيير، يُرجى الاطّلاع على التعليقات هنا
    • تم تحسين موثوقية الذهب لـ aarch64. استخدام -fuse-ld=gold في وقت الرابط لاستخدام الذهب بدلاً من Bfd. ومن المرجّح أن يتم تبديل الإعدادات التلقائية في الإصدار التالي.
    • تحسين وقت الربط للثنائيات الضخمة للواجهة الخلفية لـ Gold ARM (تقليل وقت الربط بما يصل إلى% 50 في متصفّح Chrome القابل للتصحيح)
قاعدة البيانات الدولية
  • عمليات الإزالة
    • تمت إزالة 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) التي تستخدمها libc++abi. لـ ARM32 وlibgcc. هذا السلوك ليس انحدارًا من r10e.
عملية تنزيل
  • تتم أرشفة عمليات تنزيل هذا الإصدار هنا.
تغييرات مهمة:
  • تم دمج الحلّ البديل لجهاز Cortex-A53 Erratum 843419 في رابط "aarch64-linux-android-4.9" لمزيد من المعلومات حول هذا الحل، يمكنك الاطلاع على حل مشكلة cortex-a53 الخطأ 843419
  • تمت إضافة Clang 3.6؛ يختار NDK_TOOLCHAIN_VERSION=clang هذا الإصدار الآن. من Clang افتراضيًا.
  • تمت إزالة Clang 3.4.
  • تمت إزالة الإصدار 4.6 من GCC.
  • تم تنفيذ دعم سلاسل المحادثات المتعددة في ld.gold لجميع البُنى. مُمْكِنْ والآن تتيح الربط مع التوافق مع سلاسل المحادثات المتعددة أو بدونها، فإن الوضع الافتراضي هو القيام به بدونه.
    • لإجراء التجميع باستخدام سلاسل المحادثات المتعددة، استخدِم الخيار --threads.
    • للتجميع بدون سلاسل محادثات متعددة، استخدِم الخيار --no-threads.
  • تمت ترقية GDB/gdbserver إلى 7.7 لجميع البُنى.
  • تمت إزالة حزمة NDK الخاصة بـ Darwin 32 بت.
إصلاح الأخطاء المهمة:
  • تم إصلاح عطل كان يحدث عندما كانت هناك حلقات 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. لمزيد من المعلومات، يُرجى الاطّلاع على مشكلة "النموذج اللغوي الكبير" (LLVM). 20098.
  • تم إصلاح أعطال Clang 3.5 التي حدثت في تعليقات بخلاف ASCII. (المشكلة 81440)
  • تم إصلاح stlport collate::compare لعرض -1 و1. في السابق، عرض أرقامًا موقعة عشوائية.
  • تم إصلاح ndk-gdb لواجهات التطبيق الثنائية (ABI) 64 بت. (المشكلة 118300)
  • تم إصلاح العطل الذي كانت ينتج عنه عينة HelloComputeNDK لـ RenderScript. Android 4.4 (المستوى 19 من واجهة برمجة تطبيقات Android). لمزيد من المعلومات، يُرجى مراجعة هذه الصفحة.
  • تم إصلاح libc++ __wrap_iter لـ GCC. لمزيد من المعلومات، يُرجى الاطّلاع على مشكلة "النموذج اللغوي الكبير" (LLVM). 22355.
  • تم إصلاح دعم .asm لواجهة ABI x86_64.
  • تم تنفيذ حل بديل لمشكلة stlport 4.8 في GCC. (المشكلة 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).
  • تمت إضافة اتفاقية الخدمة الرئيسية (MSA) ورصد R6 بشأن بروتوكول MIPS إلى cpu-features.
تغييرات مهمة:
  • تم جعل GCC 4.8 هو الإعداد التلقائي لجميع واجهات التطبيق الثنائية (ABI) 32 بت. إصدار GCC 4.6 الذي تم إيقافه سيزيله الإصدار التالي. لاستعادة السلوك السابق، يمكنك إضافة NDK_TOOLCHAIN_VERSION=4.6 مطلوب تصميمه أو إضافة --toolchain=arm-linux-androideabi-4.6 عند التنفيذ make-standalone-toolchain.sh في سطر الأوامر. يظل الإصدار 4.9 من GCC الإعداد التلقائي لواجهات التطبيق الثنائية (ABI) 64 بت.
  • تم إيقاف جميع سلاسل الأدوات x86[_64] من إضافة -mstackrealign تلقائيًا. تشير رسالة الأشكال البيانية تفترض سلسلة أدوات NDK محاذاة مكدس بحجم 16 بايت. الأدوات والخيارات المستخدمة بشكل افتراضي فرض هذه القاعدة. يجب أن يتأكد المستخدم الذي يكتب رمز التجميع من الاحتفاظ بالحزمة والتأكد من التزام برامج التحويل البرمجي الأخرى أيضًا بهذه القاعدة. (خطأ في GCC 38496)
  • تمت إضافة وظيفة Address Sanitizer إلى دعم Clang 3.5 لدعم ARM وx86 ABI. لمزيد من المعلومات عن هذا التغيير، يُرجى الاطّلاع على العنوان مشروع المطهّر
  • تم تقديم المتطلبات، بدءًا من المستوى 21 من واجهة برمجة التطبيقات، لاستخدام -fPIE -pie عند الإنشاء. في المستوى 16 من واجهة برمجة التطبيقات والمستويات الأعلى، تستخدم لعبة ndk-build PIE عند الإنشاء. وينطوي هذا التغيير على عدد من الآثار، والتي تمت مناقشتها في مشكلة معاينة المطوّر 888. ولا تنطبق هذه النتائج على المكتبات المشتركة.
إصلاح الأخطاء المهمة:
  • تم إجراء المزيد من الإصلاحات المتعلقة A53 Errata #835769 في رابط aarch64-linux-android-4.9. وكجزء من هذا البرنامج، ينقل خيارًا جديدًا، وهو --fix-cortex-a53-835769، عند تم تحديد -mfix-cortex-a53-835769 (مفعَّل تلقائيًا). لمزيد من المعلومات، يُرجى الاطّلاع على رسالة binutils وهذا رسالة binutils.
  • تم توثيق حلّ مشكلة تعليق libc++ sscanf/vsscanf الذي حدث على مستوى واجهة برمجة التطبيقات. 21- وقد تم تنفيذ الإصلاح نفسه في r10c. (المشكلة 77988)
  • تم إصلاح عطل AutoFDO (-fauto-profile) الذي حدث مع GCC 4.9 عند تم تحديد -Os. (المشكلة 77571)
إصلاحات أخرى للأخطاء:
  • تم إجراء إصلاحات العناوين والمكتبة التالية:
    • تمّت إضافة 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
    • ابتداءً من unsigned long لتنظيم user_regs_struct*.
    • تم تغيير نوع القيمة المعروضة 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 بت من استخراج البيانات على الإصدار 14.04 من نظام التشغيل Ubuntu OS X 10.10 (Yosemite). (المشكلة 78148)
  • تم إصلاح المشكلة في LOCAL_PCH لتحسين التوافق مع Clang. (المشكلة 77575)
  • تمت إضافة توضيح "يتطلب حِزمًا قابلة للتنفيذ" تحذير من ld.gold (المشكلة 79115)
تغييرات مهمة:
  • تم إجراء التغييرات التالية على بنية التنزيل:
    • تحتوي كل حزمة الآن على رؤوس 32 و64 بت والمكتبات والأدوات الخاصة منصتها الخاصة.
    • لم يعُد هناك حاجة إلى تنزيل مكتبات STL التي تتضمّن معلومات تصحيح الأخطاء بشكل منفصل.
  • تم تغيير كل الميزات السابقة التي كان يُطلق عليها "Android-L" إلى الإصدار الرسمي. التصنيف: android-21.
  • تم تعديل الإصدار 4.9 من GCC من خلال إعادة التوجيه إلى فرع google. لمستودع دول مجلس التعاون الخليجي. تشمل الاختلافات الرئيسية عن الإصدار الرئيسي من GCC 4.9 ما يلي:
    • يؤدي الخيار -O2 الآن إلى تفعيل اتجاه المتّجهات، بدون نزع التكرار الحلقي ولكن مع عملية فتح قوية.
    • تحسينات على FDO و ليبو
    • للحصول على معلومات أكثر تفصيلاً، يمكنك الاطّلاع على إصلاحات الأخطاء المهمة أدناه.

  • تمت إضافة دعم Clang 3.5 لجميع المضيفين: NDK_TOOLCHAIN_VERSION=clang يختار الآن Clang 3.5. تجدر الإشارة إلى ما يلي:
    • تستخدم كل من ARM وx86 أداة التجميع المدمجة تلقائيًا. وإذا تسبب هذا في حدوث مشكلات، فاستخدم -fno-integrated-as كحل بديل.
    • تُصدر Clang 3.5 تحذيرات إضافية بشأن العلامات غير المستخدمة، مثل -finline-functions الذي تدعمه دول مجلس التعاون الخليجي.
    • عند النقل من المشاريع باستخدام GCC، يمكنك استخدام -Wno-invalid-command-line-argument و-Wno-unused-command-line-argument وتجاهل العلامات غير المستخدمة إلى أن تتمكن من تحديد ما يجب فعله بها على المدى الطويل.

  • إتاحة الدخول إلى وضع تصحيح الأخطاء ART، عند تصحيح الأخطاء على جهاز Android 5.0 باستخدام ART كجهازها الافتراضي، من خلال تحديد الخيار art-on. لمزيد من المعلومات راجِع prebuilt/common/gdb/common.setup في الدليل الذي يحتوي على NDK.
  • تمت إزالة التوافق مع Clang 3.3.
  • تم إيقاف الإصدار 4.6 من GCC، وقد تتم إزالته من الإصدارات المستقبلية.
  • تم تعديل mclinker إلى الإصدار 2.8 من خلال إتاحة ميزة "طي الرمز البرمجي نفسه" (ICF). حدد ICF باستخدام الخيار --icf.
  • تم توسيع نطاق دعم arm_neon.h بالمعالجات x86 وx86_64، ما ساهم في تغطية حوالي 93% من عناصر NEON. لمزيد من المعلومات حول دعم NEON:
    • يُرجى الانتقال إلى دليل مبرمج NDK (docs/Programmers_Guide/html/) والاطّلاع على الهندسة المعمارية ووحدة المعالجة المركزية (CPU) > نيون.
    • يمكنك فحص نموذج hello-neon المعدّل في samples/.
    • يمكنك الاطّلاع على دليل Intel حول النقل من ARM NEON إلى Intel SSE.
  • دعم موثّق لـ _FORTIFY_SOURCE باللغة headers/libs/android-21 الذي ظهر في r10 (عندما كان android-21 لا يزال يسمى Android-L)، ولكن لم يكن لديه وثائق.
إصلاح الأخطاء المهمة:
إصلاحات أخرى للأخطاء:
  • تم إجراء إصلاحات العناوين والمكتبة التالية لـ 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. هذا الدعم كان غير موجود في r10 وr10b لأن هاتين النسختين من دول مجلس التعاون الخليجي قد تم تجميعها باستخدام binutils-2.24، وهو ما قامت به لا تدعم MXU. وهو الآن يفعل ذلك.
  • تم إصلاح --toolchain= في make-standalone-toolchain.sh بحيث الآن تدعم بشكل صحيح استخدام لاحقة تحدد نسخة من Clang.
  • تم إصلاح دوال libc++/armeabi strtod().
  • تم إجراء إصلاحات على مستندات NDK في docs/.
تغييرات أخرى:
  • تم تحسين "cpu-features" لرصد دعم ARMv8 لما يلي: مجموعات التعليمات التالية: AES وCRC32 وSHA2 وSHA1 و64 بت PMULL/PMULL2. (المشكلة 106360).
  • إصدار ndk-build معدَّل لاستخدام *-gcc-ar، والمتاح في الإصدار 4.8 من GCC والإصدار 4.9 من GCC، نغمة. يحدده Clang بدلاً من *-ar. يؤدي هذا الإعداد إلى تحسين إمكانية الوصول إلى المستندات (LTO) والدعم.
  • تمت إزالة include-fixed/linux/a.out.h و include-fixed/linux/compiler.h من عناوين برنامج التحويل البرمجي لـ GCC. (المشكلة 73728)
  • تم إصلاح مشكلة ذات صلة بـ -flto في الإصدار 4.8 من GCC على نظام التشغيل Mac OS X. رسالة الخطأ مقروءة:
  • .../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so
    Symbol not found: _environ
    
  • تم إصلاح خطأ إملائي في build-binary.mk. (المشكلة 76992)
مشاكل مهمة معروفة:
  • قد يؤدي تحديد -Os (-fauto-profile) في GCC4.9 إلى حدوث تعطُّل. (المشكلة 77571)
ملاحظات مهمة:
  • بسبب قيود الحجم 512 ميغابايت على الحزم القابلة للتنزيل، فإن العناصر التالية بنظام 32 بت ليست ضمن حزم تنزيل NDK 32 بت. وبدلاً من ذلك، تتوفّر في الإصدار 64 بت:
    • عناوين Android-L
    • GCC 4.9
  • في الوقت الحالي، لا يدعم Renderscript سوى استخدام Renderscript 32 بت مع Android 4.4 (المستوى 19 من واجهة برمجة التطبيقات). لا يمكنك إنشاء HelloComputeNDK (نموذج Renderscript الوحيد) مع أي تركيبة أخرى من Renderscript (32 أو 64 بت) وإصدار Android.
  • لتجميع برنامج ترميز أصلي، يجب استخدام حزمة NDK 64 بت، حيث توجد جميع عناوين Android-L.
إصلاح الأخطاء المهمة:
  • تم إصلاح gdb 7.6 في GCC 4.8/4.9. (المشكلتان 74112 و74371.)
  • تم إصلاح GCC 4.8/4.9 للتوافق مع x86، بحيث لا يتم تفعيل -msse4.2 و-mpopcnt تلقائيًا بعد ذلك. (المشكلة 73843.)
إصلاحات أخرى للأخطاء:
  • تمت إزالة 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:
    1. تمت إضافة الدوال التالية إلى 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().
    2. تمت إعادة تسمية "cmsg_nxthdr" إلى "__cmsg_nxthdr".
    3. تمت إزالة __libc_malloc_dispatch.
    4. تم تغيير النموذج الأولي "ptrace()" إلى long ptrace(int, ...);.
    5. تمت إزالة sha1.h.
    6. تم تمديد android_dlextinfo في android/dlext.h.
    7. تمت إضافة تعليقات توضيحية إلى __NDK_FPABI__ للدوال التي تتلقّى أو تعرض قيمًا عائمة أو مزدوجة النوع في stdlib.h وtime.h وwchar.h وcomplex.h.
تغييرات أخرى:
  • تم تحديث mipsel-linux-android-4.9 وmips64el-linux-android-4.9، وتنفيذ تنسيق جديد للدليل متعدد العناصر، وتقديم الدعم لـ gdb-7.7
  • تم تحسين cpu-features لاكتشاف المزيد من ميزات Arm64. (قائمة التغيير 100339).
تغييرات مهمة:
  • تمت إضافة 3 واجهات ABI جديدة، جميعها 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-preview فقط. سيحل رقم مستوى واجهة برمجة التطبيقات الفعلي محله في إصدار حرف 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" جميع واجهات التطبيق الثنائية (ABI).
    • يحتوي الإصدار الجديد من GNU libstdc++ في Android-L على جميع <tr1/cmath> قبل تحديد الدالة الرياضية الخاصة بك، ضَع علامة في المربّع _GLIBCXX_USE_C99_MATH_TR1 لمعرفة بهذا الاسم بالفعل، وذلك لتجنب "التعريف المتعدد" الأخطاء من .
    • تم تحديث مكتبة ميزات وحدة المعالجة المركزية (CPU) للحصول على نواة ARMv8. الحالي قد يتعذر على مكتبة cpu-features اكتشاف وجود NEON على النظام الأساسي ARMv8. قم بإعادة تجميع مع الإصدار الجديد.
  • تمت إضافة دليل واجهة برمجة تطبيقات platforms/android-L/ جديد. ويشتمل هذا البرنامج على:
    • عناوين Bionic المُعدَّلة التي لم تتغير من مستويات واجهة برمجة تطبيقات Android 3 (Cupcake) إلى 19 (KitKat). ستتم مزامنة هذا الإصدار الجديد، للمستوى L، مع AOSP.
    • واجهات برمجة تطبيقات جديدة للوسائط ونموذج برنامج ترميز أصلي
    • عنوان Android.h معدَّل لـ SLES/OpenSLES، ما يتيح التوافق مع تنسيق صوتي أحادي الدقة وعائم في مشغِّل الصوت
    • إضافات 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 بشكل صريح، ولا يزال الإصدار 4.6 من GCC هو الخيار التلقائي.
    • بالنسبة إلى لعبة 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++.
    • يمكن الآن للإصدار 4.7 من GCC والإصدارات الأحدث استخدام <atomic>.
    • يجب إضافة -fno-strict-aliasing إذا كنت تستخدم <list>، لأن __list_imp::_end_ من الفواصل قواعد TBAA. (المشكلة 61571.)
    • اعتبارًا من الإصدار 4.6 من GCC، لم يعد LIBCXX_FORCE_REBUILD:=true يعيد إنشاء libc++. إعادة البناء يتطلب استخدام برنامج تجميع مختلف. يُرجى العِلم أنّ Clang 3.3 لم يتم اختباره.
  • وأصبح الأمر mclinker هو الإصدار 2.7، كما أنه يدعم نظام aarch64 في نظام التشغيل Linux.
  • تمت إضافة إمكانية استخدام عناوين مجمّعة مسبقًا للعناوين التي تحدّدها LOCAL_PCH. (المشكلة 25412).
إصلاح الأخطاء المهمة:
  • تم إصلاح libc++ بحيث يجمع الآن std::feof، وما إلى ذلك (المشكلة 66668).
  • تم إصلاح استدعاء المكتبة الذرية Clang 3.3/3.4 الذي تسبب في حدوث أعطال في بعض libc++ لاختبارات ABI ARmeabi.
  • تم إصلاح أعطال Clang 3.4 التي كانت تحدث عند قراءة العناوين المجمعة مسبقًا. (المشكلة 66657).
  • تم إصلاح الثغرة الأمنية Clang 3.3/3.4 -O3 في:
  • llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* llvm::MDBuilder::createBranchWeights(llvm::ArrayRef): Assertion Weights.size() >= 2 && "Need at least two branch weights!" (المشكلة 57381).
  • تم إصلاح العطل التالي في Clang 3.3/3.4:
  • 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).
إصلاحات أخرى للأخطاء:
  • عناوين ثابتة:
    • تم إصلاح 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. نص رسالة التحذير:
  • include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int); (قائمة تغيير 91185)
  • تم إصلاح make-standalone-toolchain.sh --stl=libc++ بحيث:
    • النُسخ cxxabi.h. (المشكلة 68001).
    • يتم تشغيله في أدلة غير دليل تثبيت NDK. (المشكلتان 67690 و68647).
  • تم إصلاح GCC/Windows لاقتباس الوسيطات عند الضرورة فقط لعمليات النشر في والبرامج الخارجية. ويؤدي هذا التغيير إلى تقليل احتمال تجاوز الحد الأقصى المسموح به وهو 32 ألفًا.
  • تم إصلاح مشكلة جعلت من المستحيل تعديل APP_PLATFORM متغير البيئة.
  • تم إصلاح تنفيذ IsSystemLibrary() في crazy_linker بحيث يستخدم strrchr() بدلاً من strchr() للعثور على الاسم الأساسي الحقيقي لمسار المكتبة.
  • تم إصلاح عدم قدرة الصوت الأصلي على الإنشاء في وضع تصحيح الأخطاء.
  • تم إصلاح عدم قدرة gdb على طباعة أرقام النقاط العائمة للغاية. (المشكلة 69203).
  • تم إصلاح عدم قدرة Clang 3.4 على التجميع باستخدام -Wl,-shared (بدلاً من -shared، الذي ولم تواجه أي مشاكل في التجميع). كانت المشكلة أنّ Clang أضافت تطبيق -pie لأجهزة Android. المستهدفة في حالة عدم وجود -shared أو -static. وهذا السلوك، والذي كان غير صحيح، جعل الرابط يشتكي من أن -shared و-pie لم يتمكن مع بعضها البعض.
تغييرات أخرى:
  • تمت إضافة arm_neon.h إلى سلسلة الأدوات x86 بحيث يحاكي الآن حوالي 47% من نيون. ولا يتوفر حاليًا أي دعم لأنواع 64 بت. لمزيد من المعلومات، راجِع القسم الذي يتناول ARM دعم عناصر نيون الأساسية في المستندات x86.
  • تحسين ARM/GOT_PREL المنقول (متوفر في الإصدار 4.6 من GCC، والذي تم إنشاؤه من فرع Google في دول مجلس التعاون لدول مجلس التعاون لدول آسيا) إلى ARM GCC 4.8/4.9. يؤدي هذا التحسين أحيانًا إلى تقليل عدد التعليمات عند الوصول إلى البيانات المتغيرات. على سبيل المثال، يمكنك مشاهدة النص البرمجي Build.sh في $NDK/tests/build/b14811006-GOT_PREL-optimization/
  • تمت إضافة إصدار ARM لـ STL gabi++ وstlport وlibc++. وأصبح لديهم الآن أيضًا الحالي.
  • من الممكن الآن استدعاء النص البرمجي make-tainalone-toolchain.sh مع --toolchain=x86_64-linux-android-4.9، أي ما يعادل --toolchain=x86_64-4.9
تغييرات مهمة:
  • تمت إضافة دعم للمحول البرمجي Clang 3.4. تشير رسالة الأشكال البيانية يختار الآن الخيار NDK_TOOLCHAIN_VERSION=clang الإصدار 3.4 من Clang. الإصدار 4.6 من GCC لا يزال برنامج التجميع الافتراضي.
  • تمت إضافة APP_ABI=armeabi-v7a-hard، مع خيار إضافي متعدد العناصر -mfloat-abi=hard. هذه الخيارات مخصصة تستخدمهما مع ARM GCC 4.6/4.8 وClang 3.3/3.4 (والتي تستخدم أداة التجميع وأداة الربط 4.8 وlibs). عند استخدام هذه الخيارات، يُرجى ملاحظة التغييرات التالية:
    • عند تنفيذ النص البرمجي ndk-build، أضِف الخيارات التالية لهدف armeabi-v7a:
      TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1
      TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
      تم نسخ المكتبة التي تم إنشاؤها إلى libs/armeabi-v7a. لـ كما هو متوقع، فلا يمكنك تحديد كل من armeabi-v7a armeabi-v7a-hard كأهداف (مثلاً، في سطر APP_ABI). وذلك لأن ذلك يؤدي إلى تجاهل أحد هذه العناصر. يُرجى العِلم أنّ APP_ABI=all لا يزال يعادل armeabi armeabi-v7a x86 mips
    • نُسخ النص البرمجي "make-standalone-toolchain.sh" مكتبات إضافية ضمن أدلة /hard. أضِف CFLAGS وLFLAGS أعلاه إلى ملف 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++ التجريبي (upstream 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)
إصلاح الأخطاء المهمة:
  • تم إصلاح رمية غير مرتقبة من منظور غير متوقع معالج استثناء GCC 4.6/4.8 ARM EABI. (مشكلة مجلس التعاون الخليجي 59392)
  • تم إصلاح الإصدار 4.8 من GCC بحيث يؤدي الآن بشكل صحيح إلى حل الأجزاء تخصص من قالب مع وسيطة نموذج تابعة وغير نوع. (مشكلة مجلس التعاون الخليجي 59052)
  • تمت إضافة المزيد من الوحدات إلى لغة python المصممة مسبقًا (المشكلة 59902):
    • Mac OS X: zlib، bz2، _curses، _curses_panel، _hashlib، _ssl
    • نظام التشغيل Linux: zlib، nis، crypt و_curses و_curses_panel
  • تم إصلاح خادم gdbserver لـ x86 وMIPS event_getmsg_helper
  • تم إصلاح العديد من المشاكل في سلسلة أدوات RenderScript NDK، بما في ذلك مشكلات في التوافق عبر الأجهزة القديمة وانعكاس C++.

إصلاحات أخرى للأخطاء:
  • إصلاحات العناوين:
    • تم إصلاح خطأ #include <sys/types.h> في android/asset_manager.h للمستوى 13 من واجهة برمجة تطبيقات Android والمستويات الأعلى. (المشكلة 64988)
    • تم إصلاح خطأ #include في android/rect_manager.h للمستوى 14 من واجهة برمجة تطبيقات Android والمستويات الأعلى.
    • تمت إضافة JNICALL إلى JNI_OnLoad و JNI_OnUnload في jni.h. يُرجى العِلم أنّ JNICALL على أنه __NDK_FPABI__ لمزيد من المعلومات، راجع sys/cdefs.h
    • تم تحديث العناوين التالية بحيث يمكن تضمينها دون الحاجة إلى تضمين ملحقاتها يدويًا (المشكلة 64679):
    • android/tts.h
      EGL
      /eglext.h
      fts
      .h
      GLES
      /glext.h
      GLES2
      /gl2ext.h
      OMXAL
      /OpenMAXSL_Android.h
      SLES
      /OpenSLES_Android.h
      sys
      /prctl.h
      sys
      /utime.h
    • تمت إضافة sys/cachectl.h لكل البُنى الأساسية. MIPS يمكن لمطوّري البرامج الآن تضمين هذا العنوان بدلاً من كتابة #ifdef __mips__.
    • تم إصلاح platforms/android-18/include/android/input.h عن طريق إضافة __NDK_FPABI__ إلى الدوال التي يتم أخذها أو إعادة عرضها القيم العائمة أو المزدوجة.
    • تم إصلاح MIPS struct stat، والذي تم ضبطه بشكل غير صحيح لنظيرتها 64 بت للمستوى 12 من واجهة برمجة تطبيقات Android والإصدارات الأحدث. هذا الجزء غير صحيح الإعداد كان الانحدار الذي تم تقديمه في الإصدار r9c.
    • تم تحديد __PTHREAD_MUTEX_INIT_VALUE، __PTHREAD_RECURSIVE_MUTEX_INIT_VALUE, و__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE لواجهة برمجة تطبيقات Android من المستوى 9 والأقل.
    • تمت إضافة scalbln وscalblnf و من scalblnl إلى x86 libm.so للإصدار 18 من واجهات برمجة التطبيقات والإصدارات الأحدث
    • تم إصلاح خطأ إملائي في sources/android/support/include/iconv.h (المشكلة 63806)
  • إصلاح gabi++ std::unexpected() للاتصال به std::terminate() بحيث يمكن تشغيل معالج std::terminate() الذي يحدّده المستخدم.
  • تم إصلاح gabi++ لالتقاط std::nullptr.
  • عينات ثابتة لأوعية الشاي والمزيد من الشاي:
    • حل مشكلة في رقائقتي Tegra 2 و3 من خلال تغيير المنظر المختلفة لاستخدام دقة متوسطة. يمكن الآن أن تكون قيم القوة الكهربية أقل من 1.0.
    • تم تغيير النماذج بحيث يؤدي الضغط على زر مستوى الصوت إلى استعادة الوضع المجسم ويؤدي إلى إلغاء صلاحية الرسائل SYSTEM_UI_FLAG_IMMERSIVE_STICKY لا يمكن لتدوير الشاشة تشغيل onSystemUiVisibilityChange، وبالتالي لا تستعيد وضع مجسم.
  • تم إصلاح النص البرمجي "ndk-build" المطلوب إضافته -rpath-link=$SYSROOT/usr/lib و -rpath-link=$TARGET_OUT لاستخدام ld.bfd من أجل القابلة للتنفيذ للروابط. (المشكلة 64266)
  • تمت إزالة "-Bsymbolic" من جميع إصدارات STL.
  • تم إصلاح ndk-gdb-py.cmd من خلال ضبط SHELL على متغيّر بيئة بدلاً من تمريره إلى python.exe، والذي يتجاهل الإعداد. (المشكلة 63054)
  • تم إصلاح النص البرمجي make-standalone-toolchain.sh بحيث ينسخ الخيار --stl=stlport عناوين gabi++ بدلاً من ارتباطهما الرمزي؛ لا يفهم صدف cmd.exe وminGW الارتباطات الرمزية التي تم إنشاؤها بواسطة سيغوين.
تغييرات أخرى:
  • تم تطبيق أذونات التنفيذ على كل النصوص البرمجية البالغ عددها *cmd. كانت مُعدَّة للاستخدام سابقًا في واجهة cmd.exe فقط، في حال يفضل المطوّرون استخدام ndk-build.cmd في cygwin بدلاً من نص ndk-build مقترح.
  • تم تحسين سرعة make-standalone-toolchain.sh. عن طريق الانتقال بدلاً من النسخ إذا كان دليل الوجهة المحدد غير موجود.

هذا إصدار مخصّص لإصلاح الأخطاء فقط.

إصلاح الأخطاء المهمة:
  • تم إصلاح مشكلة في GCC 4.8 ARM، والتي يكون فيها مؤشر تسلسل استدعاء الدوال البرمجية تمت استعادتها في وقت مبكر جدًا. هذه المشكلة منعت مؤشر الإطار من الوصول بشكل موثوق الوصول إلى متغير في إطار المكدس. (مشكلة مجلس التعاون الخليجي 58854)
  • تم إصلاح مشكلة في GCC 4.8 libstdc++، ظهر فيها خطأ في كان std::nth_element يتسبب في إنشاء رمز أنتجته قاعدة بيانات خطأ. (المشكلة 62910)
  • تم إصلاح GCC 4.8 ICE في 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 لأجهزة Android. المستوى 12 و19 من واجهة برمجة التطبيقات هذه المكتبات مضمّنة الآن لجميع واجهات برمجة تطبيقات Android. المستويات من 12 إلى 19.
    • تم تقديم futimens في libc.so، لواجهة برمجة تطبيقات Android. المستوى 19.
    • تمت إضافة clock_settime() مفقود و clock_nanosleep() إلى time.h للمستوى 8 من واجهة برمجة تطبيقات Android وأعلى.
    • تمت إضافة CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM, و CLOCK_BOOTTIME_ALARM في time.h.
    • تمت إزالة الإصدارَين القديمَين CLOCK_REALTIME_HR و CLOCK_MONOTONIC_HR.
  • في عينات Tea بشأن source/android/ndk_helper:
    • وقم بتغييرها بحيث تستخدم الآن abi عائمًا ثابتًا مع armeabi-v7a.
    • تم تحديثها لاستخدام الوضع المجسم على المستوى 19 من واجهة برمجة تطبيقات Android أعلى.
    • تم إصلاح مشكلة "Check_ReleaseStringUTFChars" في /system/lib/libdvm.so الذي تسبّب في حدوث أعطال على الأجهزة التي تعمل بمعالجات x86.
  • تم إصلاح إخفاق ndk-build الذي يحدث في السيغوين عندما يكون NDK الطرد هو المشار إليها عبر الرابط الرمزي.
  • تم إصلاح أخطاء ndk-build.cmd التي تحدث في النوافذ cmd.exe عندما يحتوي LOCAL_SRC_FILES على مسارات مطلقة. (المشكلة 69992)
  • تم إصلاح النص البرمجي "ndk-stack" للمتابعة حتى إذا تعذّر تحليله. إطار بسبب عدم القدرة على العثور على سلسلة إجراءات أو اسم ملف أو رقم سطر. في أي من هذه الحالات، ستطبع ??.
  • تم إصلاح حزمة ndk-stack لأهداف window-x64_64 بحيث إذا لم يعد يتطابق عن طريق الخطأ مع خط إطار في قسم stack: الذي لا يحتوي على pc، eip أو ip. مثل:
    I/DEBUG   ( 1151):     #00  5f09db68  401f01c4
    /system/lib/libc.so
  • إصلاح gabi++ بحيث:
    • لا يتم استخدام mobileoc() لتخصيص سلسلة محادثات C++ المحلية الأخرى.
    • تجنُّب حالات التوقف المؤقت في 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)
تغييرات مهمة:
  • تم تحديث include/android/*h وmath.h لجميع مستويات واجهات برمجة تطبيقات Android حتى 18، بما في ذلك إضافة المستويات 13 و15 و16 و17. لمزيد من المعلومات حول واجهات برمجة التطبيقات المضافة، يمكنك الاطّلاع على رسائل إتمام التغييرات 68012 و 68014. (المشاكل 47150، 58528 38423)
  • تمت إضافة دعم للمستوى 19 من واجهة برمجة تطبيقات Android، بما في ذلك ربط Renderscript.
  • تمت إضافة التوافق مع -mhard-float في واجهة التطبيق الثنائية (armeabi-v7a) الحالية. لمزيد من المعلومات، والقيود الحالية على كلانغ، راجع tests/device/hard-float/jni/Android.mk
  • تم النقل من الإصدار 4.8 إلى الإصدار 4.8.2 من مجموعة أدوات تجميع GNU، وإضافة لون تشخيصي والدعم. لتفعيل ألوان التشخيص، اضبط -fdiagnostics-color=auto، -fdiagnostics-color=always, أو تصدير GCC_COLORS كما هو موضّح أدناه:
    GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
    
    لمزيد من المعلومات، يُرجى مراجعة دول مجلس التعاون الخليجي الخيارات المستقلة اللغوية:
  • تمت إضافة نموذجين جديدين لتوضيح ميزات OpenGL ES 3.0 وهما: Teabot وMoreTeabots. تعمل هذه النماذج على الأجهزة التي تعمل بالإصدار 4.1 من نظام التشغيل Android (المستوى 16 من واجهة برمجة التطبيقات) والإصدارات الأحدث.
  • تم إيقاف دعم GCC 4.7 وClang 3.2 نهائيًا، وستتم إزالته في غضون .
إصلاح الأخطاء المهمة:
  • تم إصلاح مشكلة تعذُّر إنشاء الانتقال النسبي بسرعة 16 بت في ARM GCC 4.6 thumb2. الجداول. (مشكلة في مجلس التعاون الخليجي)
  • إصلاح خطأ التجميع الداخلي (ICE) لـ GCC 4.8 على g++.dg/cpp0x/lambda/lambda-defarg3.C (تغيير 62770، مشكلة في مجلس التعاون الخليجي)
  • تم إصلاح مشكلة تعذُّر تشغيل الملفات التنفيذية للإصدار *-gdb.exe من نظام التشغيل Windows 32 بت. (المشكلة 58975)
  • تم إصلاح GCC 4.8 ICE عند إنشاء مكتبة نقطية. رسالة الخطأ هي كما يلي:
    internal compiler error: verify_flow_info failed
    (المشكلة 58916، مشكلة في مجلس التعاون الخليجي)
  • إصدار GDB/ARM معدّل لتخطّي بيانات ARM.exidx للترجيع في رمز المقدمة أضاف الأمر (set arm exidx-unwinding) للتحكم في إرجاع تكديس التكديس المستند إلى exidx. (المشكلة 55826)
  • تم إصلاح مشكلة برنامج التحويل البرمجي Clang 3.3 MIPS حيث تكون السجلات HI وLO بشكل غير صحيح وإعادة استخدامه.
  • تم إصلاح المشكلة في MIPS 4.7 ICE في dbx_reg_number. تظهر رسالة الخطأ بالشكل التالي:
    external/icu4c/i18n/decimfmt.cpp:1322:1:
    internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
    
    (تصحيح GCC)
إصلاحات أخرى للأخطاء:
  • إصلاحات العناوين
    • تم إصلاح 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
  • تم إصلاح مشكلة إنشاء samples/gles3jni باستخدام Clang على المستوى 11 من واجهة برمجة تطبيقات Android.
  • تم إصلاح MCLinker للسماح بتكرارات متعددة للخيارات التالية: "-gc-sections" و--eh-frame-hdr"
  • تم إصلاح MCLinker لقبول الخيار --no-warn-mismatch.
  • تم تعديل خيار cpu-features لعدم افتراض أنّ جميع أجهزة VFPv4 تتوافق مع IDIV. والآن يؤدي هذا الخيار إلى إضافة معرّف IDIV إلى الأجهزة المدرجة في القائمة البيضاء فقط، بما في ذلك جهاز Nexus 4. (المشكلة 57637)
  • إصلاح مشكلة تسجيل android_native_app_glue.c لأخطاء عن طريق الخطأ في الحدث وعمليات الإرسال المسبق.
  • تم إصلاح جميع العمليات في gabi++ وتكون غير متوقعة أن تكون آمنة في سلاسل المحادثات.
  • تم إصلاح مشاكل متعددة في خيار Clang -integrated-as حتى يتم تجاوزه لاختبارَي ssax-instructions وfenv.
  • تم إصلاح برنامج التحويل البرمجي GCC 4.6/4.7/4.8 لتمرير خيار الرابط --eh-frame-hdr حتى للملفات القابلة للتنفيذ الثابتة. لمزيد من المعلومات، يُرجى الاطّلاع على رمز التصحيح في GCC.
  • تم إصلاح الفاصلة العليا الإضافية في CPU-ARCH-ABIS.html. لمزيد من المعلومات، يُرجى مراجعة NDK-DEPENDS.html (المشكلة 60142)
  • تم إصلاح علامات الاقتباس الإضافية في إخراج ndk-build على نظام التشغيل Windows. (المشكلة 60649)
  • الإصدار 3.3 الثابت من Clang هو تجميع العمليات الذرية المضمنة في ARM، مثل "__atomic_fetch_add" و__atomic_fetch_sub" و"__atomic_fetch_or"
  • تم إصلاح Clang 3.3 ICE مع vfprintf المخصص. (مشكلة في اللغة المجهولة)
تغييرات أخرى:
  • تم تفعيل OpenMP لجميع إصدارات GCC. لاستخدام هذه الميزة، أضف العلامات التالية إلى إعدادات الإصدار:
    LOCAL_CFLAGS += -fopenmp
    LOCAL_LDFLAGS += -fopenmp
    
    للحصول على أمثلة على الرموز البرمجية، يُرجى مراجعة tests/device/test-openmp.
  • تم تقليل حجم ld.mcld بشكل كبير (1.5 ميغابايت مقابل ld.bfd 3.5 ميغابايت و ld.gold 7.5 ميغابايت)، ما أدى إلى تحسين السرعة بنسبة 20% تقريبًا.
  • تمت إضافة LOCAL_CONLYFLAGS وAPP_CONLYFLAGS لتحديد. الخيارات القابلة للتطبيق على C فقط وليس C++. LOCAL_CFLAGS الحالي وAPP_CFLAGS تستخدم أيضًا في تجميع C++ (لتوفير مشكلة لتحديد معظم الخيارات مرتين)، لذا قد تفشل الخيارات مثل -std=gnu99 في إصدارات g++ مع تحذير والإصدار clang++ بخطأ.
  • تمت إضافة دوال مساعد الصفيف gabi++.
  • إصدارات GCC معدلة بحيث يتم إنشاء جميع الملفات البالغ عددها libgcc.a باستخدام -funwind-tables للسماح بإلغاء حزم الحزمة بعد أن تم حظرها سابقًا نقطة، مثل __aeabi_idiv0.
  • تمت إضافة دعم Ingenic MXU في MIPS GCC4.6/4.7/4.8 مع -mmxu الجديد .
  • تم تمديد MIPS GCC4.6/4.7/4.8 -mldc1-sdc1 للتحكّم في ldxc1/sdxc1 أيضًا.
  • تمت إضافة الرابط المجنون. لمزيد من المعلومات، يُرجى مراجعة sources/android/crazy_linker/README.TXT
  • تم إصلاح bitmap-plasma للرسم إلى وضع ملء الشاشة بدلاً من 200×200 بكسل. واحدة.
  • تقليل أحجام سلسلة أدوات linux وdarwin بنسبة 25% عن طريق إنشاء روابط رمزية للملفات المتطابقة.
تغييرات مهمة:
  • تمت إضافة دعم لنظام التشغيل Android 4.3 (المستوى 18 من واجهة برمجة التطبيقات). لمزيد من المعلومات، يُرجى مراجعة أمثلة على الترميز STABLE-APIS.html وأمثلة جديدة للرموز البرمجية في samples/gles3jni/README
  • تمت إضافة عناوين ومكتبات لبرنامج OpenGL ES 3.0 المتوافق مع Android 4.3. (المستوى 18 من واجهة برمجة التطبيقات) والإصدارات الأحدث
  • تمت إضافة المحول البرمجي لـ GNU Compiler Group (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_native_app_glue. (المشكلة 41755)
  • تم إصلاح إصدار ARM/GCC-4.7 لإنشاء محاذاة كافية لتحميل NEON وتخزينه إرشادات VST وVLD. (مشكلة مجلس التعاون الخليجي رقم 57271)
  • تم إصلاح خطأ برنامج التحويل البرمجي الداخلي (ICE) (ICE) في برنامج التحويل البرمجي الداخلي (ICE) لـ GCC لمؤشر سالب ثابت على قيمة حرفية لسلسلة. (المشكلة 54623)
  • تم إصلاح خطأ التجزئة في GCC 4.7 للتهيئة المستمرة باستخدام عنوان الكائن. (المشكلة 56508)
  • تم إصلاح خطأ تقسيم ARM لقيم -O في GCC 4.6 عند استخدام Boost 1.52.0 (المشكلة 42891)
  • تم إصلاح libc.so وlibc.a لدعم دالة wait4(). (المشكلة 19854)
  • تم تعديل ملفي x86 libc.so وlibc.a لتضمين clone() الأخرى.
  • تم إصلاح خطأ LOCAL_SHORT_COMMANDS في الملف linker.list. فارغة أو غير مستخدمة.
  • تم إصلاح إصدار MIPS من GCC على نظام التشغيل Mac لاستخدام توجيهات CFI، بدونها يفشل ld.mcld --eh-frame-hdr بشكل متكرر.
  • تم إصلاح خطأ التجميع الداخلي في Clang 3.2 X86/MIPS في llvm/lib/VMCore/Value.cpp. (تغيير 59021)
  • تم إصلاح عطل في مجمع برامج Windows GCC 4.7 64 بت. (الخطأ: out of memory allocating 4294967280 bytes).
  • تم تعديل نص ndk-gdb البرمجي ليصبح الإجراءان --start أو --launch. والآن تنتظر خادم تصحيح الأخطاء GNU، كي يتمكن من الوصول إلى مجموعة نقاط التوقف بشكل أكثر موثوقية في بداية مسار التنفيذ (مثل نقاط التوقف في رمز JNI). (المشكلة 41278)

    ملاحظة: تتطلّب هذه الميزة توفّر jdb وتنتج عنها تحذيرات بشأن نقاط الإيقاف المعلّقة. حدِّد الخيار "--nowait" لاستعادة السلوك السابق.

  • تم إصلاح عطل GDB عندما تكون قائمة المكتبة فارغة.
  • تم إصلاح تعطُّل GDB عند استخدام الأمر stepi بعد bx pc blx pc تعليمات الإبهام (المشكلة 56962، المشكلة 36149)
  • تم إصلاح MIPS gdbserver للبحث عن DT_MIPS_RLD_MAP بدلاً من DT_DEBUG (المشكلة 56586)
  • تم إصلاح تبعية دائرية في النص البرمجي ndk-build، على سبيل المثال: إذا كان A->B B->B، ثم تم إسقاط B من الإصدار. (المشكلة 56690)
إصلاحات أخرى للأخطاء:
  • تم إصلاح النص البرمجي "ndk-build" ليتيح لك تحديد إصدار من Clang خيار سطر الأوامر (على سبيل المثال، NDK_TOOLCHAIN_VERSION=clang3.2). في السابق، فقط يعمل تحديد الإصدار على أنه متغير البيئة.
  • تم إصلاح حجم gabi++ بقيمة _Unwind_Exception ليصبح 24 لأهداف إصدار MIPS عندما باستخدام برنامج التحويل البرمجي Clang. (تغيير 54141)
  • تم إصلاح النص البرمجي "ndk-build" للتأكّد من أنّ المكتبات التي تم إنشاؤها هي من المشروعات التي تتضمن مكتبات ثابتة تم إنشاؤها مسبقًا عند استخدام الأمر ndk-build clean. (تغيير 54461، تغيير 54480)
  • تم تعديل الخيار NDK_ANALYZE=1 ليكون أقل طولاً.
  • تم إصلاح gnu-libstdc++/Android.mk ليتضمن مسار backward/ للإصدارات التي تستخدم التوافق مع الأنظمة القديمة. (المشكلة 53404)
  • تم إصلاح المشكلة المتمثلة في عرض stlport new لقيم عشوائية أحيانًا.
  • تم إصلاح ndk-gdb ليتطابق مع ترتيب CPU_ABIS، وليس APP_ABIS. (المشكلة 54033)
  • تم إصلاح مشكلة اختيار الإصدار NDK 64 بت على نظام التشغيل MacOSX المسار الخطأ برنامج التجميع. (المشكلة 53769)
  • تم إصلاح النصوص البرمجية للإصدار لاكتشاف Windows Vista 64 بت. (المشكلة 54485)
  • تم إصلاح خطأ ntonl/swap32 x86: invalid 'asm': operand number out of range. (المشكلة 54465، تغيير 57242)
  • تم إصلاح ld.gold لدمج القيم الحرفية للسلسلة.
  • تم إصلاح ld.gold للتعامل مع محاذاة الرموز الكبيرة.
  • تم تعديل ld.gold لتفعيل الخيار "--sort-section=name".
  • تم إصلاح 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 بت.
  • تم إصلاح خيار Clang 3.2 -integrated-as.
  • تم إصلاح بيانات معالج Clang 3.2 ARM EHABI المضغوط pr1 وpr2.
  • تمت إضافة خيار Clang -mllvm -arm-enable-ehabi لإصلاح خطأ Clang التالي:
    clang: for the -arm-enable-ehabi option: may only occur zero or one times!
  • تم إصلاح عطل في الإصدار عند عدم توفُّر عنصر "uses-sdk" في التطبيق. البيان. (المشكلة 57015)
تغييرات أخرى:
  • إصلاحات العناوين
    • تم تعديل العناوين لجعل __set_errno دالة مضمَّنة، نظرًا تم إيقاف __set_errno في errno.h نهائيًا، ولم يعُد libc.so. يصدّره.
    • تم تعديل elf.h ليشمل stdint.h. (المشكلة 55443)
    • تم إصلاح sys/un.h ليتم تضمينه بشكل مستقل عن العناوين الأخرى. (المشكلة 53646)
    • تم إصلاح كل مجموعة واجهات برمجة تطبيقات MotionEvent_getHistorical لنقل const AInputEvent* motion_event (المشكلة 55873)
    • تم إصلاح malloc_usable_size لأخذ const void*. (المشكلة 55725)
    • تم تثبيت stdint.h لتصبح أكثر توافقًا مع C99. (تغيير 46821)
    • تم تعديل wchar.h لعدم إعادة تعريف WCHAR_MAX و WCHAR_MIN
    • تم إصلاح بيان <inttypes.h> المرتبط بالمؤشر PRI SCN وحدة ماكرو (المشكلة 57218)
    • تم تغيير عنوان sys/cdefs.h ليصبح __WCHAR_TYPE__ 32 بت. لمستويات واجهة برمجة التطبيقات الأقل من 9، ما يعني أنّ wchat_t تستخدم نظام 32 بت لجميع مستويات واجهة برمجة التطبيقات. لاستعادة السلوك السابق، حدِّد _WCHAR_IS_8BIT المتغير المنطقي. (المشكلة 57267)
  • تمت إضافة المزيد من التنسيقات في docs/ NDK بالإضافة إلى إصلاحات متنوعة للمستندات.
  • تمت إضافة دعم لتقنية الأرشفة السطحية عند إنشاء مكتبات ثابتة. (المشكلة 40303)
  • تم تعديل النص البرمجي make-standalone-toolchain.sh للتوافق مع stlport. بالإضافة إلى gnustl، عند تحديد خيار --stl=stlport لمزيد من المعلومات، يُرجى الاطّلاع على "STANDALONE-TOOLCHAIN.html".
  • تم تعديل النص البرمجي "make-standalone-toolchain.sh" لكي ينشئ الخيار --llvm-version= طريقة $TOOLCHAIN_PREFIX-clang $TOOLCHAIN_PREFIX-clang++ نصوص برمجية بالإضافة إلى clang clang++، وذلك لتفادي استخدام تعريفات clang و clang++ الخاصة بالمضيف عن طريق الخطأ.
  • تمت إضافة علامتَين لإعادة تفعيل تحسينَين في لغة Clang الأولى، ولكن تم إيقافها في NDK للتوافق بشكل أفضل مع الرمز الذي تم تجميعه من خلال GCC:
    • تمت إضافة علامة -fcxx-missing-return-semantics لإعادة تفعيل الخيار مفقود. إرجاع الدلالات بلغة Clang 3.2 أو الإصدارات الأحدث. عادةً، يجب أن تنتهي جميع المسارات بإرجاع لدالة إرجاع القيمة. وإذا لم يكن الأمر كذلك، يمكنك الضغط على تعليمات غير محددة (أو توقف في وضع تصحيح الأخطاء) في المسار بدون الرجوع الشخصي. إذا كنت متأكدًا من صحة الرمز، فاستخدم هذه العلامة للسماح الاستفادة من السلوك غير المحدد. إذا لم تكن متأكدًا، فلا تفعل استخدام هذه العلامة. قد يستمر ظهور قيمة عشوائية غير صحيحة للمتصل، ولكن لن يستغلها محسِّن الأداء وستزيد من صعوبة تصحيح الأخطاء في الرمز البرمجي.
    • تمت إضافة علامة -fglobal-ctor-const-promotion لإعادة تفعيلها. تعزيز المتغيرات العمومية باستخدام الدالة الإنشائية الثابتة لتكون ثوابت. باستخدام هذه العلامة، فإن ممر تحسين المتغير العمومي لـ LLVM يحاول تقييم القيمة المتغيرات ذات الدوال الإنشائية الثابتة ونقلها إلى الثوابت العمومية. رغم هذا التحسين صحيح، فقد يتسبب في بعض عدم التوافق مع التعليمات البرمجية التي تم تجميعها من مجلس التعاون الخليجي. على سبيل المثال، قد يؤدي الرمز البرمجي إلى تنفيذ const_cast لتحويل الثابت إلى قيمة قابلة للتغيير. وتعديله. في GCC، يكون المتغير قيد القراءة والكتابة ويتم تشغيل التعليمة البرمجية بواسطة حادث. في Clang، يكون المتغير الثابت في ذاكرة القراءة فقط وقد يتسبب في تعطُّل التطبيق.
  • تمت إضافة -mldc1-sdc1 إلى برامج التجميع بتنسيق MIPS GCC وClang. بشكل افتراضي، تقوم برامج التجميع محاذاة العناصر بحجم 8 بايت بشكل صحيح وإصدار تعليمات ldc1 وsdc1 لتحريكها. إذا كان تطبيقك يستخدم أداة تخصيص مخصّصة لا تتم محاذاتها دائمًا من خلال وضع حدود لكائن جديد بحجم 8 بايت بالطريقة نفسها المُخصصة التلقائي، قد يتعطّل بسبب عمليتي ldc1 وsdc1 على ذاكرة غير متوافقة. في هذه الدورة، الحالة، استخدم العلامة -mno-ldc1-sdc1 لحل المشكلة.
  • تم خفض مستوى خطورة الحدث من تحذير إلى معلومات في حال كانت APP_PLATFORM_LEVEL: أكبر من APP_MIN_PLATFORM_LEVEL. قد يكون APP_PLATFORM_LEVEL أقل من APP_PLATFORM في jni/Application.mk لأن NDK لا يمتلك عناوين لجميع المستويات. وفي هذه الحالة، يتغيّر المستوى الفعلي إلى أسفل. تشير رسالة الأشكال البيانية يتم تحديد APP_MIN_PLATFORM_LEVEL من خلال android:minSdkVersion في بيان التطبيق. (المشكلة 39752)
  • تمت إضافة الطريقتَين android_getCpuIdArm() وandroid_setCpuArm() إلى cpu-features.c تتيح هذه الإضافة استرداد معرّفات المعالجة المركزية (CPU) ARM بشكل أسهل. المعلومات. (المشكلة 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.
تغييرات مهمة:
  • تمت إضافة مجموعة أدوات للمضيف 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 فإن linker هو الخيار الافتراضي حيثما كان متاحًا، لذا يجب تفعيله بشكل صريح. لمزيد من المعلومات، المعلومات، يمكنك الاطّلاع على CHANGES.HTML.
  • تحديث ndk-build لاستخدام الفرز الطبولوجي لتبعيات الوحدة، مما يعني تقوم بإنشائه تلقائيًا بفرز ترتيب المكتبات المحددة في LOCAL_STATIC_LIBRARIES وLOCAL_WHOLE_STATIC_LIBRARIES و LOCAL_SHARED_LIBRARIES لمزيد من المعلومات، يُرجى الاطّلاع على "CHANGES.HTML". (المشكلة 39378)
إصلاح الأخطاء المهمة:
  • تم إصلاح نص برمجي للإصدار لإنشاء جميع سلاسل الأدوات في -O2. سلاسل الأدوات في الإصدار السابق الإصدارات تم إنشاؤها بشكل غير صحيح دون تحسين.
  • نص برمجي ثابت للإصدار يعمل على إنشاء Clang/llvm بدون أي شروط لنظام التشغيل MacOSX في إصدار 64 بت.
  • إصلاح خطأ برنامج التجميع الداخلي في GCC 4.6/4.7: gen_thumb_movhi_clobber at config/arm/arm.md:5832 (المشكلة 52732)
  • تم إصلاح مشكلة الإصدار التي تعذّر فيها الإصدار 4.6 أو 4.7 من GCC/ARM في ربط الرموز البرمجية باستخدام الإصدار الذرّي 64 بت. الدوال المضمنة. (المشكلة 41297)
  • تم إصلاح أخطاء عدم تطابق استخدام رابط DIV في GCC 4.7. (مشكلة في البرامج المصدر)
  • تم إصلاح خطأ التجميع الداخلي في 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)
  • تم إصلاح خطأ segCPM في GCC 4.7. (مشكلة في مجلس التعاون الخليجي)
  • تم إصلاح دقة الساعة <chrono> وتفعيل steady_clock. (المشكلة 39680)
  • تم إصلاح سلسلة أدوات لتفعيل _GLIBCXX_HAS_GTHREADS لـ GCC 4.7 libstdc++. (المشكلة 41770، المشكلة 41859)
  • تم إصلاح مشكلة تعذُّر ربط رمز X86 MXX/SSE بسبب عدم توفُّره posix_memalign (تغيير 51872)
  • تم إصلاح خطأ تقسيم GCC4.7/X86 في i386.c، الدالة distance_non_agu_define_in_bb() (تغيير 50383)
  • تم إصلاح GCC4.7/X86 لاستعادة سلوك cmov السابق. (مشكلة في مجلس التعاون الخليجي)
  • تم إصلاح قيمة NULL في معالجة القيمة setlocale() في libstdc++/GCC4.7. (المشكلة 46718)
  • تم إصلاح إشارة غير محددة لبيئة تشغيل ld.gold لـ __exidx_start __exidx_start_end (تغيير 52134)
  • تم إصلاح خطأ التجميع الداخلي في Clang 3.1 عند استخدام مكتبة Eigen. (المشكلة 41246)
  • تم إصلاح خطأ في التجميع الداخلي في Clang 3.1 بما في ذلك <chrono> في C++11 الحالي. (المشكلة 39600)
  • إصلاح خطأ المحول البرمجي الداخلي في Clang 3.1 عند إنشاء رمز كائن لطريقة ما إلى استدعاء rvalue موحّد تم إعداده. (المشكلة 41387)
  • تم إصلاح إعادة مواءمة تكديس Clang 3.1/X86. (تغيير 52154)
  • تم إصلاح المشكلة في GNU Debugger (GDB) SIGILL عند تصحيح الأخطاء على Android 4.1.2. (المشكلة 40941)
  • تم حل مشكلة عدم تمكّن GDB من ضبط نقاط توقف source:line عند استخدام الرموز يحتوي على مسارات الملفات الطويلة وغير المباشرة. (المشكلة 42448)
  • تم إصلاح 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)
  • تمت إزالة Gabi++ المتكرّر المجاني على عنصر الاستثناء (تغيير 53447)
إصلاحات أخرى للأخطاء:
  • عناوين NDK الثابتة:
    • تمت إزالة التعريفات المكرّرة لـ size_t وssize_t و ptrdiff_t
    • تم إصلاح رأسَي MIPS وARM fenv.h.
    • تم إصلاح stddef.h لعدم إعادة تحديد offsetof بما أنه موجود سلفًا. في سلسلة الأدوات.
    • تم إصلاح elf.h لاحتواء Elf32_auxv_t وElf64_auxv_t. (المشكلة 38441)
    • تم إصلاح #ifdef تعريفات C++ في ملف العنوان OpenSLES_AndroidConfiguration.h (المشكلة 53163)
  • تم إصلاح STLport للإلغاء بعد حدوث خطأ نفاد الذاكرة بدلاً من الخروج بدون تنبيه.
  • نظام ثابت وعناوين Gabi++ للتمكن من التجميع باستخدام المستوى 8 من واجهة برمجة التطبيقات والمستويات الأدنى
  • تم إصلاح cpufeatures لعدم تحليل /proc/self/auxv. (المشكلة 43055)
  • تم إصلاح ld.gold بحيث لا يعتمد على المضيف libstdc++ وعلى أنظمة التشغيل Windows الأساسية، ألا تعتمد على مكتبة libgcc_sjlj_1.dll.
  • تم إصلاح إصدار Clang 3.1 الذي يُصدر قائمة تسجيلات غير متسقة في .vsave ويفشل في المجمّع. (تغيير 49930)
  • تم إصلاح Clang 3.1 ليكون قادرًا على تجميع libgabi++ واجتياز test-stlport اختبارات أهداف إصدار MIPS. (تغيير 51961)
  • تم إصلاح Clang 3.1 لتفعيل الاستثناء فقط بشكل افتراضي لـ C++، وليس لـ C.
  • أصلح عدّة مشاكل في Clang 3.1 لاجتياز معظم اختبارات استثناء GNU.
  • تم إصلاح النصوص البرمجية clang وclang++ في برنامج التحويل البرمجي NDK المستقل لرصد -cc1 وعدم تحديد -target عند العثور عليه.
  • تم إصلاح ndk-build لمراقبة NDK_APP_OUT تم ضبطه في Application.mk.
  • تم إصلاح X86 libc.so وlib.a اللذين كانا يفتقدان sigsetjmp وsiglongjmp دالة سبق تعريفها في setjmp.h. (المشكلة 19851)
  • تم تصحيح GCC 4.4.3/4.6/4.7 libstdc++ للعمل مع Clang في C++ 11. (مشكلة في اللغة المجهولة)
  • تم إصلاح مسار سيغوين في الوسيطة إلى HOST_AWK.
  • تم إصلاح تحذير النص البرمجي "ndk-build" في النوافذ عند التشغيل من خوارزمية JNI للمشروع. الدليل. (المشكلة 40192)
  • تم إصلاح مشكلة عدم إنشاء النص البرمجي "ndk-build" إذا كان ملف makefile مسافة بيضاء لاحقة في تعريف LOCAL_PATH. (المشكلة 42841)
تغييرات أخرى:
  • تم تفعيل إتاحة سلاسل المحادثات في سلسلة أدوات GCC/MIPS.
  • تم تحديث تطبيقات معالجة استثناءات GCC __cxa_begin_cleanup و __cxa_type_match للحصول على إذن الوصول التلقائي من السابق مستوى الرؤية مخفي في GNU libstdc++. لمزيد من المعلومات، يُرجى مراجعة CHANGES.HTML
  • تم تحديث النصوص البرمجية للإصدارات بحيث يتم الآن إنشاء مكتبات Gabi++ وSTLport الثابتة باستخدام الظهور المخفي باستثناء مساعدات معالجة الاستثناءات.
  • تم تعديل الإصدار لكي يتم تصميم STLport للتوافق مع معالجات ARM في وضع "الإبهام".
  • تمت إضافة دعم لـ std::set_new_handler في Gabi++. (المشكلة 52805)
  • تم تفعيل استدعاء نظام FUTEX في GNU libstdc++.
  • تم تعديل ndk-build بحيث لم يعد ينسخ المكتبة الثابتة المُنشأة مسبقًا إليه. دليل obj/local/<abi>/ للمشروع. (المشكلة 40302)
  • تمت إزالة __ARM_ARCH_5*__ من النص البرمجي ARM toolchains/*/setup.mk. (المشكلة 21132)
  • تم إنشاء مكتبات GNU libstdc++ الإضافية في وضع الإبهام لـ ARM.
  • تم تفعيل النقطة العائمة madd/msub/nmadd/nmsub/recip/rsqrt MIPS تعليمات مع FPU 32 بت.
  • تم تفعيل مُحسِّن حلقة الرسم البياني في الإصدار 4.6 و4.7 من GCC للسماح بمزيد من التحسينات: "-fgraphite" و"-fgraphite-identity" و"-floop-block" و"-floop-flatten" -floop-interchange، -floop-strip-mine، -floop-parallelize-all، و-ftree-loop-linear. (معلومات)
  • تم تفعيل polly لكل من Clang 3.1 على نظام التشغيل Linux ومضيفي Max OS X 32 بت الذي يحلّل البيانات. وتحسّن إمكانية الوصول إلى الذاكرة. (معلومات)
  • تفعيل -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 في الإصدار 4.6/4.7 من GCC.
  • تم تفعيل --text-reorder لنظام التشغيل ld.gold في الإصدار 4.7 من GCC.
  • تم إعداد GNU libstdc++ مع _GLIBCXX_USE_C99_MATH الذي يلغي تحديد هناك نص برمجي isinf في عنوان الشهادة الذاتية. لمزيد من المعلومات، يُرجى مراجعة CHANGES.html
  • تمت إضافة APP_LDFLAGS إلى النصوص البرمجية للإصدار. لمزيد من المعلومات، يُرجى مراجعة ANDROID-MK.html
  • تم تعديل النصوص البرمجية للإصدار للسماح لمتصفِّح NDK_LOG=0 بإيقاف NDK_LOG.
  • تم تعديل النصوص البرمجية للإصدار للسماح لمتصفِّح NDK_HOST_32BIT=0 بإيقاف مطوّر البرامج المضيف. لسلسلة أدوات 32 بت.
  • تم تغيير علامات GCC/X86 التلقائية -march= و-mtune= من pentiumpro وgeneric إلى i686 وatom.
  • النصوص البرمجية المحسّنة لإنشاء سلسلة الأدوات:
    • تم إصلاح شرط سباق في build-gcc.sh لنوع الإصدار mingw وهو ما كان يحول دون قدر كبير من معالجة الإصدار بالتوازي.
    • تم تحديث build-gabi++.sh وbuild-stlport.sh بحيث يمكن تشغيلها الآن. من حزمة NDK. (المشكلة 52835)
    • تم إصلاح run-tests.sh في مجموعة برامج الخدمات MSys.
    • سلسلة أدوات مضيف محسَّنة 64 بت ودعم إنشاء الصليب الكندي.
    • تم تعديل نص برمجي واحد (build-mingw64-toolchain.sh) إلى إصدار أحدث.
    • تمت إضافة خيار للإصدار libgnustl_static.a وstlport_static.a. بدون الظهور المخفي.
تغييرات مهمة:
  • تمت إضافة المحول البرمجي GNU Compiler Group (GCC) 4.7 إلى NDK. برنامج التجميع من GCC 4.6 لا يزال هو الإصدار الافتراضي، لذا يجب تمكين الإصدار الجديد بشكل صريح على النحو التالي:
    • بالنسبة إلى ndk-build، عليك تصدير المتغيّر NDK_TOOLCHAIN_VERSION=4.7. أو إضافته إلى Application.mk.
    • بالنسبة إلى الإصدارات المستقلة، يمكنك إضافة الخيار "--toolchain=" إلى make-standalone-toolchain.sh، على سبيل المثال:
      --toolchain=arm-linux-androideabi-4.7

    ملاحظة: هذه الميزة تجريبية. يُرجى تجربتها و والإبلاغ عن أي مشاكل.

  • تمت إضافة استثناء stlport عبر gabi++. لاحظ أن gabi++ الجديد على dlopen والرموز ذات الصلة، ما يعني أنّ:
    • لم يعد بإمكانك إنشاء ملف ثابت تنفيذي باستخدام -static أو تضمين libstlport_static.a باستخدام APP_STL := stlport_static (لا يزال بإمكانك استخدام الخيار -static) من خلال سلسلة أدوات مستقلة). إنشاء ملف ديناميكي قابل للتنفيذ باستخدام يستمر include $(BUILD_EXECUTABLE) في العمل لأن المحول البرمجي على إضافة الخيار -ldl تلقائيًا.
    • في حال ربط مشروعك باستخدام -nostdlib و{-Wl,--no-un specific}، عليك على الخيار -ldl يدويًا.
    لمزيد من المعلومات، يُرجى الاطّلاع على CPLUSPLUS-SUPPORT.html.

    ملاحظة: هذه الميزة تجريبية وتعمل بشكل أفضل مع بلدان مجلس التعاون الخليجي. 4.6/4.7 برامج التجميع عن GCC 4.4.3 أو Clang 3.1. يُرجى تجربتها و والإبلاغ عن أي مشاكل.

  • تمت إضافة الخيار -mstack-protector-guard= لجهاز x86 للاختيار بين مسار تلقائي عالمي يتوافق مع مكتبة Android C القديمة (bionic) ومسار tls جديد (%gs:20) لـ -fstack-protector، -fstack-protector-all و-fstack-protector-strong باستخدام الإصدار 4.6 من GCC وبرامج التجميع الأعلى.

    ملاحظة: لا ينطبق إعداد -mstack-protector-guard نفسه تفعيل أي من خيارات -fstack-protector*

  • تمت إضافة الدالة android_setCpu() إلى sources/android/cpufeatures/cpu-features.c للاستخدام عند إجراء الاكتشاف التلقائي عبر لا يمكن استخدام /proc في الإصدار Android 4.1 والإصدارات الأحدث. (مشكلة في Chromium 164154)
إصلاح الأخطاء المهمة:
  • تم إصلاح عملية إعادة إنشاء ملفات الكائنات غير الضرورية عند استخدام النص البرمجي ndk-build. (المشكلة 39810)
  • تم إصلاح عطل الربط في إصدار NDK 8c لنظام التشغيل Mac OS X 10.6.x الذي أدى إلى إنتاج الخطأ التالي:
    dyld: lazy symbol binding failed: Symbol not found: _memmem
    Referenced from: ...../arm-linux-androideabi/bin/ld
    Expected in: /usr/lib/libSystem.B.dylib
    وتسببت هذه المشكلة في الاعتماد على نظام التشغيل Mac OS X 10.7، والذي أنتج برامج ثنائية غير متوافق مع Mac OS 10.6.x وNDK.
  • تمت إزالة خيارات -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 لنظام التشغيل Android. ARM وX86. (المشكلة 40625)
  • تم إصلاح رصد وحدة المعالجة المركزية x86 لميزة ANDROID_CPU_X86_FEATURE_MOVBE. (المشكلة 39317)
  • تم إصلاح مشكلة تمنع مكتبة النماذج العادية (STL) من استخدام C++ المصادر التي ليس لها امتداد ملف .cpp.
  • تم إصلاح خطأ التجميع الداخلي لـ GCC 4.6 ARM عند إعادة التحميل1.c:1061. (المشكلة 20862)
  • تم إصلاح خطأ برنامج التجميع الداخلي ARM في GCC 4.4.3 في emit-rtl.c:1954. (المشكلة 22336)
  • تم إصلاح خطأ برنامج التجميع الداخلي ARM في GCC 4.4.3 في 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" (GDB) لتقصير الوقت المستغرَق في المشي على خريطة رابط الهدف. خلال أحداث solib. (المشكلة 38402)
  • تم إصلاح مشكلة عدم توفّر ملف libgcc.a عند ربط المكتبات المشتركة.
تغييرات أخرى:
  • وظائف بسيطة مدمجة في الخلفية 64 بت من أجل ARM إلى GCC 4.6.
  • تمت إضافة وثائق حول وقت استجابة إخراج الصوت بالإضافة إلى مستندات أخرى إصلاحات الأخطاء.
  • تم إصلاح إصدار تصحيح الأخطاء باستخدام Clang لكي ترفع الدوال غير الفارغة الآن SIGILL. إشارة للمسارات بدون عبارة إرجاع.
  • تم تعديل make-standalone-toolchain.sh لقبول اللاحقة -clang3.1. أي ما يعادل إضافة --llvm-version=3.1 إلى سلسلة الأدوات الإصدار 4.6 من GCC.
  • تم تعديل عنوان URL لتقرير أخطاء GCC وClang ليصبح: https://source.android.com/source/report-bug. .s.html
  • تمت إضافة دعم ARM ELF إلى llvm-objdump.
  • تم إلغاء تحذير معالجة الإدخال c كـ c++ لإصدارات Clang.
  • تم تحديث الإصدار بحيث لا يتم إنشاء سوى الإصدار 32 بت من libiberty.a موضوع في lib32/.
تغييرات مهمة:
  • تمت إضافة المحول البرمجي Clang 3.1 إلى NDK. الإصدار 4.6 من مجموعة GNU Compiler Group (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 عن التفاصيل.

    ملاحظة: هذه الميزة تجريبية. يُرجى تجربتها و والإبلاغ عن أي مشاكل.

  • تمت إضافة الرابط الذهبي ld.gold لسلسلة أدوات Windows. يعد الارتباط الذهبي أيضًا بشكل افتراضي لـ ARM وX86 على جميع المضيفات. يمكنك تجاوزه لاستخدام ld.bfd. رابط عن طريق إضافة LOCAL_LDFLAGS += -fuse-ld=bfd إلى Android.mk، أو من خلال تمرير الكرة -fuse-ld=bfd إلى سطر الأوامر g++/clang++ الذي يؤدي الرابط.
  • تمت إضافة عمليات تحقّق من المسافات في مسار NDK إلى ndk-build[.cmd] ndk-gdb نصوص برمجية، لمنع أخطاء الإصدار التي يصعب تشخيصها.
  • تم إجراء التغييرات التالية على التعامل على مستوى واجهة برمجة التطبيقات:
    • تم تعديل منطق الإصدار لكي تصبح المشاريع التي تحدّد android-10 من خلال android-13 في APP_PLATFORM أو project.properties أو رابط "default.properties" إلى "android-9" بدلاً من android-14
    • إصدار معدَّل كي تصبح الملفات التنفيذية التي تستخدم android-16 (Jelly Bean) أو الإصدارات الأحدث ويتم تجميعها باستخدام الخيار -fPIE للملفات التنفيذية المستقلة عن الموضع (PIE). يتيح لك خيار "APP_PIE" جديد التحكّم في هذا السلوك. لمزيد من التفاصيل، انتقِل إلى APPLICATION-MK.html.

      ملاحظة: لا تزال جميع مستويات واجهة برمجة التطبيقات الأعلى من 14 مرتبطة بـ platforms/android-14 ولم تتم إضافة platforms/android-N جديد.

    • تم تعديل ndk-build لتقديم تحذيرات إذا كان مستوى واجهة برمجة التطبيقات المعدَّل أكبر. من android:minSdkVersion في AndroidManifest.xml للمشروع.
  • تم تعديل مكتبة مساعد "cpu-features" لتشمل المزيد من الميزات الخاصة بمعالجات ARM. لمزيد من التفاصيل، انتقِل إلى sources/android/cpufeatures/cpu-features.h.
  • تم تعديل المزدوج الطويل على النظام الأساسي X86 إلى 8 بايت. هذا النوع من البيانات هو الآن بحجم مزدوج مثل النوع المزدوج، إلا أنه لا يزال يُعامل على أنه نوع مميز.
  • تم تحديث إصدار APP_ABI=armeabi-v7a:
    • تم تعديل نوع الإصدار هذا لتمرير معلَمة -march=armv7-a إلى الرابط. يؤكد هذا التغيير أن المكتبات الخاصة بالإصدار 7 وcrt*.o بشكل صحيح.
    • تمت إضافة -mfpu=vfpv3-d16 إلى ndk-build بدلاً من خيار -mfpu=vfp الذي تم استخدامه في الإصدارات السابقة
إصلاح الأخطاء المهمة:
  • تم إصلاح مشكلة تشغيل 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 في الإصدار 4.6 من GCC cp/mangle.c::write_unscoped_name، حيث قد يتعطل GCC عندما يكون السياق null وتمت إزالة الإشارة إليه في TREE_CODE.
  • تم إصلاح أعطال GCC 4.4.3 في تعريفات النوع الخاصة بـ ARM NEON للقيم العائمة. (المشكلة 34613)
  • تم إصلاح تنفيذ "_IteWrapper::operator*()" الداخلي لـ STLport. حيث تم إرجاع موقع تكديس قديم يضم القيمة التي تمت إزالتها أثناء التشغيل. (المشكلة 38630)
  • الإصلاحات الخاصة بمعالجات ARM:
    • تم إصلاح ARM GCC 4.4.3/4.6 g++ لعدم التحذير من <va_list> في GCC 4.4. يتمثل الحل البديل باستخدام لم يعُد التبديل إلى "-Wno-psabi" لتجنُّب ظهور هذا التحذير مطلوبًا.
    • تم إصلاح مشكلة كانت تحدث عند مشروع يتضمّن لاحقات .arm أو .neon. تم أيضًا استخدام APP_STL من قِبل "LOCAL_SRC_FILES". باستخدام APP_STL، هناك نص برمجي واحد (ndk-build) يبحث عن ملفات C++ في LOCAL_SRC_FILES قبل ذلك إضافة مسارات STL header/lib إلى التجميع. تم تعديل ndk-build إلى استبعاد اللاحقتين .arm و.neon قبل البحث، في الحالات الأخرى في LOCAL_SRC_FILES مثل myfile.cpp.arm.neon، لن يتم تجميعها على هيئة C++ الرمز.
    • تم إصلاح مشكلة "binutils-2.21/ld.bfd" لإتاحة إمكانية ربط عنصر من الإصدار القديم. binutils بدون tag_FP_arch، والذي أدى إلى ظهور إخفاق التأكيد رسائل الخطأ في GNU Binutils. (المشكلة 35209)
    • تمت إزالة التحذير سمة عنصر EABI 44 غير المعروفة عند. عنصر تم إنشاؤه مسبقًا في "binutils-2.19/ld" من قِبل binutils-2.21 الأحدث
    • تم إصلاح مشكلة في تجميع GNU stdc++ في كل من -mthumb -march=armv7-a، عن طريق تعديل make-standalone-toolchain.sh لتعبئة headers/libs في الدليل الفرعي armv7-a/thumb. (المشكلة 35616)
    • تم إصلاح خطأ نقل R_ARM_THM_CALL غير قابل للحل. (المشكلة 35342)
    • تم إصلاح خطأ برنامج التحويل البرمجي الداخلي في reload1.c:3633، بسبب ARM واجهة خلفية تتوقع نوع المعامل غير الصحيح عند امتداد الإشارة من char. (المشكلة 50099 في مجلس التعاون الخليجي)
    • تم إصلاح خطأ برنامج التحويل البرمجي الداخلي مع مقدار التحول السالب. (مشكلة في مجلس التعاون الخليجي)
  • تم إصلاح -fstack-protector لـ X86، وهو أيضًا الإعداد التلقائي هدف ndk-build x86 ABI
  • الإصلاحات الخاصة بـ MIPS:
  • الإصلاحات الخاصة ببرنامج تصحيح الأخطاء GNU:
    • دعم Python معطل في gdb-7.x في الإصدار، وإلا فإن gdb-7.x إعداد أي إصدار بايثون متاح على المضيف وإنشاء هي اللغة gdb التي تعتمد على مصدر معيّن من Python. (المشكلة 36120)
    • تم إصلاح ndk-gdb عندما يحتوي APP_ABI على all ولا يطابق أي شيء البِنى الهندسية المعروفة. (المشكلة 35392)
    • تم إصلاح دعم اسم مسار Windows، من خلال الاحتفاظ بالحرف : في حال ظهوره كأنه يمكن أن يكون جزءًا من مسار Windows يبدأ بحرف محرك الأقراص. (مشكلة GDB 12843)
    • تم إصلاح إضافة دعم نقاط إيقاف الأجهزة لمعالجات ARM في gdbserver. (مشكلة في GDB)
    • تمت إضافة إصلاح لقراءة solibs الحالية فقط عندما يكون الرابط متسقًا. يؤدي هذا التغيير إلى تسريع معالجة أحداث solib. (المشكلة 37677)
    • تمت إضافة إصلاح لإجراء محاولات متكررة للعثور على solib نقطة توقّف. GDB الآن إعادة محاولة enable_break() خلال كل مكالمة إلى svr4_current_sos() حتى إلا أنه نجح. (تغيير 43563)
    • تم إصلاح مشكلة عدم توقف gdb عند نقاط الإيقاف الموضوعة في dlopen-ed مكتبة (المشكلة 34856)
    • تم إصلاح SIGILL في الرابط الديناميكي عند طلب dlopen() على النظام. حيث يتم تجريد /system/bin/linker من الرموز تم تنفيذ rtld_db_dlactivity() كـ Thumb، نظرًا لعدم الحفاظ عليه LSB من sym_addr. (المشكلة 37147)
إصلاحات أخرى للأخطاء:
  • عناوين NDK الثابتة:
    • تم إصلاح رمز arch-mips/include/asm/* تمت إزالته بشكل غير صحيح من النواة الأصلية. (تغيير 43335).
    • تم استبدال بيانات أعضاء البنية __unused بـ __linux_unused في. linux/sysctl.h وlinux/icmp.h لتجنب التعارض مع #define __unused في sys/cdefs.h.
    • تم إصلاح fenv.h لدوال C المضمنة مع __BEGIN_DECLS __END_DECLS
    • تمت إزالة الدوال غير المُنفَّذة في malloc.h.
    • تم إصلاح تعريف stdint.h لـ uint64_t لبرامج التحويل البرمجي للمعهد الأمريكي للمعايير الوطنية (ANSI). (عدد 1952)
    • تم إصلاح وحدات ماكرو المعالجة المسبقة للمعالجة في <arch>/include/machine/*.
    • تم استبدال link.h لنظام MIPS بإصدار جديد يتوافق مع جميع الأنظمة الأساسية.
    • تمّت إزالة "linux-unistd.h"
    • نقل وحدات الماكرو الخاصة بـ GLibc LONG_LONG_MIN وLONG_LONG_MAX و ULONG_LONG_MAX من <pthread.h> إلى <limits.h>
  • تم إصلاح فائض سعة المخزن المؤقت في ndk-stack-parser.
  • تم حلّ مشكلة _STLP_USE_EXCEPTIONS لحذف جميع التعريفات عندما لا تكون محددة واستخدامهما لـ __Named_exception. تجميع واستخدام "__Named_exception" لا تحدث الإعدادات إلا عندما يُسمح لتطبيق STLport باستخدام الاستثناءات.
  • إنشاء ثابت لحزم NDK الخاصة بنظام Linux فقط دون إنشاء كود Windows أيضًا. يمكنك استخدام الإعدادات التالية لتنفيذ هذا النوع من الإصدارات:
    ./build/tools/make-release.sh --force --systems=linux-x86
  • تم إصلاح libc.so بحيث لا يتم تصدير atexit() و__do_handler. ويتم تصدير هذه الرموز إلى إصدارات ARM من خلال إصدار النظام من مكتبة C إلى تتيح استخدام المكتبات الأصلية القديمة. يجب ألا تشير إليها مواد العرض التي ينشئها NDK بشكل مباشر. بدلاً من ذلك، يجب أن تتضمن كل مكتبة مشتركة أو قابلة للتنفيذ نسختها الخاصة من هذه الرموز، مقدمة من "crtbegin_*.o".

    إذا كان مشروعك مرتبطًا بخيارَي "-nostdlib -Wl,--no-undefined"، يمكنك: يجب تقديم __dso_handle الخاص بك لأن crtbegin_so.o غير مرتبط في هذه الحالة. لا يمثل محتوى __dso_handle أي أهمية، كما هو موضح في ما يلي: مثال التعليمة البرمجية:

    extern "C" {
     
    extern void *__dso_handle __attribute__((__visibility__ ("hidden")));
     
    void *__dso_handle;
    }
  • تم إصلاح أداة فك ترميز رموز ARM المُستخدَمة في objdump لعدد plt من الإدخالات إنشاء نموذج function@plt أكثر قابلية للقراءة
  • تمت إزالة الرموز التالية المقدمة في الإصدار 4.6 من libgcc.a في GCC من مكتبة منصة X86 libc.so: __aeabi_idiv0، __aeabi_ldiv0، __aeabi_unwind_cpp_pr1، و__aeabi_unwind_cpp_pr2.
  • تمت إزالة .ctors و.dtors و.eh_frame غير المستخدَمة في MIPS. crt*_so.S
  • تم تحديث ndk-gdb بحيث لا يستغرق سوى آخر سطر من الإخراج ndk-build DUMP_XXXX. يضمن هذا التغيير أنه في حالة Application.mk أو تطبع Android.mk شيئًا باستخدام بنية $(info ...)، فلن يتم الحصول على تم إدخاله في نتيجة DUMP_XXXX. (مزيد من المعلومات)
تغييرات أخرى:
  • تمت إزالة العنوانَين arch-x86 وarch-mips من platforms/android-[3,4,5,8] كانت هذه العناوين غير مكتملة، نظرًا لأن كلاً من X86 لا تتوافق واجهات برمجة التطبيقات MIPS ABI إلا مع الإصدار 9 من واجهة برمجة التطبيقات أو الإصدارات الأحدث.
  • تتضمّن لغة c++ المبسطة المسار في الحزم المستقلة، كما هو موضّح أدناه. (المشكلة 35279)
    <path>/arm-linux-androideabi/include/c++/4.6.x-google
      to:
    <path>/include/c++/4.6/
    
  • تم إصلاح ndk-build للتعرف على المزيد من امتدادات ملفات C++ تلقائيًا: .cc .cp .cxx .cpp .CPP .c++ .C لا يزال بإمكانك استخدام "LOCAL_CPP_EXTENSION" من أجل استبدال إعدادات الإضافات هذه.
  • تم إصلاح مشكلة في تطبيق "samples/san-angeles" تسبّبت في ظهور شاشة سوداء أو توقّف عن العمل. الإطار عند إعادة التشغيل.
  • تم استبدال واجهات برمجة التطبيقات المتوقّفة نهائيًا في نماذج NDK. (عدد 20017)
    • "hello-gl2" من android-5 إلى android-7
    • "native-activity" من android-9 إلى android-10
    • "native-audio" من android-9 إلى android-10
    • "native-plasma" من android-9 إلى android-10
  • تمت إضافة علامة تجارية جديدة لملفات Android التنفيذية مع نظام أبسط في القسم. .note.android.ident (محددة في crtbegin_static/dynamic.o) بحيث ويمكن لأدوات تصحيح الأخطاء التصرف وفقًا لذلك. يتم تعريف عضو الهيكل والقيم على أنه التالي:
    static const struct {
      int32_t namesz
    ;  /* = 8,  sizeof ("Android") */
      int32_t descsz
    ;  /* = 1 * sizeof(int32_t) */
      int32_t type
    ;    /* = 1, ABI_NOTETYPE */
     
    char name[sizeof "Android"];  /* = "Android" */
      int32_t android_api
    ; /* = 3, 4, 5, 8, 9, 14 */
    }

    تم إيقاف الخيارات السابقة للعلامة التجارية في القسم .note.ABI-tag نهائيًا.

  • تمت إضافة نص برمجي جديد run-tests-all.sh يطلب run-tests.sh standalone/run.sh بشروط مختلفة. يتم تشغيل النص البرمجي "run-tests.sh" بدون الخيار --abi، كما يتم تحسينها لتجميع معظم الاختبارات لجميع الاختبارات واجهات التطبيق الثنائية (ABI) المتوافقة وتعمل على جميع الأجهزة المتصلة

تتمثّل الميزات الرئيسية لهذا الإصدار في سلسلة أدوات جديدة للإصدار 4.6 من أداة تجميع GNU Compiler Group (GCC) الإصدار 7.3.x من برنامج تصحيح الأخطاء GNU Debugger (GDB) يتيح تصحيح الأخطاء لنظام Android 4.1 (مستوى واجهة برمجة التطبيقات 16) .

إصلاح الأخطاء المهمة:
  • تم إصلاح مشاكل LOCAL_SHORT_COMMANDS في بيئات نظام التشغيل Mac وWindows Cygwin في والمكتبات الثابتة. يتم إنشاء ملفات القوائم بشكل أسرع، ولا تتم إعادة إنشائها لتجنُّب التكرارات لإعادة بناء المشروع.
  • تم إصلاح عدة مشاكل في ndk-gdb:
    • تم تعديل الأداة لتمرير العلامات -e و-d و-s لإضافة المزيد من الإعدادات. باستمرار.
    • تم تعديل الأداة لقبول الأسماء التسلسلية للأجهزة التي تحتوي على مسافات.
    • تم تعديل الأداة لاسترداد معلومات /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) إلى جنبًا إلى جنب مع سلسلة الأدوات 4.4.3 من GCC الأصلية (binutils 2.19 وGDB 6.6).
    • أصبحت GCC 4.6 الآن سلسلة الأدوات التلقائية. يمكنك ضبط "NDK_TOOLCHAIN_VERSION=4.4.3" في "Application.mk" لاختيار الحالة الأصلية.
    • لا يتوفّر الدعم لأداة ربط "gold" إلا للأجهزة التي تعمل بمعالجات ARM وx86. الهياكل على مضيفي نظامي التشغيل Linux وMac. تكون هذه الخدمة متوقّفة تلقائيًا. أضِف LOCAL_LDLIBS += -fuse-ld=gold في Android.mk لتفعيلها.
    • تتطلّب البرامج التي يتمّ جمعها باستخدام -fPIE السمة GDB الجديدة لتصحيح الأخطاء. بما في ذلك البرامج الثنائية في صور النظام Android 4.1 (المستوى 16 لواجهة برمجة التطبيقات).
    • تحتوي الأداة binutils 2.21 ld على إصلاحات ذات منفذ خلفي من الإصدار 2.22:
      • تم إصلاح ld --gc-sections، الذي يحتفظ بشكل غير صحيح بمراجع الزومبي المكتبات الخارجية. (المزيد جديدة).
      • تم إصلاح أمر ARM strip للاحتفاظ بالعنصر p_align الأصلي p_flags في قسم GNU_RELRO إذا كانت صالحة. بدون هذا الإصلاح، لا يمكن تعذّر تصحيح الأخطاء التي تم إنشاؤها باستخدام -fPIE. (أكثر هـ)
    • تم إيقاف تحسين sincos() للتوافق مع الأقدم الأساسية.
  • تم تعديل خيارات الإصدار لتفعيل وحدات بت Never eXecute (NX) والحماية relro/bind_now تلقائيًا:
    • تمت إضافة --noexecstack إلى أداة التجميع و-z noexecstack إلى أداة الربط. توفر حماية NX من هجمات تجاوز سعة المخزن المؤقت عن طريق تمكين بت NX على حزمة لقطات لأجزاء من الذاكرة
    • تمت إضافة -z relro و-z now إلى أداة الربط لتقوية الروابط الداخلية أقسام البيانات بعد الربط للحماية من الثغرات الأمنية الناتجة عن تلف الذاكرة. (مزيد من المعلومات: 1، 2)
    • يمكن إيقاف هذه الميزات باستخدام الخيارات التالية:
      1. يمكنك إيقاف الحماية من خلال NX من خلال ضبط الخيار --execstack على المجمّع و-z execstack لأداة الربط.
      2. يمكنك إيقاف تعزيز البيانات الداخلية من خلال ضبط -z norelro و -z lazy خيار للرابط
      3. يمكنك إيقاف إجراءات الحماية هذه في jni/Android.mk في NDK من خلال ضبط الخيارات التالية:
        LOCAL_DISABLE_NO_EXECUTE=true  # disable "--noexecstack" and "-z noexecstack"
        DISABLE_RELRO=true             # disable "-z relro" and "-z now"
        

      لمزيد من التفاصيل، يُرجى الانتقال إلى docs/ANDROID-MK.html.

  • تمت إضافة العلامة التجارية لملفات Android التنفيذية في القسم .note.ABI-tag (في crtbegin_static/dynamic.o) بحيث تعمل أدوات تصحيح الأخطاء على النحو المطلوب. الهيكل العضو والقيم على النحو التالي:
    static const struct {
      int32_t namesz
    ;  /* = 4,  sizeof ("GNU") */
      int32_t descsz
    ;  /* = 6 * sizeof(int32_t) */
      int32_t type
    ;    /* = 1 */
     
    char  name[sizeof "GNU"];  /* = "GNU" */
      int32_t os
    ;      /* = 0 */
      int32_t major
    ;   /* = 2 */
      int32_t minor
    ;   /* = 6 */
      int32_t teeny
    ;   /* = 15 */
      int32_t os_variant
    ;  /* = 1 */
      int32_t android_api
    ; /* = 3, 4, 5, 8, 9, 14 */
    }
إصلاحات أخرى للأخطاء:
  • تم إصلاح عملية نقل موقع 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).

يتضمن هذا الإصدار من NDK دعمًا لـ MIPS ABI وبعض الإصلاحات الإضافية.

الميزات الجديدة:
  • تمت إضافة التوافق مع واجهة التطبيق الثنائية (MIPS ABI)، ما يتيح لك إنشاء رمز برمجي للجهاز يتم تشغيله على أجهزة Android المتوافقة المستندة إلى بروتوكول MIPS. تشمل الميزات الرئيسية لنظام MIPS سلاسل الأدوات وعناوين النظام والمكتبات ودعم تصحيح الأخطاء. لمزيد من التفاصيل حول دعم MIPS، يمكنك الاطّلاع على docs/CPU-MIPS.html في حزمة NDK.

    ويتم تلقائيًا إنشاء الرمز للأجهزة المستنِدة إلى معالِج البيانات ARM. يمكنك إضافة mips إلى تعريف APP_ABI في ملف Application.mk لإنشاء لمنصات MIPS. على سبيل المثال، السطر التالي يوجِّه تعليمات إلى ndk-build لإنشاء التعليمات البرمجية لثلاثة واجهات ABI مميزة:

    APP_ABI := armeabi armeabi-v7a mips

    ما لم تكن تعتمد على مصادر التجميع الخاصة بالبنية، مثل تجميع ARM لن تحتاج إلى لمس ملفات Android.mk لإنشاء MIPS التعليمات البرمجية للجهاز.

  • يمكنك إنشاء سلسلة أدوات مستقلّة في نظام MIPS باستخدام "--arch=mips" عند الاتصال بـ make-standalone-toolchain.sh. عرض لمزيد من التفاصيل، يُرجى docs/STANDALONE-TOOLCHAIN.html.

ملاحظة: لضمان توفّر تطبيقاتك إلى المستخدمين فقط إذا كانت أجهزتهم قادرة على تشغيلها، يفلتر Google Play التطبيقات حسب على معلومات مجموعة التعليمات المضمنة في طلبك؟ لا يلزم اتخاذ أي إجراء من جانبك لتفعيل التصفية. بالإضافة إلى ذلك، يفحص نظام Android نفسه تطبيقك على ووقت التثبيت ويسمح بمواصلة التثبيت فقط إذا كان التطبيق يوفر مكتبة ويتم تجميعها حسب بنية وحدة المعالجة المركزية (CPU) للجهاز.

إصلاح الأخطاء المهمة:
  • تم إصلاح خطأ إملائي في تنفيذ GAbi++ ، حيث تكون نتيجة dynamic_cast<D>(b) لكائن الفئة الأساسية b للفئة المشتقّة D قد تم ضبطها بشكل غير صحيح في الاتجاه المعاكس للفئة الأساسية. (المشكلة 28721)
  • تم إصلاح مشكلة تعذّر نسخ make-standalone-toolchain.sh منها libsupc++.*
إصلاحات أخرى للأخطاء:
  • تم إصلاح ndk-build.cmd لضمان عمل ndk-build.cmd بشكل صحيح حتى إذا أعاد المستخدم تعريف متغيّر بيئة SHELL، والذي يمكن تغييره عند تثبيت مجموعة متنوعة من أدوات التطوير في بيئات Windows.

يتضمن هذا الإصدار من NDK إصلاحًا مهمًا للأجهزة التي تستند إلى Tegra2، فضلاً عن بعض إصلاحات وتحسينات إضافية:

إصلاح الأخطاء المهمة:
  • تم إصلاح برامج ثنائية من GNU STL armeabi-v7a بحيث لا تتعطّل على أنظمة تشغيل غير NEON الأجهزة. لم تتم تهيئة الملفات المقدمة مع NDK r7b بشكلٍ صحيح، مما يؤدي إلى حدوث أعطال على الأجهزة التي تستند إلى Tegra2 وغيرها عند محاولة استخدام بعض دوال النقطة العائمة (على سبيل المثال، "cosf" و"sinf" و"expf").
تغييرات مهمة:
  • تمت إضافة إمكانية استخدام أدلة الإخراج المخصّصة من خلال NDK_OUT. متغير البيئة. وعند تحديده، يتم استخدام هذا المتغير لتخزين جميع ملفات تم إنشاؤها بشكل متوسط، بدلاً من $PROJECT_PATH/obj. المتغير هو تم التعرّف عليه أيضًا من خلال ndk-gdb.
  • تم توفير إمكانية إنشاء وحدات باستخدام المئات أو حتى الآلاف من المصادر. من خلال تحديد LOCAL_SHORT_COMMANDS إلى true في Android.mk.

    يفرض هذا التغيير على نظام إصدار NDK وضع معظم خيارات أدوات الربط أو الأرشفة. إلى ملفات قائمة، كحل لقيود طول سطر الأوامر. لمزيد من التفاصيل، انتقِل إلى docs/ANDROID-MK.html.

إصلاحات أخرى للأخطاء:
  • تم إصلاح تنفيذ سياسة android_getCpuCount() في cpufeatures. المساعدة. على بعض الأجهزة التي يتم فيها تفعيل النوى ديناميكيًا من خلال النظام سيُبلغ عن إجمالي عدد النوى النشطة في المرة الأولى التي تستخدم فيها الدالة بدلاً من إجمالي عدد النوى المتاحة فعليًا.

يتضمن هذا الإصدار من NDK إصلاحات لإصدارات Windows الأصلية وCygwin والعديد من التحسينات:

إصلاح الأخطاء المهمة:
  • تم تعديل السمة sys/atomics.h لتجنُّب المشاكل المتعلقة بالدقة. على بعض الأجهزة متعددة النواة والمستندة إلى معالِج البيانات ARM. إعادة إنشاء المصادر غير المعدَّلة باستخدام هذه الميزة من NDK وينبغي إزالة هذه المشكلة تمامًا. لمزيد من التفاصيل، يُرجى الاطّلاع على "docs/ANDROID-ATOMICS.html".
  • تمت العودة إلى الإصدار 2.19 من binutils لحلّ مشاكل تصحيح الأخطاء التي في 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++ (أي الربط ببيئة تشغيل GNU libstdc++ C++ ) إِنْتَ يجب أن يستخدم -lgnustl_shared إذا كنت تريد الربط بالمكتبة المشتركة أو -lstdc++ للإصدار الثابت.

    يُرجى الاطّلاع على docs/STANDALONE-TOOLCHAIN.html للحصول على مزيد من التفاصيل حول هذا الحلّ.

  • تم إصلاح gnustl_shared على Cygwin. اشتكى الرابط من أنه لم يتمكن من العثور على libsupc++.a حتى لو كان الملف في المكان الصحيح.
  • رابط Cygwin C++ تم إصلاحه عند عدم استخدام أي وقت تشغيل C++ محدد من خلال APP_STL
تغييرات أخرى:
  • عندما يستخدم تطبيقك وقت تشغيل GNU libstdc++، سينشئ برنامج التجميع عدم فرض تفعيل الاستثناءات وبروتوكول RTTI مرة أخرى. يؤدي هذا التغيير إلى تصغير حجم الرمز.

    إذا كنت بحاجة إلى هذه الميزات، عليك تنفيذ أحد الإجراءات التالية:

    • تفعيل الاستثناءات و/أو ميزة "مراسلة نصية في الوقت الفعلي" بشكل صريح في الوحدات Application.mk (موصى به)
    • تحديد APP_GNUSTL_FORCE_CPP_FEATURES إلى 'exceptions'، 'rtti' أو كليهما في Application.mk. عرض لمزيد من التفاصيل، يُرجى docs/APPLICATION-MK.html.
  • يعمل ndk-gdb الآن بشكل صحيح عندما يحتوي تطبيقك على خدمات خاصة. يعمل في عمليات مستقلة. تصحح أخطاء عملية التطبيق الرئيسية، بدلاً من يتم إدراج العملية الأولى من قِبل ps، والتي تكون عادةً عملية خدمة.
  • تم إصلاح خطأ نادر حيث لا يفي NDK r7 بقيمة LOCAL_ARM_MODE وتجميع ملفات مصدر معينة (وليس كلها) دائمًا إلى تعليمات 32 بت.
  • STLport: يُرجى إعادة تحميل المصادر لتتطابق مع إصدار نظام Android الأساسي. هذا النمط إصلاح بعض الأخطاء الطفيفة:
    • تم إصلاح مثيل نوع غير مكتمل
    • الإصدار الثانوي الذي تم إصلاحه "==" مقابل "=" خطأ إملائي
    • تم استخدام memmove بدلاً من memcpy في string::assign
    • تمت إضافة معالجة أفضل لـ IsNANorINF وIsINF وIsNegNAN وهكذا.

    لمعرفة التفاصيل الكاملة، يُرجى الاطّلاع على سجلّ إتمام الصفقة.

  • STLport: تمت إزالة 5 أدوات إعداد ثابتة غير ضرورية من المكتبة.
  • تم تجميع مكتبات GNU libstdc++ لـ armeabi-v7a عن طريق الخطأ armeabi بدلاً من ذلك. لم يكن لهذا التغيير أي تأثير على الصواب، ولكن استخدام يجب أن تحقّق واجهة التطبيق الثنائية (ABI) أداءً أفضل قليلاً.
  • تم تعديل مكتبة مساعد "cpu-features" للإبلاغ عن ثلاث مشاكل اختيارية ميزات وحدة المعالجة المركزية x86 (SSSE3 وMOVBE وPOPCNT). عرض لمزيد من التفاصيل، يُرجى الانتقال إلى docs/CPU-FEATURES.html.
  • تم تعديل "docs/NDK-BUILD.html" للإشارة إلى NDK_APPLICATION_MK بدلاً من ذلك. من NDK_APP_APPLICATION_MK لاختيار ملف Application.mk مخصص
  • Cygwin: لم يعد ndk-build ينشئ قيمة "NUL" فارغة في الدليل عند استدعائه.
  • Cygwin: تمت إضافة اكتشاف تلقائي أفضل للتبعية. في الإصدار السابق، لم تعمل بشكل صحيح في الحالات التالية:
    • عندما لا تكون بادئة محرك أقراص Cygwin هي /cygdrive.
    • عند استخدام قواعد تثبيت بدون محرّك، على سبيل المثال، عندما يترجم Cygwin /home إلى \\server\subdir بدلاً من C:\Some\Dir
  • Cygwin: لا يحاول ndk-build استخدام أدوات Windows الأصلية ضمن $NDK/prebuilt/windows/bin مع إصدارات معيّنة من Cygwin و/أو GNU Make.

يتضمن هذا الإصدار من NDK ميزات جديدة لدعم النظام الأساسي Android 4.0 أيضًا أكبر عدد ممكن من الإضافات والتحسينات الأخرى:

الميزات الجديدة
  • تمت إضافة واجهات برمجة تطبيقات NDK الرسمية لنظام التشغيل Android 4.0 (المستوى 14)، ما يضيف ما يلي: الميزات الأصلية على النظام الأساسي:
    • تمت إضافة واجهة برمجة تطبيقات وسائط متعددة أصلية استنادًا إلى الإصدار 1.0.1 من مجموعة Khronos Group OpenMAX AL 1.0.1 القياسية. كل من <OMXAL/OpenMAXAL.h> تسمح عناوين <OMXAL/OpenMAXAL_Android.h> باستهداف التطبيقات. للمستوى 14 من واجهة برمجة التطبيقات لتنفيذ إخراج وسائط متعددة مباشرةً من الرمز الأصلي عن طريق استخدام واجهة قائمة انتظار المخزن المؤقت الخاص بنظام التشغيل Android لمزيد من التفاصيل، يُرجى مراجعة docs/openmaxal/index.html وhttp://www.khronos.org/openmax/.
    • تم تعديل واجهة برمجة التطبيقات للصوت الأصلي استنادًا إلى الإصدار 1.0.1 من حزمة Khronos Group OpenSL ES. القياسية. باستخدام المستوى 14 من واجهة برمجة التطبيقات، يمكنك الآن فك ترميز الصوت المضغوط (مثل MP3 وAAC Vorbis) إلى PCM. لمزيد من التفاصيل، يمكنك الاطّلاع على docs/opensles/index.html و http://www.khronos.org/opensles/
  • تمت إضافة دعم Ccache. لتسريع عمليات إعادة الإنشاء الكبيرة، حدد NDK_CCACHE متغير البيئة إلى ccache (أو المسار إلى برنامج ccache الثنائي). عند الإعلان، يتم تلقائيًا إنشاء نظام إصدار NDK. تستخدم ذاكرة التخزين المؤقت عند تجميع أي ملف مصدر. مثل:
    export NDK_CCACHE=ccache
    

    ملاحظة: ذاكرة التخزين المؤقت غير مضمّنة في إصدار NDK. لذا، يجب أن يتم تثبيته قبل استخدامه. لمزيد من المعلومات حول ذاكرة التخزين المؤقت، يمكن مراجعة http://ccache.samba.org.

  • تمت إضافة معلومات عن إمكانية ضبط APP_ABI على all للإشارة إلى أنّ: كنت تريد إنشاء وحدات NDK لجميع واجهات التطبيق الثنائية (ABI) التي يدعمها NDK المحدد . وهذا يعني أن أحد السطرين التاليين في تتساوى Application.mk مع هذا الإصدار:
    APP_ABI := all
    APP_ABI := armeabi armeabi-v7a x86
    

    يعمل هذا الخيار أيضًا إذا حددت APP_ABI عند الاتصال ndk-build من سطر الأوامر، وهي طريقة سريعة للتحقق من لجميع واجهات التطبيق الثنائية (ABI) المتوافقة دون تغيير Application.mk file مثلاً:

    ndk-build APP_ABI=all
    
  • تمت إضافة متغيّر LOCAL_CPP_FEATURES في Android.mk بحيث توضيح ميزات C++ (المراسلة النصية في الوقت الفعلي أو الاستثناءات) التي تستخدمها الوحدة. هذا النمط أن عملية الربط النهائي تعمل بشكل صحيح إذا كانت لديك وحدات معدّة مسبقًا تعتمد على هذه الميزات. يمكنك الاطّلاع على docs/ANDROID-MK.html و لمزيد من التفاصيل، يُرجى docs/CPLUSPLUS-SUPPORT.html.
  • المسارات المختصرة للوصول إلى ملفات المصدر والكائنات المستخدَمة في أوامر الإصدار فعندما استدعاء $NDK/ndk-build من مسار مشروعك، والمسارات إلى المصدر، والملفات الثنائية التي يتم تمريرها إلى أوامر الإصدار أقصر الآن، لأنه تم تمريرها بالنسبة إلى الدليل الحالي. هذا مفيد عند إنشاء مشروعات بها الكثير من ملفات المصدر، لتجنب القيود على الحدود القصوى طول سطر الأوامر الذي يدعمه نظام التشغيل المضيف. لم يطرأ أي تغيير على السلوك في حال استدعاء ndk-build من دليل فرعي في شجرة مشروعك، أو إذا ويمكنك تعريف NDK_PROJECT_PATH للإشارة إلى دليل معين.
ميزات تجريبية
يمكنك الآن إنشاء ملفات مصدر 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" الآن بشكل صحيح مع الأنشطة التي تتضمّن فئات متعددة في فلاتر الأهداف الرئيسية.
  • عمليات استيراد المكتبة الثابتة أصبحت الآن متعدِّدة بشكل صحيح. على سبيل المثال، إذا كان المستوى الأعلى الوحدة 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 لإتاحة المزيد من الإضافات. ملاحظة أن هذا لا يؤدي إلى تغيير واجهات التطبيق الثنائية (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_ANDROID_recordable
    • EGL_NV_system_time

لا يتضمن هذا الإصدار من NDK أي ميزات جديدة مقارنة بـ r6. إصدار r6b يعالج المشكلات التالية في إصدار r6:

إصلاحات أخطاء مهمة
  • تم إصلاح الإصدار عند استخدام APP_ABI="armeabi x86". بُنى الهندسة المعمارية المتعددة.
  • تم إصلاح موقع برامج ثنائية STLport المصممة مسبقًا في حزمة إصدار NDK. هناك خطأ في النص البرمجي للتغليف أدى إلى وضعه في مكان غير صحيح.
  • تم إصلاح استخدام atexit() في المكتبات المشتركة باستخدام الإصدار x86 المستقل. وسلسلة الأدوات.
  • تم إصلاح make-standalone-toolchain.sh --arch=x86. لقد اعتادت أن تفشل لنسخ ثنائيات GNU libstdc++ المناسبة إلى الموقع الصحيح.
  • تم إصلاح تحذيرات ربط سلسلة الأدوات المستقلة بشأن عدم توفّر التعريف حجم الرمز __dso_handle (ARM فقط).
  • تم إصلاح ترتيب التضمين $(SYSROOT)/usr/include للإصدارات x86. راجع الخطأ للحصول على مزيد من المعلومات.
  • تم إصلاح تعريفي ptrdiff_t وsize_t في للأنظمة الخاصة بالمعالج x86 عند استخدامها مع سلسلة الأدوات المستقلة x86.

يشمل هذا الإصدار من 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.
تغييرات أخرى:
تم إيقاف arm-eabi-4.4.0، الذي تم إيقافه منذ NDK r5، من توزيع NDK.

لا يتضمن هذا الإصدار من 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 من أجل مستوى واجهة برمجة التطبيقات 9 (الإصدار 2.3 من نظام التشغيل Android) ليتم عرضه بشكل صحيح على الدوال الجديدة المتعلقة بوقت الربط التي تمت إضافتها في مستوى واجهة برمجة التطبيقات هذا (على سبيل المثال، pthread_rwlock_init).
تحسينات وإصلاحات طفيفة:
  • ترتبط ملفات الكائنات دائمًا بالترتيب الذي تظهر به LOCAL_SRC_FILES لم يكن هذا هو الحال في السابق لأن الملفات كانت مجمّعة حسب إضافات المصدر بدلاً من ذلك
  • عند تعذّر import-module، يطبع الآن قائمة الأدلة التي نتائج البحث. ويكون ذلك مفيدًا للتأكد من أن تعريف NDK_MODULE_PATH التي يستخدمها نظام التصميم بشكل صحيح.
  • عندما تنجح import-module، فإنها تطبع الآن الدليل الذي يحتوي على تم العثور على الوحدة في السجل (مرئية في NDK_LOG=1).
  • تمت زيادة سرعة إصدار التطبيقات التي يمكن تصحيح الأخطاء فيها عند توفّر عدد كبير جدًا منها. من تضمين الأدلة في المشروع.
  • ndk-gdb: رصد أفضل لحالات تعذُّر التشغيل (adb shell) وتحسين الأداء رسائل الخطأ.
  • <pthread.h>: تم إصلاح تعريف PTHREAD_RWLOCK_INITIALIZER للمستوى 9 من واجهة برمجة التطبيقات (Android 2.3) والإصدارات الأحدث.
  • تم إصلاح مشكلة إمكانية استيراد الوحدة لنفسها، ما يؤدي إلى حدوث تكرار لا نهائي في إنشاء GNU
  • تم إصلاح الخطأ الذي تسبَّب في تعذُّر إنشاء الإصدار في حال ضبط السياسة LOCAL_ARM_NEON على صحيح (خطأ إملائي في build/core/build-binary.mk).
  • تم إصلاح خطأ كان يمنع تجميع ملفات .s (.S ملف لا بأس به).

لا يتضمن هذا الإصدار من NDK أي ميزات جديدة مقارنة بـ r5. إصدار r5b يعالج المشكلات التالية في إصدار r5:

  • تتطلب البرامج الثنائية r5 استخدام glibc 2.11، ولكن يتم إنشاء البرامج الثنائية r5b باستخدام جدول خاص التي تستهدف glibc 2.7 أو أعلى بدلاً من ذلك. تعمل البرامج الثنائية لسلسلة أدوات Linux الآن على نظام التشغيل Ubuntu 8.04 أو إصدار أحدث.
  • إصلاح خطأ في المحول البرمجي في سلسلة أدوات arm-linux-androideabi-4.4.3. أنشأ البرنامج الثنائي السابق تسلسلات تعليمات إبهام غير صالحة عندما التعامل مع الأحرف الموقّعة.
  • تضيف الوثائق الناقصة "gnustl_static" لـ APP_STL، تتيح لك الربط إصدار مكتبة ثابت من GNU libstdc++.
  • الـ
  • تم إصلاح المشاكل التالية البالغ عددها ndk-build:
    • يشير هذا المصطلح إلى خطأ أدى إلى إنشاء ملفات تبعية غير متسقة عند حدث خطأ في التحويل البرمجي على نظام التشغيل Windows. هذا منعت البناء الصحيح بعد تم إصلاح الخطأ في رمز المصدر.
    • يشير هذا المصطلح إلى خطأ خاص بـ Cygwin حيث يتم استخدام مسارات قصيرة جدًا تثبيت 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.

يتضمن هذا الإصدار من NDK العديد من واجهات برمجة التطبيقات الجديدة، والتي تم تعريف معظمها على تطوير الألعاب والتطبيقات المشابهة التي تستفيد من من الرموز البرمجية الأصلية. باستخدام واجهات برمجة التطبيقات، يستطيع المطوّرون الوصول مباشرةً إلى الأحداث والملفات الصوتية إدارة الرسومات والنوافذ، والأصول، والتخزين. يمكن للمطوّرين أيضًا تنفيذ دورة حياة تطبيقات Android في الرموز البرمجية الأصلية بمساعدة من صف واحد (NativeActivity). للحصول على معلومات تفصيلية تصف التغييرات في هذه الدورة إصدار المستند، يُرجى قراءة المستند CHANGES.HTML المضمّن في مستند NDK الذي تم تنزيله طرد.

ملاحظات عامة:
  • تتيح إضافة الأنشطة الأصلية، ما يسمح لك بتنفيذ دورة حياة تطبيق Android في التعليمات البرمجية الأصلية.
  • تتيح هذه الإضافة الدعم الأصلي لما يلي:
    • النظام الفرعي للإدخال (مثل لوحة المفاتيح وشاشة اللمس)
    • الوصول إلى بيانات جهاز الاستشعار (مقياس التسارع والبوصلة والجيروسكوب وغير ذلك)
    • واجهات برمجة التطبيقات لحلقة الأحداث لانتظار إجراءات مثل أحداث الإدخال وأدوات الاستشعار.
    • النظام الفرعي للنوافذ والسطح
    • واجهات برمجة تطبيقات للصوت استنادًا إلى معيار OpenSL ES الذي يتيح التشغيل والتسجيل بالإضافة إلى التحكّم في التأثيرات الصوتية للنظام الأساسي
    • إمكانية الوصول إلى مواد العرض المجمَّعة في ملف .apk
  • يتضمّن سلسلة أدوات جديدة (استنادًا إلى الإصدار 4.4.3 من GCC)، وتعمل على إنشاء رموز برمجية أفضل أيضًا الآن كمجمع مستقل للأشخاص الذين يرغبون في بناء أغراضهم باستخدام ./configure && make عرض docs/STANDALONE-TOOLCHAIN.html لمزيد من التفاصيل. وما زالت القيم الثنائية للإصدار 4.4.0 من GCC المقدمة، ولكن تمت إزالة البرامج الثنائية 4.2.1.
  • يضيف دعمًا للمكتبات الثابتة والمشتركة المنشأة مسبقًا (docs/PREBUILTS.html) وحدة التصدير والاستيراد لتسهيل مشاركة وحدات الجهات الخارجية وإعادة استخدامها (docs/IMPORT-MODULE.html يشرح السبب).
  • توفّر تنفيذًا تلقائيًا لـ C++ STL (استنادًا إلى STLport) كوحدة مساعدة. أُنشأها جون هنتر، الذي كان متخصصًا يمكن استخدامها إما كمكتبة ثابتة أو مشتركة (تتوفّر التفاصيل وأمثلة الاستخدام المصادر/android/stlport/README). مصمّمة مسبقًا تعتبر أيضًا القيم الثنائية لـ STLport (الثابتة أو المشتركة) وGNU libstdc++ (الثابتة فقط) المقدمة إذا اخترت التجميع مقابل تلك المكتبات بدلاً من تنفيذ C++ STL الافتراضي. لا تتوفر استثناءات C++ وRTTI في تنفيذ STL التلقائي. لمزيد من المعلومات، المعلومات، راجع docs/CPLUSPLUS-SUPPORT.HTML.
  • يتضمّن ذلك تحسينات على مكتبة مساعد "cpufeatures" التي من شأنها تحسين الأداء. الإعلام عن نوع وحدة المعالجة المركزية (CPU) (أبلغت بعض الأجهزة سابقًا عن وحدة المعالجة المركزية ARMv7 عندما كان الجهاز ARMv6). أر أن توصي بالمطوّرين الذين يستخدمون هذه المكتبة لإعادة إنشاء تطبيقاتهم حمِّلها إلى Google Play للاستفادة من التحسينات.
  • تضيف مكتبة EGL التي تتيح لك إنشاء زخارف OpenGL ES وإدارتها
  • إضافة نماذج تطبيقات جديدة، native-plasma native-activity, لتوضيح كيفية كتابة نشاط أصلي.
  • تضمين العديد من إصلاحات الأخطاء والتحسينات الصغيرة الأخرى؛ راجع docs/CHANGES.html المزيد قائمة مفصلة بالتغييرات.
ملاحظات NDK r4b:

يتضمن إصلاحات لعدة مشكلات في إصدار NDK وتصحيح النصوص البرمجية - إذا كنت تستخدم الإصدار NDK r4، فنحن نوصي بتنزيل إصدار NDK r4b. للحصول على تفاصيل معلومات تصف التغييرات في هذا الإصدار، يُرجى قراءة مستند CHANGES.TXT تضمينها في حزمة NDK التي تم تنزيلها.

ملاحظات عامة:
  • يوفِّر هذا الإصدار نظام إنشاء مبسَّطًا من خلال إصدار ndk-build الجديد. الأمر.
  • إتاحة إمكانية تصحيح الأخطاء الأصلية بسهولة لرمز الجهاز الذي تم إنشاؤه في مرحلة الإنتاج الأجهزة من خلال الأمر ndk-gdb الجديد.
  • إضافة واجهة تطبيق ثنائية (ABI) جديدة خاصة بنظام التشغيل Android لبُنى وحدة المعالجة المركزية (CPU) المستنِدة إلى معالجات ARM armeabi-v7a توسّع واجهة التطبيق الثنائية (ABI) الجديدة نطاق armeabi واجهة التطبيق الثنائية (ABI) الحالي ليشمل تتضمّن هذه الإضافات الخاصة بمجموعة تعليمات وحدة المعالجة المركزية (CPU):
    • تعليمات رائعة
    • تعليمات FPU لأجهزة VFP (VFPv3-D16)
    • دعم اختياري للميزات الأساسية ARM Advanced SIMD (NEON) GCC وVFPv3-D32 متوافق مع أجهزة، مثل Verizon Droid من Motorola وGoogle Nexus One و آخرون.
  • تضيف مكتبة cpufeatures الثابتة الجديدة (مع مصادر) التي تسمح ميزات وحدة المعالجة المركزية (CPU) للجهاز المضيف في وقت التشغيل. على وجه التحديد، يمكن للتطبيقات والتحقق من توفر التوافق مع ARMv7-A وكذلك دعم VFPv3-D32 وNEON، ثم تقديم مسارات التعليمات البرمجية حسب الحاجة.
  • تضيف نموذج تطبيق، hello-neon، يوضح كيفية استخدام cpufeatures للتحقق من ميزات وحدة المعالجة المركزية (CPU) ثم توفير واجهة محسَّنة مسار الرمز باستخدام رموز NEON، إذا كانت متوافقة مع وحدة المعالجة المركزية (CPU).
  • تتيح لك هذه الميزة إنشاء رمز جهاز لإحدى مجموعات التعليمات المتوافقة أو كلتيهما. بواسطة NDK. على سبيل المثال، يمكنك إنشاء كل من بنيتي ARMv5 وARMv7-A في نفس الوقت وتخزين كل شيء في النسخة النهائية .apk
  • للتأكد من أن تطبيقاتك غير متاحة للمستخدمين إلا إذا كانت أجهزتهم قادرة على تشغيلها، فإن Google Play الآن يصفي التطبيقات حسب التعليمات المضمنة في طلبك - لا يلزم اتخاذ أي إجراء من جانبك لتمكين التصفية. بالإضافة إلى ذلك، يتحقق نظام Android نفسه أيضًا تطبيقك أثناء التثبيت، ولا يسمح بمواصلة التثبيت إلا في حالة التطبيق أيضًا مكتبة يتم تجميعها من أجل بنية وحدة المعالجة المركزية (CPU) للجهاز.
  • يدعم الإصدار 2.2 من نظام التشغيل Android، بما في ذلك واجهة برمجة تطبيقات ثابتة وجديدة للوصول إلى وحدات البكسل. المخزن المؤقت لـ Bitmap عناصر من الرمز البرمجي الأصلي.
ملاحظات عامة:
  • يتيح هذا التحديث استخدام المكتبة الأصلية OpenGL ES 2.0.
  • تضيف نموذج تطبيق، hello-gl2، يوضح استخدام OpenGL ES 2.0 أدوات تظليل الأجزاء والأجزاء
  • وقد تم تحديث البرامج الثنائية لسلسلة الأدوات لهذا الإصدار مع إصدار GCC 4.4.0، من المفترض أن يتم إنشاء رمز جهاز أكثر إحكامًا وكفاءةً من الرمز السابق (4.2.1). لا تزال NDK توفر أيضًا البرامج الثنائية 4.2.1، والتي يمكنك استخدامها اختياريًا لإنشاء التعليمات البرمجية لجهازك.

تم إصداره في الأصل باسم "الإصدار 1 من Android 1.6 NDK".

ملاحظات عامة:
  • يتيح هذا التحديث استخدام المكتبة الأصلية OpenGL ES 1.1.
  • إضافة نموذج تطبيق، san-angeles، يعرض رسومات ثلاثية الأبعاد من خلال واجهات برمجة تطبيقات OpenGL ES الأصلية، مع إدارة مراحل النشاط باستخدام كائن GLSurfaceView.

تم إصداره في الأصل باسم "الإصدار 1 من Android 1.5 NDK".

ملاحظات عامة:
  • يشمل دعم التجميع (GCC) لتعليمات ARMv5TE، بما في ذلك Thumb-1 على التعليمات
  • يتضمن عناوين النظام لواجهات برمجة التطبيقات الأصلية الثابتة والوثائق والنماذج التطبيقات.