تطبيق منطق تصميم مخصَّص

يصف هذا القسم المواضيع المتقدّمة التي يمكن الاستفادة منها عندما تريد توسيع مكوّن Android Gradle الإضافي أو كتابة المكوّن الإضافي الخاص بك.

نشر تبعيات الصيغ للمنطق المخصّص

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

هناك إعدادان منفصلان يحتويان على التبعيات المتبادلة لكل مسار فئة ويجب أن يستخدمها المستهلكون للاطّلاع على المكتبة كما هو موضّح أدناه:

  • variant_nameApiElements: تحتوي هذه الإعدادات على التبعيات الانتقالية المتاحة للمستهلكين في وقت التجميع.
  • variant_nameRuntimeElements: تحتفظ هذه الإعدادات بتبعيات النقل العام المتاحة للمستهلكين في وقت التشغيل.

لمعرفة المزيد حول العلاقات بين الإعدادات المختلفة، يمكنك الانتقال إلى إعدادات المكوّن الإضافي لمكتبة Java.

استراتيجيات مخصصة لحل التبعية

قد يتضمن المشروع التبعية على نسختين مختلفتين من نفس المكتبة مما قد يؤدي إلى تضارب التبعية. على سبيل المثال، إذا كان مشروعك يعتمد على الإصدار 1 من الوحدة أ والإصدار 2 من الوحدة ب، وتعتمد الوحدة أ بشكل تبادلي على الإصدار 3 من الوحدة ب، فسينشأ تعارض بين إصدارات التبعية.

لحل هذا التعارض، يستخدم المكوّن الإضافي لنظام Gradle المتوافق مع Android استراتيجية حلّ التبعية التالية: عندما يكتشف المكوّن الإضافي أنّ إصدارات مختلفة من الوحدة نفسها متوفّرة في الرسم البياني للتبعية، فإنّه يختار تلقائيًا الإصدار ذي رقم الإصدار الأعلى.

ومع ذلك، قد لا تعمل هذه الاستراتيجية على النحو المنشود دائمًا. لتخصيص استراتيجية حل التبعية، استخدم الإعدادات التالية لحل التبعيات المحددة لمتغير مطلوب مهمتك:

  • variant_nameCompileClasspath: تحتوي هذه الإعدادات على استراتيجية الحلّ لمسار فئة التجميع في صيغة معيّنة.
  • variant_nameRuntimeClasspath: تحتوي هذه الإعدادات على استراتيجية الحلّ لمسار فئة وقت تشغيل خيار منتج معيّن.

يتضمّن المكوّن الإضافي لنظام Gradle المتوافق مع Android رموزًا يمكنك استخدامها للوصول إلى كائنات الإعدادات لكل صيغة. بالتالي، يمكنك استخدام واجهة برمجة التطبيقات المتغيّرة للاستعلام عن دقة التبعية كما هو موضَّح في المثال أدناه:

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 {
            ...
        }
    }
}