Application.mk

يوضّح هذا المستند ملف إصدار Application.mk الذي يستخدمه ndk-build.

وننصحك بقراءة صفحة المفاهيم قبل هذا القسم.

نظرة عامة

يحدِّد Application.mk الإعدادات على مستوى المشروع للإصدار ndk-build. توجد هذه العلامة تلقائيًا على jni/Application.mk، في دليل مشروع تطبيقك.

المتغيرات

واجهة برمجة التطبيقات (APP_ABI)

وفقًا للإعدادات التلقائية، ينشئ نظام إصدار NDK رمزًا لجميع تطبيقات ABI التي لم يتم إيقافها. يمكنك استخدام إعداد APP_ABI لإنشاء رمز لاستدعاءات Android ثنائية (ABA) محدَّدة. يعرض الجدول 1 إعدادات APP_ABI لمجموعات تعليمات مختلفة.

الجدول 1. APP_ABI إعدادات لمجموعات تعليمات مختلفة.

موضوع التعليمات القيمة
ARMv7 بت 32 بت APP_ABI := armeabi-v7a
ARMv8 (AArch64) 64 بت APP_ABI := arm64-v8a
x86 APP_ABI := x86
x86-64 APP_ABI := x86_64
جميع واجهات التطبيق الثنائية (ABA) المتوافقة (تلقائية) APP_ABI := all

يمكنك أيضًا تحديد قيم متعدّدة عن طريق وضعها في السطر نفسه، مع الفصل بينها بمسافات. على سبيل المثال:

APP_ABI := armeabi-v7a arm64-v8a x86

للاطّلاع على قائمة بجميع واجهات التطبيق الثنائية (ABA) المتوافقة وتفاصيل حول استخدامها وقيودها، يمكنك الرجوع إلى تطبيقات Android الثنائية (ABA) في Android.

APP_ASFLAGS

العلامات التي سيتم تمريرها إلى العارض لكل ملف مصدر التجميع (.s و.S ملف) في المشروع.

APP_ASMFLAGS

العلامات التي سيتم تمريرها إلى YASM لكل الملفات المصدر في YASM (.asm وx86/x86_64 فقط).

نص_تطبيق_المستخدم

يفترض الإصدار ndk-build تلقائيًا أنّ الملف Android.mk يقع في jni/Android.mk بالنسبة إلى جذر المشروع.

لتحميل ملف Android.mk من موقع مختلف، اضبط APP_BUILD_SCRIPT على المسار المطلق لملف Android.mk.

APP_CFLAGS

العلامات التي سيتم تمريرها لكل عمليات تجميع C/C++ في المشروع.

يُرجى الاطّلاع أيضًا على: APP_CONLYFLAGS وAPP_CPPFLAGS.

معرّف_تطبيق TrueView

يمكنك ضبط القيمة على "صحيح" لتفعيل clang-tedy لجميع الوحدات في المشروع. يكون هذا الإعداد غير مفعَّل بشكل تلقائي.

APP_Cزين_TIDY_FLAGS

علامات لتوجيه جميع عمليات التنفيذ الجماعية في المشروع.

APP_CONLYFLAGS

العلامات التي يجب تمريرها لكل عمليات التجميع في المشروع. ولن يتم استخدام هذه العلامات لترميز C++.

يُرجى أيضًا الاطّلاع على: APP_CFLAGS وAPP_CPPFLAGS.

APP_CPPFLAGS

العلامات التي سيتم تمريرها لجميع عمليات تجميع C++ في المشروع. لن يتم استخدام هذه العلامات للرمز C.

راجِع أيضًا: APP_CFLAGS وAPP_CONLYFLAGS.

APP_CXXFLAGS

يتطابق مع APP_CPPFLAGS، ولكنه سيظهر بعد APP_CPPFLAGS في أمر التجميع. على سبيل المثال:

APP_CPPFLAGS := -DFOO
APP_CXXFLAGS := -DBAR

سيؤدي الضبط أعلاه إلى تشغيل أمر التجميع مثل clang++ -DFOO -DBAR بدلاً من clang++ -DBAR -DFOO.

تصحيح الأخطاء

يمكنك ضبطها على "صحيح" لإنشاء تطبيق يمكن تصحيح الأخطاء فيه.

APP_LDFLAGS

العلامات التي سيتم تمريرها عند ربط الملفات التنفيذية والمكتبات المشتركة.

طلب التطبيق

المسار المطلق إلى ملف AndroidManifest.xml.

سيتم استخدام $(APP_PROJECT_PATH)/AndroidManifest.xml) بشكل تلقائي في حال توفّره.

التطبيقات

تمثّل هذه السمة قائمة صريحة من الوحدات التي سيتم إنشاؤها. عناصر هذه القائمة هي أسماء الوحدات كما تظهر في LOCAL_MODULE في ملف Android.mk.

سينشئ ndk-build تلقائيًا جميع المكتبات المشتركة والملفات التنفيذية والملحقات التابعة لها. سيتم إنشاء المكتبات الثابتة فقط في حال استخدامها في المشروع، أو إذا كان المشروع يحتوي على مكتبات ثابتة فقط أو إذا كانت مُسمّاة في APP_MODULES.

نتيجة التطبيق

حدّد هذا المتغيّر الاختياري إما على أنه release أو debug. سيتم إنشاء برامج ثنائية للإصدارات تلقائيًا.

يوفّر وضع الإصدار تحسينات وقد يؤدي إلى إنشاء برامج ثنائية لا يمكن استخدامها مع برنامج تصحيح الأخطاء. ويؤدي وضع تصحيح الأخطاء إلى إيقاف عمليات التحسين حتى يتم استخدام برامج تصحيح الأخطاء.

تجدر الإشارة إلى أنه يمكنك تصحيح أخطاء الإصدار أو تصحيح أخطاء البرامج الثنائية. إلا أنّ البرامج الثنائية للإصدارات توفر معلومات أقل أثناء تصحيح الأخطاء. على سبيل المثال، قد يتم تحسين المتغيرات، ما يمنع الفحص. بالإضافة إلى ذلك، يمكن أن تؤدي إعادة ترتيب الرموز البرمجية إلى صعوبة في تجاوز الرمز، وقد لا يكون تتبُّع تسلسل استدعاء الدوال البرمجية موثوقًا به.

سيؤدي تعريف android:debuggable في علامة <application> لبيان التطبيق إلى ضبط هذا المتغيّر على debug تلقائيًا بدلاً من release. يمكنك إلغاء هذه القيمة التلقائية من خلال ضبط APP_OPTIM على release.

منصة_التطبيق

يعلن APP_PLATFORM عن مستوى واجهة برمجة تطبيقات Android الذي تم إنشاء هذا التطبيق وفقًا له ويتوافق مع minSdkVersion الخاص بالتطبيق.

وإذا لم يتم تحديد هذه السياسة، سيستهدف ndk-build الحدّ الأدنى لمستوى واجهة برمجة التطبيقات الذي تتيحه اتفاقية عدم الإفشاء. إنّ الحدّ الأدنى لمستوى واجهة برمجة التطبيقات المتوافق مع أحدث إصدار من NDK سيكون دائمًا منخفضًا بشكل كافٍ لإتاحة جميع الأجهزة النشطة تقريبًا.

على سبيل المثال، تحدِّد القيمة android-16 أنّ مكتبتك تستخدم واجهات برمجة تطبيقات غير متوفّرة في الإصدار Android 4.1 (مستوى واجهة برمجة التطبيقات 16) ولا يمكن استخدامها على الأجهزة التي تعمل بإصدار أقدم من الإصدار. للحصول على قائمة كاملة بأسماء الأنظمة الأساسية وصور نظام Android المقابلة، يمكنك الاطّلاع على واجهات برمجة التطبيقات NDK الأصلية على Android.

عند استخدام Gradle وexternalNativeBuild، يجب عدم ضبط هذه المعلّمة مباشرةً. بدلاً من ذلك، يمكنك ضبط السمة minSdkVersion في المربّعات defaultConfig أو productFlavors من الملف على مستوى الوحدة build.gradle. يضمن ذلك أنّ المكتبة لا يتم استخدامها إلا على التطبيقات المثبّتة على أجهزة تعمل بإصدار Android مناسب.

تجدر الإشارة إلى أنّ اتفاقية عدم الإفشاء لا تحتوي على مكتبات لكل مستوى من مستويات واجهة برمجة التطبيقات لنظام التشغيل Android. ويتم حذف النُسخ التي لا تتضمن واجهات برمجة تطبيقات جديدة أصلية لتوفير المساحة في الاستخدامات المستندة إلى NDK والإصدار ndk-build، بالترتيب التنازلي حسب الأفضلية:

  1. إصدار النظام الأساسي الذي يطابق APP_PLATFORM.
  2. المستوى التالي المتاح في واجهة برمجة التطبيقات دون APP_PLATFORM على سبيل المثال، سيتم استخدام القيمة android-19 عندما تكون قيمة APP_PLATFORM هي android-20، لأنّه ما مِن واجهات برمجة تطبيقات جديدة مدمجة مع المحتوى في الإصدار android-20.
  3. الحد الأدنى لمستوى واجهة برمجة التطبيقات الذي تدعمه اتفاقية NDK.

APP_PROJECT_PATH

المسار المطلق للدليل الجذر للمشروع.

إطار عمل التطبيق

ما يعادل LOCAL_SHORT_COMMANDS على مستوى المشروع. لمعرفة المزيد من المعلومات، يُرجى الاطّلاع على مستندات LOCAL_SHORT_COMMANDS في Android.mk.

APP_STL

مكتبة C++ العادية لاستخدامها في هذا التطبيق

ويتم استخدام system STL تلقائيًا. وتشمل الخيارات الأخرى c++_shared وc++_static وnone. يُرجى الاطّلاع على مدّة التشغيل +CNDK C+ وميزاتها.

وضع_الانتقال

الوسيطة التي سيتم تمريرها إلى strip للوحدات في هذا التطبيق. يكون الإعداد التلقائي في الساعة --strip-unneeded. لتجنُّب إزالة جميع البرامج الثنائية في الوحدة، اضبط القيمة على none. بالنسبة إلى أوضاع الشرائح الأخرى، راجع مستندات Strip.

أرشيف التطبيقات

يمكنك ضبط القيمة على "true" لاستخدام أرشيفات رفيعة لجميع المكتبات الثابتة في المشروع. لمعرفة المزيد من المعلومات، يُرجى الاطّلاع على مستندات LOCAL_THIN_ARCHIVE في Android.mk.

APP_WRAP_SH

المسار إلى الملف التفاف.sh ليتم تضمينه مع هذا التطبيق.

تتوفّر صيغة لهذا المتغيّر لكل واجهة تطبيق ثنائية (ABI)، بالإضافة إلى صيغة عامة لواجهة التطبيق الثنائية (ABI):

  • APP_WRAP_SH
  • APP_WRAP_SH_armeabi-v7a
  • APP_WRAP_SH_arm64-v8a
  • APP_WRAP_SH_x86
  • APP_WRAP_SH_x86_64