अपनी लाइब्रेरी का ऐक्सेस देने के लिए, आपको कोई डेटाबेस चुनना होगा. इस पेज पर, रिपॉज़िटरी का टाइप चुनने से जुड़ी ज़रूरी बातों के बारे में बताया गया है. साथ ही, Maven Publish प्लग इन का इस्तेमाल करके पब्लिकेशन बनाने का तरीका बताया गया है.
अपनी लाइब्रेरी अपलोड करने से पहले, पक्का करें कि आपने अपनी लाइब्रेरी को रिलीज़ के लिए तैयार कर लिया है. साथ ही, ज़रूरी पब्लिकेशन वैरिएंट या टेस्ट फ़िक्सचर कॉन्फ़िगर कर लिए हैं.
डेटा स्टोर करने की जगह का टाइप चुनें
लाइब्रेरी, एएआर फ़ाइलों के तौर पर पब्लिश की जाती हैं. इन फ़ाइलों में बाइट कोड और नेटिव लाइब्रेरी, Android मेनिफ़ेस्ट, और संसाधनों के तौर पर कंपाइल किया गया कोड होता है. पैकेज में किसी भी तरह की पहचान, वर्शन या अन्य लाइब्रेरी पर निर्भरता का एलान नहीं किया जाता.
AAR को सीधे तौर पर उपलब्ध कराने के बजाय, रिपॉज़िटरी के ज़रिए उपलब्ध कराना आम तौर पर सबसे सही तरीका होता है. इससे उपयोगकर्ताओं को यह समझने में मदद मिलती है कि लाइब्रेरी कहां से आ रही है. उन्हें वर्शन जैसी अहम जानकारी के बिना, name.aar फ़ाइल से निपटने की ज़रूरत नहीं पड़ती. किसी लाइब्रेरी के नए वर्शन पर अपग्रेड करते समय, रिपॉज़िटरी का इस्तेमाल करें. इससे यह पक्का किया जा सकेगा कि नए वर्शन की सिर्फ़ ज़रूरी डिपेंडेंसी जोड़ी जाएं, ताकि उपयोगकर्ताओं को डिपेंडेंसी मैन्युअल तरीके से अपडेट न करनी पड़ें.
अपनी लाइब्रेरी को पब्लिश करने के लिए, रिपॉज़िटरी का इस्तेमाल करने के कई फ़ायदे हैं:
- Gradle, आपकी लाइब्रेरी की डिपेंडेंसी को डिपेंडेंसी ग्राफ़ में अपने-आप जोड़ सकता है.
- Gradle यह पक्का कर सकता है कि आपकी लाइब्रेरी का सिर्फ़ एक वर्शन, डिपेंडेंसी ग्राफ़ में मौजूद हो. अगर आपकी लाइब्रेरी को अलग-अलग वर्शन के साथ एक से ज़्यादा बार शामिल किया गया है, तो Gradle इस समस्या को हल कर सकता है.
- अगर आपकी लाइब्रेरी में Java 8 या इसके बाद के वर्शन की सुविधाओं का इस्तेमाल किया जाता है, तो Android Gradle प्लगिन (एजीपी) ज़्यादा बेहतर तरीके से डिशुगरिंग कर सकता है. इससे आपके उपयोगकर्ताओं के लिए, बिल्ड बनाने में लगने वाला समय कम हो जाता है.
- आपकी लाइब्रेरी, वैरिएंट पब्लिश करने की सुविधा का इस्तेमाल कर सकती है. साथ ही, इसमें टेस्ट फ़िक्सचर जैसी सुविधाएं शामिल की जा सकती हैं.
AAR को सीधे तौर पर डिस्ट्रिब्यूट करने से, आपके उपयोगकर्ता को आपकी लाइब्रेरी की पहचान, वर्शन या डिपेंडेंसी के बारे में कोई जानकारी नहीं मिलती. किसी रिपॉज़िटरी में पब्लिश करते समय, डिस्ट्रिब्यूशन को एक अलग फ़ाइल मैनेज करती है. यह फ़ाइल, रिपॉज़िटरी के सिस्टम का हिस्सा होती है. Maven रिपॉज़िटरी के लिए, यह POM फ़ाइल होती है. इसलिए, हमारा सुझाव है कि एएआर फ़ाइलों को मैन्युअल तरीके से डिस्ट्रिब्यूट करने के बजाय, रिपॉज़िटरी का इस्तेमाल करके लाइब्रेरी पब्लिश करें.
डेटाबेस के टाइप
रिपॉज़िटरी तीन तरह की होती हैं:
- Maven Central जैसी मुफ़्त ऑनलाइन रिपॉज़िटरी की मदद से, कोई भी व्यक्ति लाइब्रेरी अपलोड और डाउनलोड कर सकता है.
- निजी डेटाबेस को लॉगिन करके ऐक्सेस किया जा सकता है. इससे निजी लाइब्रेरी को कंट्रोल करके डिस्ट्रिब्यूट किया जा सकता है.
- लोकल, फ़ोल्डर-आधारित रिपॉज़िटरी, मैन्युअल तरीके से डाउनलोड करके लाइब्रेरी को डिस्ट्रिब्यूट करने की अनुमति देती हैं.
लोकल, फ़ोल्डर-आधारित रिपॉज़िटरी का इस्तेमाल करना, उपयोगकर्ताओं को एएआर का मैन्युअल डाउनलोड करने का लिंक देने या ईमेल से एएआर भेजने जैसा ही है. मुख्य अंतर यह है कि आप सिर्फ़ एएआर नहीं भेज रहे हैं, बल्कि पहचान, वर्शन, और डिपेंडेंसी के बारे में अतिरिक्त जानकारी भी भेज रहे हैं.
आपको फ़ोल्डर पर आधारित रिपॉज़िटरी की एक ZIP फ़ाइल डिस्ट्रिब्यूट करनी होगी. इसमें एएआर और मेटाडेटा शामिल होना चाहिए. इसके बाद, आपके उपयोगकर्ता फ़ाइल का कॉन्टेंट निकाल सकते हैं, उसे अपने प्रोजेक्ट में जोड़ सकते हैं, और Gradle को उस पर ले जा सकते हैं. इसके बाद, उपयोगकर्ता मेवन कोऑर्डिनेट का इस्तेमाल करके, लाइब्रेरी पर डिपेंडेंसी का एलान कर सकते हैं. ऐसा तब किया जा सकता है, जब लाइब्रेरी किसी ऑनलाइन रिपॉज़िटरी में हो. साथ ही, पहले बताए गए सभी फ़ायदों का फ़ायदा लिया जा सकता है.
पब्लिकेशन बनाना
Gradle Maven Publish Plugin का इस्तेमाल करके पब्लिश करें. Maven Publish प्लग इन की मदद से, पब्लिकेशन और रिपॉज़िटरी का एलान किया जा सकता है. साथ ही, इन पब्लिकेशन को रिपॉज़िटरी में पब्लिश करने के लिए टास्क बनाए जा सकते हैं. ये पब्लिकेशन, SoftwareComponent के उस इंस्टेंस का इस्तेमाल करते हैं जिसे बिल्ड को चलाने वाला प्लग इन बनाता है. यह एजीपी या java-library प्लग इन हो सकता है.
ध्यान दें कि एजीपी के साथ Maven पब्लिश प्लग-इन को चलाने पर, प्लग-इन लागू होने के बाद सॉफ़्टवेयर कॉम्पोनेंट सीधे तौर पर नहीं बनते. इसके बजाय, इन्हें afterEvaluate() कॉलबैक चरण के दौरान बनाया जाता है. इसलिए, सॉफ़्टवेयर कॉम्पोनेंट को चुनने वाले पब्लिकेशन को afterEvaluate() चरण के दौरान भी कॉन्फ़िगर करना ज़रूरी है.
मॉड्यूल-लेवल की build.gradle फ़ाइल का यह कोड स्निपेट, singleVariant() या multipleVariants() की मदद से बनाए गए किसी वैरिएंट के लिए पब्लिकेशन बनाता है:
Groovy
publishing { publications { release(MavenPublication) { groupId = 'com.my-company' artifactId = 'my-library' version = '1.0' afterEvaluate { from components.release } } } }
Kotlin
publishing { publications { register<MavenPublication>("release") { groupId = "com.my-company" artifactId = "my-library" version = "1.0" afterEvaluate { from(components["release"]) } } } }
पिछले उदाहरण में, कॉम्पोनेंट (components.release) का नाम, singleVariant() या multipleVariants() को दिए गए नाम पर आधारित है.
पब्लिकेशन का एलान करने के बाद, आपको एक टारगेट रिपॉज़िटरी बनानी होगी.
लोकल रिपॉज़िटरी में पब्लिश करना
किसी लोकल डेटाबेस में पब्लिश करने का तरीका, किसी रिमोट डेटाबेस में पब्लिश करने के तरीके से काफ़ी मिलता-जुलता है. हालांकि, डेटाबेस के एलान में अंतर होता है. रिमोट रिपॉज़िटरी में पब्लिश करने का तरीका जानने के लिए, पिछला सेक्शन पढ़ें. इससे आपको एक ऐसा पब्लिकेशन बनाने में मदद मिलेगी जो आपके चुने गए वैरिएंट या वैरिएंट्स को पब्लिश करता है. इसके बाद, एक लोकल डेटाबेस बनाएं:
Groovy
publishing { publications { release(MavenPublication) { ... } } repositories { maven { name = 'myrepo' url = layout.buildDirectory.dir("repo") } } }
Kotlin
publishing { publications { register<MavenPublication>("release") { ... } } repositories { maven { name = "myrepo" url = uri(layout.buildDirectory.dir("repo")) } } }
इससे publishReleaseToMyRepoRepository नाम का एक टास्क बनता है. इसमें पब्लिकेशन और रिपॉज़िटरी का नाम शामिल होता है. दी गई जगह पर रिपॉज़िटरी जनरेट करने के लिए, यह टास्क चलाएं. इस उदाहरण में, रिपॉज़िटरी को प्रोजेक्ट के बिल्ड फ़ोल्डर में, repo डायरेक्ट्री में जनरेट किया गया है.
अगर आपको रिपॉज़िटरी की ZIP फ़ाइल अपने-आप जनरेट करनी है, तो इस कोड का इस्तेमाल करें:
Groovy
tasks.register('generateRepo', Zip) { def publishTask = tasks.named('publishReleasePublicationToMyrepoRepository') from publishTask.map { it.getRepository().getUrl() } into 'mylibrary' archiveFileName.set('mylibrary.zip') }
Kotlin
tasks.register<Zip>("generateRepo") { val publishTask = tasks.named( "publishReleasePublicationToMyrepoRepository", PublishToMavenRepository::class.java) from(publishTask.map { it.repository.url }) into("mylibrary") archiveFileName.set("mylibrary.zip") }
यह कोड, Zip टास्क बनाता है, जिसे generateRepo कहा जाता है. यह टास्क, पब्लिशिंग टास्क के कॉन्टेंट का इस्तेमाल करता है और उसे कंप्रेस करता है. साथ ही, यह पक्का करता है कि ZIP एंट्री, mylibrary नाम के टॉप-लेवल फ़ोल्डर में हों. आउटपुट, build/distributions में मौजूद है.