फ़्यूज़ की गई लाइब्रेरी की मदद से, एक से ज़्यादा Android लाइब्रेरी को एक साथ पब्लिश करना

कई मॉड्यूल वाले प्रोजेक्ट में, Android लाइब्रेरी को उपयोगकर्ताओं के बीच डिस्ट्रिब्यूट करना मुश्किल हो सकता है. ऐसा तब होता है, जब प्रोजेक्ट के स्ट्रक्चर को साफ़ तौर पर बनाए रखने की कोशिश की जा रही हो. कई मामलों में, पब्लिश की जाने वाली लाइब्रेरी की संख्या, तय की गई संख्या से ज़्यादा होती है.

Android Gradle प्लग इन के साथ बंडल किया गया Fused Library प्लग इन, एक से ज़्यादा Android लाइब्रेरी मॉड्यूल को पब्लिश की जा सकने वाली एक Android लाइब्रेरी में पैकेज करने में मदद करता है. इससे आपको अपनी लाइब्रेरी के सोर्स कोड और संसाधनों को अपनी ज़रूरत के हिसाब से अपने बिल्ड में मॉड्यूलर बनाने की सुविधा मिलती है. साथ ही, इससे डिस्ट्रिब्यूट होने के बाद आपके प्रोजेक्ट के स्ट्रक्चर को सार्वजनिक होने से बचाया जा सकता है.

एक लाइब्रेरी के तौर पर डिस्ट्रिब्यूट करने से ये फ़ायदे मिल सकते हैं:

  • डिपेंडेंसी को आसान बनाना: एक से ज़्यादा लाइब्रेरी डिपेंडेंसी को एक ही एएआर से बदलता है. इससे आपके उपयोगकर्ताओं के लिए, प्रोजेक्ट सेटअप और वर्शन मैनेजमेंट को आसान बनाया जाता है
  • लाइब्रेरी का साइज़ कम होना: इससे कोड छोटा करने की प्रोसेस बेहतर हो सकती है. इससे एएआर का साइज़ कम हो जाता है
  • बेहतर सुरक्षा: पब्लिश की गई लाइब्रेरी को लागू करने से जुड़ी जानकारी पर बेहतर कंट्रोल मिल सकता है

मर्ज की गई लाइब्रेरी बनाना

फ़्यूज़ की गई लाइब्रेरी बनाने के लिए, आपको एक नया Android मॉड्यूल बनाना होगा. इसके बाद, डिपेंडेंसी जोड़नी होंगी और फिर फ़्यूज़ की गई लाइब्रेरी को पब्लिश करना होगा.

नया फ़्यूज़ किया गया लाइब्रेरी मॉड्यूल जोड़ना

इस प्लगिन का इस्तेमाल करने के लिए, आपको अपने प्रोजेक्ट में एक नया Android मॉड्यूल जोड़ना होगा:

इस उदाहरण में, फ़्यूज़ किए गए लाइब्रेरी मॉड्यूल को myFusedLibrary कहा जाएगा.

  1. gradle.properties फ़ाइल में android.experimental.fusedLibrarySupport=true जोड़कर, फ़्यूज़ की गई लाइब्रेरी के लिए सहायता चालू करें.
  2. include(":myFusedLibrary") को settings.gradle.kts फ़ाइल से जोड़ें.
  3. gradle/libs.versions.toml फ़ाइल में, [plugins] सेक्शन के नीचे android-fusedlibrary = { id = "com.android.fused-library", version.ref = "agp" } जोड़ें.
  4. सबसे ऊपर मौजूद build.gradle.kts फ़ाइल में, प्लगिन ब्लॉक में alias(libs.plugins.android.fusedlibrary) apply false जोड़ें.
  5. myFusedLibrary मॉड्यूल बनाने के लिए, myFusedLibrary नाम की एक नई डायरेक्ट्री बनाएं. इसके लिए, 'My Application' पर राइट-क्लिक करें > New > Directory पर क्लिक करें.
  6. build.gradle.kts मॉड्यूल में build.gradle.kts फ़ाइल बनाएं (myFusedLibrary मॉड्यूल पर राइट क्लिक करें > नया > फ़ाइल).myFusedLibrary
  7. myFusedLibrary/build.gradle.kts फ़ाइल में यह चिपकाएं:

Kotlin

plugins {
    alias(libs.plugins.android.fusedlibrary)
    `maven-publish`
}

androidFusedLibrary {
    namespace = "com.example.myFusedLibrary"
    minSdk = 21
}

dependencies { }

ग्रूवी

plugins {
    id 'fused-library'
}

androidFusedLibrary {
    namespace 'com.example.myFusedLibrary'
    minSdk 21
}

dependencies {

}

डिपेंडेंसी जोड़ें

फ़्यूज़ की गई लाइब्रेरी का मुख्य काम, डिपेंडेंसी को बंडल करना है. इस प्लगिन की मदद से, लोकल प्रोजेक्ट की डिपेंडेंसी और बाहरी लाइब्रेरी जोड़ी जा सकती हैं. पैकेज की जाने वाली डिपेंडेंसी के बारे में बताने के लिए, include कॉन्फ़िगरेशन का इस्तेमाल करें. ट्रांज़िटिव डिपेंडेंसी को पैकेज नहीं किया जाता.

उदाहरण के लिए:

Kotlin

dependencies {
    include(project(":image-rendering"))
    include("mycoolfonts:font-wingdings:5.0")
}

ग्रूवी

dependencies {
    include project(':image-rendering')
    include 'mycoolfonts:font-wingdings:5.0'
}
लेख पढ़ें

मर्ज की गई लाइब्रेरी पब्लिश करना

फ़्यूज़ की गई लाइब्रेरी को पब्लिश करने से पहले, आपको Android लाइब्रेरी को पब्लिश करने के बारे में जानकारी होनी चाहिए. फ़्यूज़ की गई लाइब्रेरी को पब्लिश करना, Android लाइब्रेरी को पब्लिश करने जैसा ही है. हालांकि, कुछ मुख्य अंतर हैं जिन पर आपको फ़्यूज़ की गई लाइब्रेरी को सही तरीके से पब्लिश करने के लिए ध्यान देना होगा:

  • Maven Publish Plugin को उस मॉड्यूल पर भी लागू किया जाना चाहिए जिस पर FusedLibrary प्लगिन लागू किया गया है.
  • पब्लिकेशन को fusedLibraryComponent से इनहेरिट करना होगा, क्योंकि इससे फ़्यूज़ की गई लाइब्रेरी के आर्टफ़ैक्ट को कंपाइल करने के लिए ज़रूरी डिपेंडेंसी मिलती हैं.

यहां पब्लिकेशन के कॉन्फ़िगरेशन का एक उदाहरण दिया गया है:

Kotlin

plugins {
    alias(libs.plugins.android.fusedlibrary)
    `maven-publish`
}

androidFusedLibrary {  }

dependencies {  }

publishing {
    publications {
        register<MavenPublication>("release") {
             groupId = "my-company"
             artifactId = "my-fused-library"
             version = "1.0"
             from(components["fusedLibraryComponent"])
        }
    }
}

ग्रूवी

plugins {
    id 'fused-library'
    id 'maven-publish'
}

androidFusedLibrary {  }

dependencies {  }

publishing {
    publications {
        release(MavenPublication) {
            groupId = "my-company"
            artifactId = "my-fused-library"
            version = "1.0"
            afterEvaluate {
            from components.fusedLibraryComponent
        }
    }
}

टेस्टिंग के लिए, फ़्यूज़ की गई लाइब्रेरी पब्लिश करना

आपको Android ऐप्लिकेशन या Android लाइब्रेरी से पब्लिश की गई फ़्यूज़्ड लाइब्रेरी के हिसाब से टेस्ट करना चाहिए. हमारा सुझाव है कि आप फ़्यूज़ की गई लाइब्रेरी और उसके प्रोजेक्ट की डिपेंडेंसी को लोकल मेवन रिपॉज़िटरी में पब्लिश करें.

फ़्यूज़ की गई लाइब्रेरी के आर्टफ़ैक्ट को किसी लोकल रिपॉज़िटरी में पब्लिश करने के लिए, यहां दिए गए कॉन्फ़िगरेशन की तरह कोई कॉन्फ़िगरेशन तय करें:

Kotlin

plugins {
    alias(libs.plugins.android.fusedlibrary)
    `maven-publish`
}

repositories {
    maven {
        name = "myLocalRepo"
        url = uri(layout.buildDirectory.dir("myLocalRepo"))
    }
}

ग्रूवी

plugins {
    id 'fused-library'
    id 'maven-publish'
}

repositories {
    maven {
        name 'myLocalRepo'
        url layout.buildDirectory.dir('myLocalRepo')
    }
}

मर्ज की गई लाइब्रेरी अपलोड करना

मर्ज की गई लाइब्रेरी को डिस्ट्रिब्यूट करने के लिए, अपनी लाइब्रेरी अपलोड करना लेख पढ़ें.

व्यवहार और सुरक्षा के तरीके

Android लाइब्रेरी को एक साथ इस्तेमाल करने से जुड़ी जटिलताओं की वजह से, प्लगिन के लिए प्राथमिकताओं के बारे में तर्क देना मुश्किल हो सकता है. उदाहरण के लिए, एक ही क्लासपाथ वाली दो लाइब्रेरी को फ़्यूज़ करने पर, बिल्ड फ़ेल हो जाएगा. संसाधन मर्ज करते समय, उन डिपेंडेंसी के क्रम को ध्यान में रखा जाएगा जिन्हें अलग-अलग लाइब्रेरी में एक ही नाम वाले संसाधन को चुनते समय तय किया गया था.

  • डिपेंडेंसी के तौर पर जोड़ने के लिए, फ़्यूज़ की गई लाइब्रेरी को सिर्फ़ Android लाइब्रेरी आर्टफ़ैक्ट AAR के तौर पर पब्लिश किया जा सकता है.
  • डेटा बाइंडिंग का इस्तेमाल करने वाली लाइब्रेरी को फ़्यूज़ नहीं किया जा सकता.
  • एक ही फ़्यूज़ की गई लाइब्रेरी में, कई बिल्ड टाइप और प्रॉडक्ट फ़्लेवर को फ़्यूज़ नहीं किया जा सकता. अलग-अलग वैरिएंट के लिए, अलग-अलग फ़्यूज़ की गई लाइब्रेरी बनाएं.

ज़रूरी कॉन्फ़िगरेशन की मात्रा और इस्तेमाल में आसानी के बीच संतुलन बनाए रखने के लिए, प्लगिन अस्पष्ट टकरावों पर बिल्ड को फ़ेल कर देगा या आर्टफ़ैक्ट को फ़्यूज़ करते समय, अनुमानित तरीके का इस्तेमाल करेगा. आर्टफ़ैक्ट को कैसे फ़्यूज़ किया जाता है, इसकी जानकारी इस टेबल में दी गई है:

टाइप व्यवहार
कक्षाएं एक ही क्लासपाथ वाली लाइब्रेरी को फ़्यूज़ करने पर, बिल्ड फ़ेल हो जाएगा.
Android संसाधन संसाधन मर्ज करते समय, अलग-अलग फ़ाइलों में एक ही नाम वाले संसाधन को चुनते समय, निर्भरता के क्रम को ध्यान में रखा जाएगा.
AAR मेटाडेटा एएआर के मेटाडेटा वर्शन को मर्ज किया जाता है. इसके लिए, हर डिपेंडेंसी लाइब्रेरी से सबसे ज़्यादा वैल्यू को प्राथमिकता दी जाती है. इन वैल्यू को बदलने के लिए, डीएसएल उपलब्ध है.

Kotlin

 androidFusedLibrary { aarMetadata { minCompileSdk = 21 minCompileSdkExtension = 1 } }
Java के संसाधन एक जैसे पाथ वाली कई लाइब्रेरी में मौजूद Java रिसॉर्स फ़ाइलों का इस्तेमाल करने की अनुमति नहीं है. ऐसा करने पर, बिल्ड फ़ेल हो जाएगा.

ऐसी समस्याएं जिनके बारे में जानकारी पहले से है

फ़्यूज़्ड लाइब्रेरी एक नया प्लगिन है. इसमें कुछ समस्याएं हैं. इन समस्याओं को ठीक करने के लिए काम किया जा रहा है, ताकि सभी इस्तेमाल के उदाहरणों को पूरा किया जा सके.

  • सोर्स JAR फ़ाइलें जनरेट नहीं की जा सकतीं
  • अन्य .aar फ़ाइलों पर फ़ाइल डिपेंडेंसी जोड़ना
  • RenderScript और Prefab आर्टफ़ैक्ट को फ़्यूज़ करने की सुविधा उपलब्ध नहीं है
gradle.properties

फ़्यूज़ की गई लाइब्रेरी की डिपेंडेंसी समझना

फ़्यूज़ की गई लाइब्रेरी में कोई सोर्स नहीं होता है. यह सिर्फ़ Android लाइब्रेरी का इस्तेमाल करती है. इसलिए, यह समझना ज़रूरी है कि कौनसी चीज़ कहां से आती है. नतीजे के तौर पर मिले आर्टफ़ैक्ट में मर्ज की गई डिपेंडेंसी और आर्टफ़ैक्ट बनाने के लिए ज़रूरी डिपेंडेंसी की सूची बनाने के लिए, फ़्यूज़ की गई लाइब्रेरी पर gradle :report टास्क चलाएं. यह टास्क, JSON रिपोर्ट जनरेट करता है. यह रिपोर्ट, फ़्यूज़ की गई लाइब्रेरी की build/reports डायरेक्ट्री में सेव होती है.

इंटरनल प्लगिन की डिपेंडेंसी के बारे में ज़्यादा जानकारी पाने के लिए, gradle :dependencies टास्क चलाएं. इससे प्लगिन कॉन्फ़िगरेशन की स्थिति देखी जा सकती है.