Android Studio में Gradle बिल्ड सिस्टम की मदद से, बाहरी बाइनरी या अन्य लाइब्रेरी मॉड्यूल को डिपेंडेंसी के तौर पर अपने बिल्ड में शामिल किया जा सकता है. डिपेंडेंसी, आपकी मशीन पर या किसी रिमोट रिपॉज़िटरी में मौजूद हो सकती हैं. साथ ही, ट्रांज़िटिव डिपेंडेंसी अपने-आप शामिल हो जाती हैं. इस पेज पर, Android प्रोजेक्ट के साथ डिपेंडेंसी इस्तेमाल करने का तरीका बताया गया है. इसमें Android Gradle प्लगिन (AGP) के लिए खास तौर पर तैयार किए गए व्यवहार और कॉन्फ़िगरेशन के बारे में जानकारी भी शामिल है. Gradle डिपेंडेंसी के बारे में ज़्यादा जानकारी के लिए, डिपेंडेंसी मैनेजमेंट के लिए Gradle गाइड देखें. हालांकि, ध्यान रखें कि आपके Android प्रोजेक्ट में, इस पेज पर तय किए गए डिपेंडेंसी कॉन्फ़िगरेशन का ही इस्तेमाल किया जाना चाहिए.
लाइब्रेरी या प्लगिन की डिपेंडेंसी जोड़ना
बिल्ड डिपेंडेंसी जोड़ने और उन्हें मैनेज करने का सबसे अच्छा तरीका है, वर्शन कैटलॉग का इस्तेमाल करना. नए प्रोजेक्ट में डिफ़ॉल्ट रूप से इसी तरीके का इस्तेमाल किया जाता है. इस सेक्शन में, Android प्रोजेक्ट के लिए इस्तेमाल किए जाने वाले सबसे सामान्य कॉन्फ़िगरेशन के बारे में बताया गया है. ज़्यादा विकल्पों के लिए, Gradle का दस्तावेज़ देखें. वर्शन कैटलॉग का इस्तेमाल करने वाले ऐप्लिकेशन का उदाहरण देखने के लिए, Now in Android देखें. अगर आपने वर्शन कैटलॉग के बिना, पहले से ही बिल्ड डिपेंडेंसी सेट अप की हैं और आपके पास मल्टी-मॉड्यूल प्रोजेक्ट है, तो हमारा सुझाव है कि आप माइग्रेट करें.
नेटिव डिपेंडेंसी (आम तौर पर इस्तेमाल नहीं की जाती) जोड़ने और मैनेज करने के बारे में जानने के लिए, नेटिव डिपेंडेंसी देखें.
यहां दिए गए उदाहरण में, हमने अपने प्रोजेक्ट में रिमोट बाइनरी डिपेंडेंसी (Jetpack Macrobenchmark लाइब्रेरी), लोकल लाइब्रेरी मॉड्यूल डिपेंडेंसी (myLibrary
), और प्लगिन डिपेंडेंसी (Android Gradle प्लगिन) जोड़ी है. यहां अपने प्रोजेक्ट में इन डिपेंडेंसी को जोड़ने का सामान्य तरीका बताया गया है:
आपको डिपेंडेंसी के जिस वर्शन का इस्तेमाल करना है उसके लिए, वर्शन कैटलॉग फ़ाइल के
[versions]
सेक्शन में एक उपनाम जोड़ें. इस फ़ाइल कोlibs.versions.toml
कहा जाता है. यह प्रोजेक्ट व्यू मेंgradle
डायरेक्ट्री या Android व्यू में Gradle स्क्रिप्ट में मौजूद होती है:[versions] agp = "8.3.0" androidx-macro-benchmark = "1.2.2" my-library = "1.4" [libraries] ... [plugins] ...
उपनामों में डैश या अंडरस्कोर शामिल हो सकते हैं. ये उपनाम, नेस्ट की गई वैल्यू जनरेट करते हैं. इनका इस्तेमाल बिल्ड स्क्रिप्ट में किया जा सकता है. रेफ़रंस, कैटलॉग के नाम से शुरू होते हैं. यह
libs.versions.toml
काlibs
हिस्सा होता है. एक वर्शन वाले कैटलॉग का इस्तेमाल करते समय, हमारा सुझाव है कि आप "libs." की डिफ़ॉल्ट वैल्यू को बनाए रखें.libs.versions.toml
फ़ाइल के[libraries]
(रिमोट बाइनरी या लोकल लाइब्रेरी मॉड्यूल के लिए) या[plugins]
(प्लगिन के लिए) सेक्शन में, डिपेंडेंसी के लिए कोई उपनाम जोड़ें.[versions] ... [libraries] androidx-benchmark-macro = { group = "androidx.benchmark", name = "benchmark-macro-junit4", version.ref = "androidx-macro-benchmark" } my-library = { group = "com.myapplication", name = "mylibrary", version.ref = "my-library" } [plugins] androidApplication = { id = "com.android.application", version.ref = "agp" }
कुछ लाइब्रेरी, पब्लिश किए गए मटीरियल के बिल (बीओएम) में उपलब्ध होती हैं. यह बीओएम, लाइब्रेरी के फ़ैमिली ग्रुप और उनके वर्शन को ग्रुप करता है. अपने वर्शन कैटलॉग और बिल्ड फ़ाइलों में बीओएम शामिल किया जा सकता है. साथ ही, बीओएम को उन वर्शन को मैनेज करने की अनुमति दी जा सकती है. ज़्यादा जानकारी के लिए, मटेरियल की सूची का इस्तेमाल करना लेख पढ़ें.
डिपेंडेंसी की ज़रूरत वाले मॉड्यूल की बिल्ड स्क्रिप्ट में, डिपेंडेंसी के एलियास का रेफ़रंस जोड़ें. बिल्ड स्क्रिप्ट से ऐक्सेस करते समय, उपनाम के अंडरस्कोर और डैश को बिंदुओं में बदलें. मॉड्यूल-लेवल की हमारी बिल्ड स्क्रिप्ट ऐसी दिखेगी:
Kotlin
plugins { alias(libs.plugins.androidApplication) } dependencies { implementation(libs.androidx.benchmark.macro) implementation(libs.my.library) }
Groovy
plugins { alias 'libs.plugins.androidApplication' } dependencies { implementation libs.androidx.benchmark.macro implementation libs.my.library }
प्लगिन के रेफ़रंस में, कैटलॉग के नाम के बाद
plugins
शामिल होता है. साथ ही, वर्शन के रेफ़रंस में, कैटलॉग के नाम के बादversions
शामिल होता है. वर्शन के रेफ़रंस आम तौर पर इस्तेमाल नहीं किए जाते. वर्शन के रेफ़रंस के उदाहरण देखने के लिए, एक ही वर्शन नंबर वाली डिपेंडेंसी देखें. लाइब्रेरी के रेफ़रंस मेंlibraries
क्वालिफ़ायर शामिल नहीं होता. इसलिए, लाइब्रेरी के एलियास की शुरुआत मेंversions
याplugins
का इस्तेमाल नहीं किया जा सकता.
डिपेंडेंसी कॉन्फ़िगर करना
dependencies
ब्लॉक में, लाइब्रेरी की डिपेंडेंसी का एलान किया जा सकता है. इसके लिए, कई अलग-अलग डिपेंडेंसी कॉन्फ़िगरेशन में से किसी एक का इस्तेमाल करें. जैसे, implementation
को पहले दिखाया गया था. हर डिपेंडेंसी कॉन्फ़िगरेशन, Gradle को डिपेंडेंसी इस्तेमाल करने के बारे में अलग-अलग निर्देश देता है. यहां दी गई टेबल में, Android प्रोजेक्ट में किसी डिपेंडेंसी के लिए इस्तेमाल किए जा सकने वाले हर कॉन्फ़िगरेशन के बारे में बताया गया है.
कॉन्फ़िगरेशन | व्यवहार |
---|---|
implementation |
Gradle, डिपेंडेंसी को कंपाइल क्लासपाथ में जोड़ता है. साथ ही, डिपेंडेंसी को बिल्ड आउटपुट में पैकेज करता है. जब आपका मॉड्यूल, implementation डिपेंडेंसी कॉन्फ़िगर करता है, तो इसका मतलब है कि वह Gradle को यह बता रहा है कि आपको कंपाइल टाइम पर मॉड्यूल को अन्य मॉड्यूल में डिपेंडेंसी लीक नहीं करनी है. इसका मतलब है कि निर्भरता, उन अन्य मॉड्यूल के लिए उपलब्ध नहीं कराई जाती जो मौजूदा मॉड्यूल पर निर्भर करते हैं.
|
api |
Gradle, डिपेंडेंसी को कंपाइल क्लासपाथ और बिल्ड आउटपुट में जोड़ता है. जब किसी मॉड्यूल में api डिपेंडेंसी शामिल होती है, तो इसका मतलब है कि वह Gradle को यह सूचना दे रहा है कि मॉड्यूल को उस डिपेंडेंसी को अन्य मॉड्यूल में ट्रांज़िटिव तरीके से एक्सपोर्ट करना है, ताकि यह डिपेंडेंसी रनटाइम और कंपाइल टाइम, दोनों में उनके लिए उपलब्ध हो.
इस कॉन्फ़िगरेशन का इस्तेमाल सावधानी से करें. साथ ही, सिर्फ़ उन डिपेंडेंसी के साथ करें जिन्हें आपको अन्य अपस्ट्रीम उपभोक्ताओं को ट्रांज़िटिव तरीके से एक्सपोर्ट करना है. अगर कोई |
compileOnly |
Gradle, डिपेंडेंसी को सिर्फ़ कंपाइल क्लासपाथ में जोड़ता है
(यानी, इसे बिल्ड आउटपुट में नहीं जोड़ा जाता). यह तब फ़ायदेमंद होता है, जब आपको कोई Android मॉड्यूल बनाना हो और आपको कंपाइल करने के दौरान डिपेंडेंसी की ज़रूरत हो. हालांकि, रनटाइम के दौरान इसका इस्तेमाल करना ज़रूरी नहीं है. उदाहरण के लिए, अगर आपको ऐसी लाइब्रेरी पर निर्भर रहना है जिसमें सिर्फ़ कंपाइल-टाइम एनोटेशन शामिल हैं, तो उस लाइब्रेरी को compileOnly के तौर पर मार्क किया जा सकता है. कंपाइल-टाइम एनोटेशन का इस्तेमाल आम तौर पर कोड जनरेट करने के लिए किया जाता है. हालांकि, इन्हें अक्सर बिल्ड आउटपुट में शामिल नहीं किया जाता है.
इस कॉन्फ़िगरेशन का इस्तेमाल करने पर, आपके लाइब्रेरी मॉड्यूल में रनटाइम की शर्त शामिल होनी चाहिए. इससे यह पता चलेगा कि डिपेंडेंसी उपलब्ध है या नहीं. इसके बाद, यह अपने व्यवहार में बदलाव कर सकता है, ताकि डिपेंडेंसी उपलब्ध न होने पर भी यह काम कर सके. इससे फ़ाइनल ऐप्लिकेशन का साइज़ कम करने में मदद मिलती है. ऐसा इसलिए, क्योंकि इसमें ऐसी अस्थायी डिपेंडेंसी नहीं जोड़ी जाती हैं जो ज़रूरी नहीं हैं.
ध्यान दें: Android Archive (AAR) डिपेंडेंसी के साथ, |
runtimeOnly |
Gradle, डिपेंडेंसी को सिर्फ़ बिल्ड आउटपुट में जोड़ता है, ताकि रनटाइम के दौरान इसका इस्तेमाल किया जा सके. इसका मतलब है कि इसे कंपाइल क्लासपाथ में नहीं जोड़ा गया है.
Android पर इसका इस्तेमाल बहुत कम किया जाता है. हालांकि, सर्वर ऐप्लिकेशन में इसका इस्तेमाल आम तौर पर किया जाता है, ताकि लॉगिंग की सुविधा दी जा सके. उदाहरण के लिए, कोई लाइब्रेरी ऐसे लॉगिंग एपीआई का इस्तेमाल कर सकती है जिसमें कोई लागू करने की सुविधा शामिल नहीं है. उस लाइब्रेरी का इस्तेमाल करने वाले लोग, उसे implementation डिपेंडेंसी के तौर पर जोड़ सकते हैं. साथ ही, लॉगिंग को लागू करने के लिए runtimeOnly डिपेंडेंसी को शामिल कर सकते हैं.
|
ksp |
ये कॉन्फ़िगरेशन, ऐसी लाइब्रेरी उपलब्ध कराते हैं जो आपके कोड में मौजूद एनोटेशन और अन्य सिंबल को कंपाइल करने से पहले प्रोसेस करती हैं. ये आम तौर पर, आपके कोड की पुष्टि करते हैं या अतिरिक्त कोड जनरेट करते हैं. इससे आपको कम कोड लिखना पड़ता है. ऐसी डिपेंडेंसी जोड़ने के लिए, आपको इसे एनोटेशन प्रोसेसर क्लासपाथ में जोड़ना होगा. इसके लिए, Android Gradle प्लग इन, किसी डिपेंडेंसी को एनोटेशन प्रोसेसर तब मानता है, जब उसकी JAR फ़ाइल में यह फ़ाइल मौजूद हो:
अगर प्लगिन को कोई ऐसा एनोटेशन प्रोसेसर मिलता है जो कंपाइल क्लासपाथ पर है, तो वह बिल्ड से जुड़ी गड़बड़ी दिखाता है.
किस कॉन्फ़िगरेशन का इस्तेमाल करना है, यह तय करते समय इन बातों का ध्यान रखें:
एनोटेशन प्रोसेसर इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, एनोटेशन प्रोसेसर जोड़ना लेख पढ़ें. |
lintChecks |
इस कॉन्फ़िगरेशन का इस्तेमाल करके, ऐसी लाइब्रेरी शामिल करें जिसमें लिंट चेक शामिल हों. Gradle को इन चेक को तब लागू करना चाहिए, जब वह आपके Android ऐप्लिकेशन प्रोजेक्ट को बना रहा हो. ध्यान दें कि जिन एएआर में |
lintPublish |
Android लाइब्रेरी प्रोजेक्ट में इस कॉन्फ़िगरेशन का इस्तेमाल करें. इससे, Gradle को उन लिंट चेक को lint.jar फ़ाइल में कंपाइल करने और उन्हें आपके AAR में पैकेज करने का निर्देश दिया जा सकता है. इस वजह से, आपकी AAR का इस्तेमाल करने वाले प्रोजेक्ट पर भी लिंट चेक लागू होते हैं. अगर आपने पब्लिश किए गए एएआर में लिंट चेक शामिल करने के लिए, पहले lintChecks डिपेंडेंसी कॉन्फ़िगरेशन का इस्तेमाल किया था, तो आपको उन डिपेंडेंसी को माइग्रेट करना होगा. इसके बाद, lintPublish कॉन्फ़िगरेशन का इस्तेमाल किया जा सकेगा.
Kotlindependencies { // Executes lint checks from the ":checks" project at build time. lintChecks(project(":checks")) // Compiles lint checks from the ":checks-to-publish" into a // lint.jar file and publishes it to your Android library. lintPublish(project(":checks-to-publish")) } Groovydependencies { // Executes lint checks from the ':checks' project at build time. lintChecks project(':checks') // Compiles lint checks from the ':checks-to-publish' into a // lint.jar file and publishes it to your Android library. lintPublish project(':checks-to-publish') } |
किसी खास बिल्ड वैरिएंट के लिए डिपेंडेंसी कॉन्फ़िगर करना
ऊपर दिए गए सभी कॉन्फ़िगरेशन, सभी बिल्ड वैरिएंट पर डिपेंडेंसी लागू करते हैं. अगर आपको सिर्फ़ किसी खास बिल्ड वैरिएंट सोर्स सेट या टेस्टिंग सोर्स सेट के लिए डिपेंडेंसी का एलान करना है, तो आपको कॉन्फ़िगरेशन के नाम को कैपिटल लेटर में लिखना होगा. साथ ही, इसके पहले बिल्ड वैरिएंट या टेस्टिंग सोर्स सेट का नाम जोड़ना होगा.
उदाहरण के लिए, implementation
कॉन्फ़िगरेशन का इस्तेमाल करके, सिर्फ़ अपने "free" प्रॉडक्ट फ़्लेवर में रिमोट बाइनरी डिपेंडेंसी जोड़ने के लिए, इसका इस्तेमाल करें:
Kotlin
dependencies { freeImplementation("com.google.firebase:firebase-ads:21.5.1") }
Groovy
dependencies { freeImplementation 'com.google.firebase:firebase-ads:21.5.1' }
हालांकि, अगर आपको किसी ऐसे वैरिएंट के लिए डिपेंडेंसी जोड़नी है जिसमें प्रॉडक्ट फ़्लेवर और बिल्ड टाइप को एक साथ इस्तेमाल किया जाता है, तो आपको कॉन्फ़िगरेशन का नाम शुरू करना होगा:
Kotlin
// Initializes a placeholder for the freeDebugImplementation dependency configuration. val freeDebugImplementation by configurations.creating dependencies { freeDebugImplementation(project(":free-support")) }
Groovy
configurations { // Initializes a placeholder for the freeDebugImplementation dependency configuration. freeDebugImplementation {} } dependencies { freeDebugImplementation project(":free-support") }
लोकल टेस्ट और इंस्ट्रुमेंटेड टेस्ट के लिए implementation
डिपेंडेंसी जोड़ने का तरीका यहां दिया गया है:
Kotlin
dependencies { // Adds a remote binary dependency only for local tests. testImplementation("junit:junit:4.12") // Adds a remote binary dependency only for the instrumented test APK. androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1") }
Groovy
dependencies { // Adds a remote binary dependency only for local tests. testImplementation 'junit:junit:4.12' // Adds a remote binary dependency only for the instrumented test APK. androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1' }
हालांकि, कुछ कॉन्फ़िगरेशन इस स्थिति में काम नहीं करते. उदाहरण के लिए, androidTest
पर अन्य मॉड्यूल निर्भर नहीं हो सकते. इसलिए, androidTest
कॉन्फ़िगरेशन का इस्तेमाल करने पर, आपको यह चेतावनी दिखेगी:androidTestApi
WARNING: Configuration 'androidTestApi' is obsolete and has been replaced with 'androidTestImplementation'.
डिपेंडेंसी का क्रम
डिपेंडेंसी को जिस क्रम में लिस्ट किया जाता है उससे हर डिपेंडेंसी की प्राथमिकता का पता चलता है: पहली लाइब्रेरी को दूसरी लाइब्रेरी के मुकाबले ज़्यादा प्राथमिकता दी जाती है. इसी तरह, दूसरी लाइब्रेरी को तीसरी लाइब्रेरी के मुकाबले ज़्यादा प्राथमिकता दी जाती है. यह क्रम इसी तरह चलता है. अगर लाइब्रेरी से आपके ऐप्लिकेशन में संसाधन मर्ज किए जाते हैं या मेनिफ़ेस्ट एलिमेंट मर्ज किए जाते हैं, तो इस क्रम का पालन करना ज़रूरी है.
उदाहरण के लिए, अगर आपका प्रोजेक्ट यह एलान करता है:
LIB_A
औरLIB_B
पर निर्भर है (इसी क्रम में)- साथ ही,
LIB_A
,LIB_C
औरLIB_D
पर निर्भर करता है (इसी क्रम में) - साथ ही,
LIB_B
,LIB_C
पर भी निर्भर करता है
इसके बाद, डिपेंडेंसी का फ़्लैट ऑर्डर इस तरह होगा:
LIB_A
LIB_D
LIB_B
LIB_C
इससे यह पक्का हो जाता है कि LIB_A
और LIB_B
, दोनों LIB_C
को बदल सकते हैं. साथ ही, LIB_D
को अब भी LIB_B
से ज़्यादा प्राथमिकता मिलती है, क्योंकि LIB_A
(जो इस पर निर्भर करता है) को LIB_B
से ज़्यादा प्राथमिकता मिलती है.
अलग-अलग प्रोजेक्ट सोर्स/डिपेंडेंसी के मेनिफ़ेस्ट को मर्ज करने के तरीके के बारे में ज़्यादा जानने के लिए, एक से ज़्यादा मेनिफ़ेस्ट फ़ाइलें मर्ज करना लेख पढ़ें.
Play Console के लिए डिपेंडेंसी की जानकारी
AGP, आपके ऐप्लिकेशन को बनाते समय मेटाडेटा शामिल करता है. यह मेटाडेटा, लाइब्रेरी डिपेंडेंसी के बारे में बताता है. ये डिपेंडेंसी, आपके ऐप्लिकेशन में कंपाइल की जाती हैं. जब ऐप्लिकेशन अपलोड किया जाता है, तब Play Console इस मेटाडेटा की जांच करता है. इससे, आपके ऐप्लिकेशन में इस्तेमाल किए गए एसडीके टूल और डिपेंडेंसी से जुड़ी जानी-पहचानी समस्याओं के बारे में सूचनाएं मिलती हैं. साथ ही, कुछ मामलों में इन समस्याओं को हल करने के लिए कार्रवाई करने लायक सुझाव भी मिलते हैं.
डेटा को कंप्रेस किया जाता है. साथ ही, Google Play की साइनिंग की की मदद से इसे एन्क्रिप्ट (सुरक्षित) किया जाता है. इसके बाद, इसे रिलीज़ किए गए ऐप्लिकेशन के साइनिंग ब्लॉक में सेव किया जाता है. हमारा सुझाव है कि उपयोगकर्ताओं को सुरक्षित और बेहतर अनुभव देने के लिए, इस डिपेंडेंसी फ़ाइल को सेव करके रखें. ऑप्ट आउट करने के लिए, अपने मॉड्यूल की build.gradle.kts
फ़ाइल में यह dependenciesInfo
ब्लॉक शामिल करें.
android {
dependenciesInfo {
// Disables dependency metadata when building APKs.
includeInApk = false
// Disables dependency metadata when building Android App Bundles.
includeInBundle = false
}
}
हमारी नीतियों और डिपेंडेंसी से जुड़ी संभावित समस्याओं के बारे में ज़्यादा जानने के लिए, अपने ऐप्लिकेशन में तीसरे पक्ष के एसडीके इस्तेमाल करने के बारे में जानकारी देने वाला हमारा सहायता पेज देखें.
एसडीके टूल की अहम जानकारी
Android Studio, Google Play SDK Index में मौजूद सार्वजनिक एसडीके के लिए, वर्शन कैटलॉग फ़ाइल और प्रोजेक्ट स्ट्रक्चर डायलॉग में लिंट चेतावनियां दिखाता है. ऐसा तब होता है, जब ये समस्याएं लागू होती हैं:
- एसडीके के लेखकों ने उन्हें पुराना बताया है.
- एसडीके, Play की नीतियों का उल्लंघन करते हैं.
- एसडीके टूल में, सुरक्षा से जुड़े जोखिमों के बारे में पता है.
- एसडीके के लेखकों ने उन्हें बंद कर दिया है.
चेतावनी मिलने का मतलब है कि आपको उन डिपेंडेंसी को अपडेट करना चाहिए, क्योंकि पुराने वर्शन इस्तेमाल करने से, आने वाले समय में Google Play Console पर पब्लिश करने में समस्या आ सकती है.
वर्शन कैटलॉग के बिना बिल्ड डिपेंडेंसी जोड़ना
हमारा सुझाव है कि डिपेंडेंसी जोड़ने और उन्हें मैनेज करने के लिए, वर्शन कैटलॉग का इस्तेमाल करें. हालांकि, सामान्य प्रोजेक्ट के लिए इनकी ज़रूरत नहीं हो सकती. यहां ऐसी बिल्ड फ़ाइल का उदाहरण दिया गया है जिसमें वर्शन कैटलॉग का इस्तेमाल नहीं किया गया है:
Kotlin
plugins { id("com.android.application") } android { ... } dependencies { // Dependency on a remote binary implementation("com.example.android:app-magic:12.3") // Dependency on a local library module implementation(project(":mylibrary")) }
Groovy
plugins { id 'com.android.application' } android { ... } dependencies { // Dependency on a remote binary implementation 'com.example.android:app-magic:12.3' // Dependency on a local library module implementation project(':mylibrary') }
इस बिल्ड फ़ाइल में, "com.example.android" नेमस्पेस ग्रुप के अंदर, "app-magic" लाइब्रेरी के 12.3 वर्शन पर निर्भरता का एलान किया गया है. रिमोट बाइनरी डिपेंडेंसी का एलान, यहां दिए गए एलान का शॉर्टहैंड है:
Kotlin
implementation(group = "com.example.android", name = "app-magic", version = "12.3")
Groovy
implementation group: 'com.example.android', name: 'app-magic', version: '12.3'
बिल्ड फ़ाइल, "mylibrary" नाम के Android लाइब्रेरी मॉड्यूल पर भी डिपेंडेंसी का एलान करती है. यह नाम, आपकी settings.gradle.kts
फ़ाइल में include:
के साथ तय किए गए लाइब्रेरी के नाम से मेल खाना चाहिए. ऐप्लिकेशन बनाते समय, बिल्ड सिस्टम लाइब्रेरी मॉड्यूल को कंपाइल करता है. साथ ही, कंपाइल किए गए कॉन्टेंट को ऐप्लिकेशन में पैकेज करता है.
बिल्ड फ़ाइल, Android Gradle प्लगिन (com.application.android
) पर डिपेंडेंसी का एलान भी करती है. अगर आपके पास एक से ज़्यादा ऐसे मॉड्यूल हैं जो एक ही प्लगिन का इस्तेमाल करते हैं, तो आपके पास सभी मॉड्यूल में बिल्ड क्लासपाथ पर प्लगिन का सिर्फ़ एक वर्शन हो सकता है. हर मॉड्यूल की बिल्ड स्क्रिप्ट में वर्शन तय करने के बजाय, आपको रूट बिल्ड स्क्रिप्ट में प्लगिन की डिपेंडेंसी को वर्शन के साथ शामिल करना चाहिए. साथ ही, यह बताना चाहिए कि इसे लागू नहीं करना है. apply false
जोड़ने से, Gradle को प्लगिन के वर्शन के बारे में पता चलता है. हालाँकि, इसका इस्तेमाल रूट बिल्ड में नहीं किया जाता.
आम तौर पर, रूट बिल्ड स्क्रिप्ट में plugins
ब्लॉक के अलावा कोई और कॉन्टेंट नहीं होता.
Kotlin
plugins { id("org.jetbrains.kotlin.android") version "1.9.0" apply false }
Groovy
plugins { id ‘com.android.application’ version ‘8.3.0-rc02’ apply false }
अगर आपके पास सिंगल-मॉड्यूल प्रोजेक्ट है, तो मॉड्यूल-लेवल की बिल्ड स्क्रिप्ट में वर्शन की जानकारी साफ़ तौर पर दी जा सकती है. साथ ही, प्रोजेक्ट-लेवल की बिल्ड स्क्रिप्ट को खाली छोड़ा जा सकता है:
Kotlin
plugins { id("com.android.application") version "8.3.0" }
Groovy
plugins { id 'com.android.application' version '8.3.0-rc02' }