Application.mk

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

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

نظرة عامة

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

المُتغيّرات

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

ينشئ نظام الإصدار NDK تلقائيًا رمزًا لجميع واجهات ABI التي لم يتم إيقافها. يمكنك استخدام الإعداد APP_ABI لإنشاء رمز واجهات ABI محدّدة. يعرض الجدول 1 إعدادات APP_ABI لمجموعات التعليمات المختلفة

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

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

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

APP_ABI := armeabi-v7a arm64-v8a x86

للحصول على قائمة بجميع واجهات ABI المتوافقة وتفاصيل حول استخدامها والقيود المفروضة عليها، يمكنك الرجوع إلى واجهات ABI في Android.

APP_ASFLAGS

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

APP_ASMFLAGS

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

APP_BUILD_script

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

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

APP_CFLAGS

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

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

التطبيق

قم بتعيينها على "true" لتمكين clang-tidy لجميع الوحدات في المشروع. تم إيقافها تلقائيًا.

APP_CLAN_TIDY_FLAGS

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

APP_CONLYFLAGS

العلامات التي يجب تمريرها لكل مجموعات التجميعات C في المشروع. لن يتم استخدام هذه العلامات لرمز 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

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

دليل_APP_MANIFEST

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

وسيتم استخدام علامة $(APP_PROJECT_PATH)/AndroidManifest.xml) تلقائيًا إذا كانت متوفّرة.

عدد_التطبيقات

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

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

APP_optIM

حدِّد هذا المتغيّر الاختياري إما release أو debug. وسيتم إنشاء البرامج الثنائية بشكل افتراضي.

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

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

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

نظام التشغيل APP_PLATFORM

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

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

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

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

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

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

APP_PROJECT_PATH

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

APP_SHORT_COMMANDS

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

APP_STL

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

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

وضع التطبيق

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

APP_THIN_Archive

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

APP_WRAP_SH

المسار إلى ملف wrap.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