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

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

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

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

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

फ़्यूज़ की गई लाइब्रेरी बनाना

फ़्यूज़ की गई लाइब्रेरी बनाने के लिए, आपको एक नया 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 नाम की एक नई डायरेक्ट्री बनाएं ('मेरा ऐप्लिकेशन' पर राइट क्लिक करें > नया > डायरेक्ट्री).
  6. myFusedLibrary मॉड्यूल में build.gradle.kts फ़ाइल बनाएं (myFusedLibrary मॉड्यूल पर राइट क्लिक करें > नया > फ़ाइल).
  7. myFusedLibrary/build.gradle.kts फ़ाइल में यह कोड चिपकाएं:

Kotlin

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

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

dependencies { }

Groovy

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")
}

Groovy

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

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

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

  • Maven Publish प्लग इन को उस मॉड्यूल पर भी लागू करना होगा जिसमें Fused Library प्लग इन लागू किया गया है.
  • पब्लिकेशन को 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"])
        }
    }
}

Groovy

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"))
    }
}

Groovy

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

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

फ़्यूज़ की गई लाइब्रेरी अपलोड करना

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

व्यवहार और सुरक्षा

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

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

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

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

Kotlin

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

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

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

  • lint.jar फ़ाइलें, फ़्यूज़ किए गए AAR में शामिल नहीं हैं
  • अन्य .aar फ़ाइलों पर फ़ाइल डिपेंडेंसी जोड़ना
  • RenderScript और Prefab आर्टफ़ैक्ट को फ़्यूज़ करने की सुविधा उपलब्ध नहीं है

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

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

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