कस्टम बिल्ड लॉजिक लागू करें

इस सेक्शन में, उन ऐडवांस विषयों के बारे में बताया गया है जो आपके लिए मददगार होते हैं 'Android Gradle प्लग इन' या अपना खुद का प्लग इन लिखें.

वैरिएंट डिपेंडेंसी को कस्टम लॉजिक पर पब्लिश करें

लाइब्रेरी में ऐसे फ़ंक्शन हो सकते हैं जो दूसरे प्रोजेक्ट या सब-प्रोजेक्ट में हो सकते हैं इस्तेमाल करना है. लाइब्रेरी को प्रकाशित करना एक ऐसी प्रक्रिया है जिससे लाइब्रेरी बनाई जाती है तक सीमित नहीं है. लाइब्रेरी यह कंट्रोल कर सकती हैं कि उपभोक्ताओं के पास कंपाइल समय और रनटाइम के दौरान ऐक्सेस होता है.

दो अलग-अलग कॉन्फ़िगरेशन हैं, जिनमें ट्रांज़िटिव डिपेंडेंसी हर क्लासपाथ का इस्तेमाल करना चाहिए, जिसका इस्तेमाल उपभोक्ता लाइब्रेरी को नीचे बताया गया है:

  • variant_nameApiElements: इस कॉन्फ़िगरेशन में, ऐसी ट्रांज़िटिव डिपेंडेंसी जो कंपाइल करते समय उपभोक्ताओं के लिए उपलब्ध रहती हैं.
  • variant_nameRuntimeElements: यह कॉन्फ़िगरेशन लागू है रनटाइम के दौरान उपभोक्ताओं के लिए उपलब्ध ट्रांज़िटिव डिपेंडेंसी.

अलग-अलग कॉन्फ़िगरेशन के बीच के संबंधों के बारे में ज़्यादा जानने के लिए, Java लाइब्रेरी पर जाएँ प्लगिन कॉन्फ़िगरेशन के बारे में ज़्यादा जानें.

कस्टम डिपेंडेंसी रिज़ॉल्यूशन की रणनीतियां

किसी प्रोजेक्ट में एक ही लाइब्रेरी के दो अलग-अलग वर्शन पर निर्भरता शामिल हो सकती है इससे डिपेंडेंसी से जुड़ी समस्याएं पैदा हो सकती हैं. उदाहरण के लिए, अगर आपका प्रोजेक्ट, मॉड्यूल A के वर्शन 1 और वर्शन 2 पर निर्भर करता है मॉड्यूल B और मॉड्यूल A, मॉड्यूल B के वर्शन 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 {
            ...
        }
    }
}