يوضّح هذا القسم مواضيع متقدّمة مفيدة عند الرغبة في توسيع نطاق استخدام المكوّن الإضافي لنظام Gradle المتوافق مع Android أو كتابة المكوّن الإضافي الخاص بك.
نشر التبعيات المتعلّقة بالصيغ في المنطق المخصّص
يمكن أن تحتوي المكتبة على وظائف قد يريد مشروعات أخرى أو مشروعات فرعية استخدامها. نشر المكتبة هو العملية التي يتم من خلالها إتاحة المكتبة للمستهلكين. يمكن للمكتبات التحكّم في التبعيات التي يمكن للمستهلكين الوصول إليها في وقت الترجمة ووقت التشغيل.
هناك إعدادان منفصلان يحتويان على التبعيات الانتقالية لكل مسار فئة، ويجب أن يستخدمهما المستخدِمون للاستفادة من المكتبة على النحو الموضّح أدناه:
-
variant_nameApiElements
: تحتوي هذه الإعدادات على التبعيات الانتقالية المتاحة للمستهلكين في وقت الترجمة. -
variant_nameRuntimeElements
: تحتوي هذه الإعدادات على التبعيات الانتقالية المتاحة للمستهلكين في وقت التشغيل.
للاطّلاع على مزيد من المعلومات عن العلاقات بين الإعدادات المختلفة، انتقِل إلى إعدادات المكونات الإضافية لـ مكتبة Java.
استراتيجيات حلّ التبعيات المخصّصة
قد يتضمّن المشروع تبعية لنسختَين مختلفتَين من المكتبة نفسها، ما قد يؤدي إلى تعارضات في التبعية. على سبيل المثال، إذا كان مشروعك يعتمد على الإصدار 1 من الوحدة "أ" والإصدار 2 من الوحدة "ب"، وكانت الوحدة "أ" تعتمد بشكل مباشر على الإصدار 3 من الوحدة "ب"، يحدث تعارض في إصدارات التبعيات.
لحلّ هذا التعارض، يستخدم المكوّن الإضافي لنظام Android Gradle استراتيجية حلّ التبعيات التالية: عندما يرصد المكوّن الإضافي أنّه تم تضمين إصدارات مختلفة من الوحدة نفسها في الرسم البياني للتبعيات، يختَر تلقائيًا الإصدار الذي يتضمّن رقم الإصدار الأعلى.
ومع ذلك، قد لا تعمل هذه الاستراتيجية دائمًا على النحو المطلوب. لتخصيص استراتيجية حلّ التبعيات، استخدِم الإعدادات التالية لتحديد تبعيات محدّدة لخيار مطلوب لمهمتك:
variant_nameCompileClasspath
: يحتوي هذا الإعداد على استراتيجية التحديد لمسار تجميع خيار محدّد.variant_nameRuntimeClasspath
: يحتوي هذا الإعداد على استراتيجية التحديد لمسار فئة تشغيل إصدار معيّن.
يتضمّن المكوّن الإضافي لـ Android Gradle أدوات جلب يمكنك استخدامها للوصول إلى عناصر الضبط لكلّ سعر متغير. وبالتالي، يمكنك استخدام واجهة برمجة التطبيقات الخاصة بالأسعار المتغيرة لطلب معلومات عن حلّ التبعيات كما هو موضّح في المثال أدناه:
Kotlin
android { applicationVariants.all { // Return compile configuration objects of a variant. compileConfiguration.resolutionStrategy { // Use Gradle's ResolutionStrategy API // to customize how this variant resolves dependencies. ... } // Return runtime configuration objects of a variant. runtimeConfiguration.resolutionStrategy { ... } // Return annotation processor configuration of a variant. annotationProcessorConfiguration.resolutionStrategy { ... } } }
رائع
android { applicationVariants.all { variant -> // Return compile configuration objects of a variant. variant.getCompileConfiguration().resolutionStrategy { // Use Gradle's ResolutionStrategy API // to customize how this variant resolves dependencies. ... } // Return runtime configuration objects of a variant. variant.getRuntimeConfiguration().resolutionStrategy { ... } // Return annotation processor configuration of a variant. variant.getAnnotationProcessorConfiguration().resolutionStrategy { ... } } }