Android Gradle प्लगिन 7.1.0 (जनवरी 2022)
Android Gradle प्लगिन 7.1.0, एक मुख्य रिलीज़ है. इसमें कई नई सुविधाएं और सुधार शामिल हैं.
7.1.3 (अप्रैल 2022)
इस छोटे अपडेट में, ये गड़बड़ियां ठीक की गई हैं:
- R8 ने डुप्लीकेट क्लास से जुड़ी समस्याएं रिपोर्ट की हैं
इस रिलीज़ में ठीक की गई सभी गड़बड़ियों की सूची देखने के लिए, Android Studio Bumblebee पैच 3 के बारे में ब्लॉग पोस्ट पढ़ें.
7.1.2 (फ़रवरी 2022)
इस छोटे अपडेट में, ये गड़बड़ियां ठीक की गई हैं:
- यूनिट टेस्ट के दौरान, Android Gradle प्लगिन 7.1.0-rc01, एएसएम बाइटकोड ट्रांसफ़ॉर्मेशन नहीं कर पाता
- Gradle सिंक नहीं हो पाता. साथ ही, यह गड़बड़ी दिखती है: "Unable to load class 'com.android.build.api.extension.AndroidComponentsExtension'."
- Android Gradle प्लगिन 7.0.0 में, Groovy DSL से कुछ नए DSL ब्लॉक का इस्तेमाल नहीं किया जा सकता
- AGP 7.1 का नया पब्लिशिंग एपीआई: javadoc jar, साइन नहीं किया गया है
- ClassesDataSourceCache को Asm के नए वर्शन का इस्तेमाल करना चाहिए
- Android Studio BumbleBee, हमेशा सबसे नए बदलावों को डिप्लॉय नहीं करता
इस रिलीज़ में ठीक की गई सभी गड़बड़ियों की सूची देखने के लिए, Android Studio Bumblebee पैच 2 के बारे में ब्लॉग पोस्ट पढ़ें.
7.1.1 (फ़रवरी 2022)
यह छोटा अपडेट, Android Studio Bumblebee पैच 1 की रिलीज़ से जुड़ा है.
इस रिलीज़ में ठीक की गई गड़बड़ियों की सूची देखने के लिए, Android Studio Bumblebee पैच 1 के बारे में ब्लॉग पोस्ट पढ़ें.
इनके साथ काम करता है
| सबसे पुराना वर्शन | डिफ़ॉल्ट वर्शन | नोट | |
|---|---|---|---|
| ग्रेडल | 7.2 | 7.2 | ज़्यादा जानकारी के लिए, Gradle को अपडेट करने का तरीका देखें. |
| एसडीके बिल्ड टूल | 30.0.3 | 30.0.3 | इंस्टॉल करें या कॉन्फ़िगर करें एसडीके बिल्ड टूल. |
| एनडीके (NDK) | लागू नहीं | 21.4.7075529 | एनडीके का कोई दूसरा वर्शन इंस्टॉल करें या कॉन्फ़िगर करें. |
| जेडीके | 11 | 11 | ज़्यादा जानने के लिए, जेडीके वर्शन सेट करना लेख पढ़ें. |
अब Lint विश्लेषण टास्क को कैश किया जा सकता है
AndroidLintAnalysisTask अब
Gradle
बिल्ड कैश के साथ काम करता है. अगर आपने gradle.properties फ़ाइल में
org.gradle.caching=true सेट करके, बिल्ड कैश की सुविधा चालू की है, तो Lint विश्लेषण टास्क, बिल्ड कैश से अपना आउटपुट लेगा.
Android Gradle प्लगिन के साथ Lint चलाने पर, Lint विश्लेषण टास्क अक्सर सबसे बड़ी बॉटलनेक बनता है. इसलिए, बिल्ड कैश की सुविधा चालू करने से, कई स्थितियों में Lint चलाने पर बिल्ड की स्पीड बेहतर होती है. आपको परफ़ॉर्मेंस में काफ़ी सुधार दिखेगा. उदाहरण के लिए, अगर आपके पास मल्टी-मॉड्यूल प्रोजेक्ट है और सीआई सर्वर पर Lint चलाने से पहले, बिल्ड डायरेक्ट्री को साफ़ किया जाता है.
अब C/C++ मॉड्यूल, एक ही प्रोजेक्ट में मौजूद अन्य C/C++ मॉड्यूल का रेफ़रंस दे सकते हैं
अब C/C++ कोड वाले Gradle Android मॉड्यूल को, दूसरे Gradle मॉड्यूल में मौजूद हेडर फ़ाइलों और लाइब्रेरी कोड का रेफ़रंस देने के लिए सेट अप किया जा सकता है. Gradle मॉड्यूल के बीच हेडर और लाइब्रेरी की जानकारी शेयर करने के लिए, Prefab प्रोटोकॉल का इस्तेमाल किया जाता है.
ज़रूरी शर्तें
-
इस्तेमाल करने वाले मॉड्यूल को
CMakeहोना चाहिए, न किndk-build. ndk-build के लिए सहायता पाने के लिए, एनडीके को आने वाले समय में अपडेट करना होगा. पब्लिश करने वाले मॉड्यूल कोCMakeयाndk-buildके तौर पर सेट किया जा सकता है. -
इस्तेमाल करने वाले मॉड्यूल को
prefabकी सुविधा फ़ाइल मेंbuild.gradleचालू करनी होगी.
android {
buildFeatures {
prefab true
}
}- पब्लिश करने वाले मॉड्यूल को
prefabPublishingकी सुविधाbuild.gradleफ़ाइल में चालू करनी होगी.
android {
buildFeatures {
prefabPublishing true
}
}- इस्तेमाल करने वाले मॉड्यूल को, पब्लिश करने वाले
मॉड्यूल का रेफ़रंस,
build.gradleफ़ाइलdependenciesब्लॉक में एक लाइन जोड़कर देना होगा. उदाहरण के लिए:
dependencies {
implementation project(':mylibrary')
}- पब्लिश करने वाले मॉड्यूल को,
prefabसेक्शन का इस्तेमाल करके एक पैकेज दिखाना होगा. उदाहरण के लिए:
android {
prefab {
mylibrary {
libraryName "libmylibrary"
headers "src/main/cpp/include"
}
}
}- इस्तेमाल करने वाले मॉड्यूल की
CMakeLists.txtफ़ाइल, प्रॉडक्ट बनाने वाले मॉड्यूल से पब्लिश किए गए पैकेज को ढूंढने के लिए,find_package()का इस्तेमाल कर सकती है. उदाहरण के लिए:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
myapplication
mylibrary::mylibrary)- पूरे ऐप्लिकेशन के लिए एक ही एसटीएल होना चाहिए. इसलिए, उदाहरण के लिए, इस्तेमाल करने वाले और पब्लिश करने वाले, दोनों मॉड्यूल C++ शेयर किए गए एसटीएल का इस्तेमाल कर सकते हैं.
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments '-DANDROID_STL=c++_shared'
}
}
}
}एजीपी के साथ, नेटिव एएआर इस्तेमाल करने वाले और बनाने वाले मॉड्यूल को कॉन्फ़िगर करने के तरीके के बारे में ज़्यादा जानने के लिए, एजीपी के साथ नेटिव डिपेंडेंसी लेख पढ़ें.
settings.gradle फ़ाइल में, रिपॉज़िटरी की सेटिंग
Android Studio Bumblebee में नया प्रोजेक्ट बनाने पर, टॉप-लेवल की
build.gradle फ़ाइल में plugins ब्लॉक होता है,
इसके बाद, बिल्ड डायरेक्ट्री को साफ़ करने का कोड होता है:
plugins {
id 'com.android.application' version '7.1.0-beta02' apply false
id 'com.android.library' version '7.1.0-beta02' apply false
id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}
task clean(type: Delete) {
delete rootProject.buildDir
}रिपॉज़िटरी की सेटिंग पहले टॉप-लेवल की
build.gradle फ़ाइल में होती थीं. अब ये settings.gradle
फ़ाइल में मौजूद हैं:
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'मॉड्यूल-लेवल की build.gradle फ़ाइल में कोई बदलाव नहीं किया गया है. इसलिए, अपने प्रोजेक्ट के सभी मॉड्यूल पर लागू होने वाले बिल्ड
कॉन्फ़िगरेशन या Gradle पर लागू होने वाली रिपॉज़िटरीज़
और डिपेंडेंसी तय करने के लिए, टॉप-लेवल की
build.gradle फ़ाइल और settings.gradle फ़ाइल का इस्तेमाल करें. अपने प्रोजेक्ट में किसी खास
मॉड्यूल के लिए बिल्ड कॉन्फ़िगरेशन तय करने के लिए, मॉड्यूल-लेवल की
build.gradle फ़ाइल का इस्तेमाल करें.
बेहतर रिसॉर्स श्रिंकर
Android Studio Bumblebee में, बेहतर रिसॉर्स श्रिंकर शामिल है. इससे आपके ऐप्लिकेशन का साइज़ कम करने में मदद मिलती है.
डाइनैमिक फ़ीचर वाले ऐप्लिकेशन के लिए सहायता
Android Gradle प्लगिन 7.1.0-alpha09 में, Android रिसॉर्स श्रिंकर के डिफ़ॉल्ट तरीके को अपडेट किया गया है. नए तरीके से, डाइनैमिक फ़ीचर वाले ऐप्लिकेशन को श्रिंक किया जा सकता है.
ऐप्लिकेशन का साइज़ और कम करने के लिए, एक्सपेरिमेंटल सुविधा
संसाधन की टेबल में बदलाव करके, इस्तेमाल न किए गए वैल्यू रिसॉर्स और इस्तेमाल न की गई फ़ाइल रिसॉर्स के रेफ़रंस को हटाकर, रिसॉर्स श्रिंकर का नया तरीका, श्रिंक किए गए ऐप्लिकेशन का साइज़ और कम कर सकता है. नया रिसॉर्स
श्रिंकर, इस्तेमाल न की गई फ़ाइल रिसॉर्स को पूरी तरह से मिटा सकता है. इससे आपके ऐप्लिकेशन का साइज़ और कम हो जाता है. यह सुविधा, फ़िलहाल डिफ़ॉल्ट रूप से चालू नहीं है. हालांकि, इसे आज़माने के लिए, आप अपने प्रोजेक्ट की gradle.properties फ़ाइल में, एक्सपेरिमेंटल विकल्प android.experimental.enableNewResourceShrinker.preciseShrinking=true जोड़ सकते हैं.
कृपया नए रिसॉर्स श्रिंकर या
एक्सपेरिमेंटल फ़्लैग से जुड़ी किसी भी समस्या की शिकायत करें. समस्याओं की पहचान करने में मदद पाने के लिए या अस्थायी तौर पर, पिछले तरीके पर वापस स्विच किया जा सकता है. इसके लिए, अपने प्रोजेक्ट की
gradle.properties में
android.enableNewResourceShrinker=false जोड़ें.
नया श्रिंकर, इस्तेमाल न की गई फ़ाइल-आधारित रिसॉर्स को, पिछले रिसॉर्स श्रिंकर की तुलना में थोड़े अलग
कम साइज़ वाली फ़ाइलों से बदलता है. हालांकि, इससे रनटाइम पर कोई असर नहीं पड़ने की उम्मीद है.
Android Gradle प्लगिन 8.0.0 में, पुराने तरीके को हटाने की योजना है.
बिल्ड वैरिएंट पब्लिश करना
Android Gradle प्लगिन 7.1.0 और इसके बाद वाले वर्शन की मदद से, यह कॉन्फ़िगर किया जा सकता है कि Apache Maven रिपॉज़िटरी में कौनसे बिल्ड वैरिएंट पब्लिश किए जाएं. एजीपी, नए पब्लिशिंग DSL के आधार पर, एक या एक से ज़्यादा बिल्ड वैरिएंट वाला कॉम्पोनेंट बनाता है. इसका इस्तेमाल, Maven रिपॉज़िटरी में पब्लिश करने की प्रोसेस को पसंद के मुताबिक बनाने के लिए किया जा सकता है. पिछले वर्शन की तुलना में, इससे गैर-ज़रूरी काम से भी बचा जा सकता है, क्योंकि डिफ़ॉल्ट रूप से कोई कॉम्पोनेंट नहीं बनाया जाएगा. ज़्यादा जानने के लिए, पब्लिश करने के कोड का सैंपल देखें.
Javadoc JAR पब्लिश करना
एजीपी 7.1.0 और इसके बाद वाले वर्शन की मदद से, Java और Kotlin
सोर्स से Javadoc जनरेट किया जा सकता है. साथ ही, लाइब्रेरी
प्रोजेक्ट के लिए एएआर के अलावा, Javadoc JAR फ़ाइलें भी पब्लिश की जा सकती हैं. Javadoc को POM और
Gradle Module Metadata{:.external}
फ़ाइलों में जोड़ा जाता है. इस सुविधा को चालू करने के लिए, withJavadocJar() को
singleVariant या multipleVariants पब्लिशिंग ब्लॉक में जोड़ें.
ज़्यादा जानने के लिए, पब्लिश करने के विकल्पों के कोड का सैंपल देखें.
सोर्स JAR पब्लिश करना
एजीपी 7.1.0 और इसके बाद वाले वर्शन की मदद से, लाइब्रेरी प्रोजेक्ट के लिए एएआर के अलावा, Java और Kotlin सोर्स JAR
फ़ाइलें भी पब्लिश की जा सकती हैं. सोर्स को
POM और
Gradle Module Metadata{:.external} फ़ाइलों में जोड़ा जाता है. इस सुविधा को चालू करने के लिए, singleVariant या multipleVariants पब्लिशिंग ब्लॉक में withSourcesJar() जोड़ें. ज़्यादा जानने के लिए, पब्लिश करने के विकल्पों के कोड का सैंपल देखें.
Lint ब्लॉक के सिमैंटिक में बदलाव
Lint के सभी तरीके, जो किसी समस्या के दिए गए सेवरिटी लेवल को बदल देते हैं—enable, disable/ignore,
informational, warning, error,
fatal—अब कॉन्फ़िगरेशन के क्रम का पालन करते हैं. उदाहरण के लिए,
किसी समस्या को फ़ेटल के तौर पर सेट करने पर,
finalizeDsl()
अब मुख्य DSL में उसे बंद करने की सेटिंग बदल जाती है. ज़्यादा जानकारी के लिए, lint{}
ब्लॉक के रेफ़रंस वाले दस्तावेज़ और
Android बिल्ड
फ़्लो और एक्सटेंशन पॉइंट देखें.
Navigation Safe Args के साथ काम करना
एजीपी के वे एपीआई हटा दिए गए हैं जिन पर Navigation Safe Args Gradle प्लगिन निर्भर करता है. एजीपी 7.1, Navigation Safe Args के वर्शन 2.4.0-rc1 या 2.4.0 के साथ काम नहीं करता. हालांकि, यह वर्शन 2.5.0-alpha01 और 2.4.1 के साथ काम करेगा. इस बीच, अस्थायी तौर पर, Navigation Safe Args के स्नैपशॉट बिल्ड, Navigation 2.5.0-SNAPSHOT के साथ एजीपी 7.1 का इस्तेमाल किया जा सकता है. स्नैपशॉट बिल्ड का इस्तेमाल करने के लिए, बिल्ड आईडी #8054565 के साथ स्नैपशॉट के निर्देश देखें.
इसके अलावा, Navigation Safe Args के वर्शन 2.4.1 और 2.5.0, अब एजीपी 4.2 के साथ काम नहीं करेंगे. Safe Args के इन वर्शन का इस्तेमाल करने के लिए, एजीपी 7.0 और इसके बाद वाले वर्शन का इस्तेमाल करना होगा.
कॉम्पोनेंट के अपने-आप बनने की सुविधा बंद करना
एजीपी 8.0 से, कॉम्पोनेंट के अपने-आप बनने की सुविधा डिफ़ॉल्ट रूप से बंद हो जाएगी.
फ़िलहाल, एजीपी 7.1, हर बिल्ड वैरिएंट के लिए एक कॉम्पोनेंट अपने-आप बनाता है,
इसका नाम, बिल्ड वैरिएंट के नाम जैसा ही होता है. साथ ही, एक all
कॉम्पोनेंट भी अपने-आप बनता है, जिसमें सभी बिल्ड वैरिएंट शामिल होते हैं. कॉम्पोनेंट के अपने-आप बनने की सुविधा बंद हो जाएगी. नए तरीके पर माइग्रेट करने के लिए, कॉम्पोनेंट के अपने-आप बनने की सुविधा को मैन्युअल तरीके से बंद करें. इसके लिए, android.disableAutomaticComponentCreation को true.
पर सेट करें. ज़्यादा जानकारी के लिए, Maven Publish प्लगिन का इस्तेमाल करना लेख पढ़ें.
Firebase प्रदर्शन मॉनिटर करना के साथ काम करना
एजीपी 7.1, Firebase प्रदर्शन मॉनिटर करना Gradle प्लगिन के वर्शन 1.4.0 और इससे पहले वाले वर्शन के साथ काम नहीं करता. एजीपी अपग्रेड असिस्टेंट, प्लगिन को वर्शन 1.4.1 पर अपने-आप
अपडेट नहीं करेगा. इसलिए, अगर firebase-perf का इस्तेमाल किया जा रहा है और एजीपी को 7.1 पर अपग्रेड करना है, तो आपको यह अपग्रेड मैन्युअल तरीके से करना होगा.
पहले से मालूम समस्याएं
इस सेक्शन में, Android Gradle प्लगिन 7.1.0 में मौजूद पहले से मालूम समस्याओं के बारे में बताया गया है.
Hilt प्लगिन का इस्तेमाल करने वाले ऐप्लिकेशन प्रोजेक्ट की यूनिट टेस्टिंग में समस्याएं
यूनिट टेस्ट के क्लासपाथ में, इंस्ट्रूमेंट न किए गए ऐप्लिकेशन की क्लास शामिल होती हैं. इसका मतलब है कि यूनिट टेस्ट चलाने पर, Hilt, डिपेंडेंसी इंजेक्शन को मैनेज करने के लिए, ऐप्लिकेशन की क्लास को इंस्ट्रूमेंट नहीं करता.
इस समस्या को 7.1.1 रिलीज़ में ठीक कर दिया जाएगा, देखें समस्या #213534628.