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

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

نشر اعتماديات خيارات المنتجات في منطق مخصّص

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

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

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

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

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

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

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

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

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

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

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

Groovy

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