Android Gradle प्लग इन 8.1.0 (जुलाई 2023)

Android Gradle प्लग इन 8.1.0 एक मेजर रिलीज़ है. इसमें कई नई सुविधाएं और सुधार शामिल हैं.

इनके साथ काम करता है

कम से कम वर्शन डिफ़ॉल्ट वर्शन नोट
Gradle 8.0 8.0 ज़्यादा जानने के लिए, Gradle को अपडेट करना लेख पढ़ें.
SDK टूल के लिए बिल्ड टूल 33.0.1 33.0.1 SDK Build Tools को इंस्टॉल या कॉन्फ़िगर करें.
एनडीके लागू नहीं 25.1.8937393 NDK का कोई दूसरा वर्शन इंस्टॉल या कॉन्फ़िगर करें.
JDK 17 17 ज़्यादा जानने के लिए, JDK वर्शन सेट करना लेख पढ़ें.

Kotlin DSL, बिल्ड कॉन्फ़िगरेशन के लिए डिफ़ॉल्ट तौर पर सेट होता है

नए प्रोजेक्ट अब डिफ़ॉल्ट रूप से, Kotlin DSL (build.gradle.kts) का इस्तेमाल, बिल्ड कॉन्फ़िगरेशन के लिए करते हैं. यह Groovy DSL (build.gradle) की तुलना में, सिंटैक्स हाइलाइट करने, कोड पूरा करने, और एलान करने के लिए नेविगेट करने की सुविधा के साथ, बदलाव करने का बेहतर अनुभव देता है. ध्यान दें कि अगर बिल्ड कॉन्फ़िगरेशन के लिए AGP 8.1 और Kotlin DSL का इस्तेमाल किया जा रहा है, तो बेहतर अनुभव के लिए आपको Gradle 8.1 का इस्तेमाल करना चाहिए. ज़्यादा जानने के लिए, Kotlin DSL माइग्रेशन गाइड देखें.

हर ऐप्लिकेशन के हिसाब से भाषा अपने-आप बदलने की सुविधा

Android Studio Giraffe Canary 7 और AGP 8.1.0-alpha07 से, अपने ऐप्लिकेशन को हर ऐप्लिकेशन के लिए भाषा की प्राथमिकताओं के साथ काम करने के लिए अपने-आप कॉन्फ़िगर किया जा सकता है. आपके प्रोजेक्ट के संसाधनों के आधार पर, Android Gradle प्लग इन LocaleConfig फ़ाइल जनरेट करता है और फ़ाइनल मेनिफ़ेस्ट फ़ाइल में इसका रेफ़रंस जोड़ता है. इसलिए, अब आपको मैन्युअल तरीके से ऐसा करने की ज़रूरत नहीं है. AGP, आपके ऐप्लिकेशन मॉड्यूल के res फ़ोल्डर और लाइब्रेरी मॉड्यूल की डिपेंडेंसी में मौजूद रिसॉर्स का इस्तेमाल करता है. इससे, यह तय किया जाता है कि LocaleConfig फ़ाइल में कौनसी स्थानीय भाषाएं शामिल की जाएं.

ध्यान दें कि हर ऐप्लिकेशन के लिए, भाषा अपने-आप बदलने की सुविधा, Android 13 (एपीआई लेवल 33) या उसके बाद के वर्शन पर काम करने वाले ऐप्लिकेशन के साथ काम करती है. इस सुविधा का इस्तेमाल करने के लिए, आपको compileSdkVersion को 33 या उससे ज़्यादा पर सेट करना होगा. Android के पुराने वर्शन के लिए, हर ऐप्लिकेशन की भाषा की प्राथमिकताएं कॉन्फ़िगर करने के लिए, आपको अब भी एपीआई और ऐप्लिकेशन में भाषा चुनने की सुविधाओं का इस्तेमाल करना होगा.

हर ऐप्लिकेशन के लिए, भाषा के अपने-आप काम करने की सुविधा चालू करने के लिए, कोई डिफ़ॉल्ट स्थानीय भाषा तय करें:

  1. ऐप्लिकेशन मॉड्यूल के res फ़ोल्डर में, resources.properties नाम की एक नई फ़ाइल बनाएं.
  2. resources.properties फ़ाइल में, unqualifiedResLocale लेबल के साथ डिफ़ॉल्ट स्थान-भाषा सेट करें. स्थानीय भाषा के नाम बनाने के लिए, भाषा कोड को वैकल्पिक स्क्रिप्ट और इलाके के कोड के साथ जोड़ें. साथ ही, हर कोड को डैश से अलग करें:

    • भाषा: दो या तीन अक्षरों वाले ISO 639-1 कोड का इस्तेमाल करें.
    • स्क्रिप्ट (ज़रूरी नहीं): ISO 15924 कोड का इस्तेमाल करें.
    • क्षेत्र (ज़रूरी नहीं): दो अक्षर वाले ISO 3166-1-alpha-2 कोड या तीन अंकों वाले UN_M.49 कोड में से किसी एक का इस्तेमाल करें.

    उदाहरण के लिए, अगर आपकी डिफ़ॉल्ट स्थान-भाषा अमेरिकन इंग्लिश है, तो:

        unqualifiedResLocale=en-US
        

AGP, डिफ़ॉल्ट भाषा के साथ-साथ, res फ़ोल्डर में मौजूद values-* डायरेक्ट्री का इस्तेमाल करके, आपके बताए गए वैकल्पिक भाषाओं को अपने-आप जनरेट हुई LocaleConfig फ़ाइल में जोड़ता है.

हर ऐप्लिकेशन के लिए, भाषा अपने-आप बदलने की सुविधा डिफ़ॉल्ट रूप से बंद होती है. इस सुविधा को चालू करने के लिए, मॉड्यूल-लेवल की build.gradle.kts फ़ाइल (अगर Groovy का इस्तेमाल किया जा रहा है, तो build.gradle फ़ाइल) के androidResources {} ब्लॉक में generateLocaleConfig सेटिंग का इस्तेमाल करें:

Kotlin

android {
  androidResources {
    generateLocaleConfig = true
  }
}

Groovy

android {
  androidResources {
    generateLocaleConfig true
  }
}

Android Lint में, JVM 17 को टारगेट करने वाला बाइटकोड शामिल है

AGP 8.1.0-alpha04 से शुरू होकर, Android Lint में JVM 17 को टारगेट करने वाला बाइटकोड शामिल है. अगर कस्टम लिंट जांच लिखी जाती है, तो आपको JDK 17 या इसके बाद के वर्शन के साथ कॉम्पाइल करना होगा और अपने Kotlin कंपाइलर के विकल्पों में jvmTarget = '17' की जानकारी देनी होगी.

लिंट टूल के बारे में ज़्यादा जानने के लिए, लिंट की जांच करके अपने कोड को बेहतर बनाएं लेख पढ़ें.

नेटिव लाइब्रेरी को कंप्रेस करने की सेटिंग को डीएसएल में ले जाया गया

AGP 8.1.0-alpha10 से, अगर मेनिफ़ेस्ट के बजाय डीएसएल का इस्तेमाल करके नेटिव लाइब्रेरी कम्प्रेशन को कॉन्फ़िगर नहीं किया जाता है, तो आपको चेतावनी मिलेगी. यहां दिए गए दिशा-निर्देशों में, डीएसएल का इस्तेमाल करने के लिए अपने कॉन्फ़िगरेशन को अपडेट करने का तरीका बताया गया है. इन अपडेट को लागू करने में मदद पाने के लिए, AGP Upgrade Assistant (टूल > AGP Upgrade Assistant) का इस्तेमाल करें.

बिना कंप्रेस की गई नेटिव लाइब्रेरी का इस्तेमाल करने के लिए, मेनिफ़ेस्ट से android::extractNativeLibs एट्रिब्यूट हटाएं और मॉड्यूल-लेवल build.gradle.kts फ़ाइल (अगर Groovy का इस्तेमाल किया जा रहा है, तो build.gradle फ़ाइल) में यह कोड जोड़ें:

Kotlin

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging = false
    }
  }
}

Groovy

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging false
    }
  }
}

एक्सपेरिमेंटल बिल्ड फ़्लैग

ये AGP 8.1 में उपलब्ध, आपके बिल्ड को कॉन्फ़िगर करने के लिए एक्सपेरिमेंटल फ़्लैग हैं.

चिह्नित करें जोड़ा गया डिफ़ॉल्ट मान नोट
android.experimental.useDefaultDebugSigningConfigForProfileableBuildtypes AGP 8.0 false अगर इस विकल्प को चालू करने के लिए, साइनिंग कॉन्फ़िगरेशन नहीं चुना जाता है, तो AGP, प्रोफ़ाइल किए जा सकने वाले या डीबग किए जा सकने वाले बाइल्ड को चलाते समय, डिफ़ॉल्ट डीबग साइनिंग कॉन्फ़िगरेशन का इस्तेमाल करता है. यह फ़्लैग डिफ़ॉल्ट रूप से बंद होता है, ताकि बाइल्ड बनाने वाले लोग, प्रोफ़ाइलिंग के लिए खास साइनिंग कॉन्फ़िगरेशन का एलान कर सकें.
android.experimental.library.desugarAndroidTest AGP 8.0 false इस फ़्लैग की मदद से, लाइब्रेरी बनाने वाले लोग, टेस्टिंग के लिए बने APK में कोर लाइब्रेरी को डी-शुगर कर सकते हैं. ऐसा करने से, जनरेट किए गए AAR पर कोई असर नहीं पड़ता. उदाहरण के लिए, लिंटिंग की मदद से. हमारा प्लान है कि हम Variant API में भी इस तरह की सुविधा उपलब्ध कराएं.
android.experimental.testOptions.managedDevices.customDevice AGP 8.0 false अगर यह सेटिंग चालू है, तो 'ऐसा डिवाइस जिसे Gradle मैनेज करता है' सेक्शन में, उपयोगकर्ता के तय किए गए कस्टम डिवाइस टाइप का इस्तेमाल किया जा सकता है. अगर आपको Firebase टेस्ट लैब प्लग इन का इस्तेमाल करना है, तो यह फ़्लैग चालू होना चाहिए.
android.lint.printStackTrace AGP 8.0 false अगर यह सुविधा चालू है, तो Android lint क्रैश होने पर स्टैक ट्रेस प्रिंट करता है. इस फ़्लैग के पास, LINT_PRINT_STACKTRACE के एनवायरमेंट वैरिएबल जैसी ही सुविधाएं होती हैं.
android.experimental.testOptions.managedDevices.maxConcurrentDevices AGP 8.0 कोई नहीं यह किसी भी समय, एक साथ चालू रहने वाले Gradle मैनेज किए जा रहे डिवाइसों (AVDs) की ज़्यादा से ज़्यादा संख्या बताता है. अगर वैल्यू 0 या नेगेटिव है, तो डिवाइसों की ज़्यादा से ज़्यादा संख्या तय नहीं की गई है.
android.experimental.testOptions.installApkTimeout AGP 8.0 कोई नहीं APK इंस्टॉल करने के लिए, टाइम आउट की अवधि सेकंड में. अगर वैल्यू 0 या नेगेटिव है, तो UTP इसे डिफ़ॉल्ट वैल्यू पर सेट कर देगा.

ठीक की गई समस्याएं

Android Gradle प्लग इन 8.1.0

ठीक की गई समस्याएं
Android Gradle प्लग इन
कॉन्फ़िगरेशन कैश मेमोरी से जुड़ी, `com.android.build.gradle.tasks.ShaderCompile` की समस्याएं
AGP API का इस्तेमाल करके Java संसाधनों को जोड़ने से, कॉन्फ़िगरेशन कैश मेमोरी खराब हो जाती है
[Android Studio : Flamingo | 2022.2.1 Canary 8] liblog.so को APK में पैकेज किया गया है
KGP, कॉन्फ़िगरेशन के दौरान मेनिफ़ेस्ट को पढ़ता है. साथ ही, मेनिफ़ेस्ट में बदलाव होने पर कॉन्फ़िगरेशन कैश मेमोरी को अमान्य कर देता है
मर्ज किए गए मेनिफ़ेस्ट में समस्या होने पर, बिल्ड के लिए चेतावनी का मैसेज साफ़ तौर पर न दिखना
AGP 7.4 पर अपग्रेड करने पर, StackOverflowError मिलना
डाइनैमिक सुविधा में ClassNotFoundException, जो सीधे तौर पर Kotlin लाइब्रेरी सब-प्रोजेक्ट पर निर्भर करती है
processDebugUnitTestManifest, टेस्ट वैरिएंट के लिए मेनिफ़ेस्ट प्लेसहोल्डर के साथ काम नहीं कर रहा है
processDebugUnitTestManifest, टेस्ट वैरिएंट के लिए मेनिफ़ेस्ट प्लेसहोल्डर के साथ काम नहीं कर रहा है
ऐसा लगता है कि नेमस्पेस प्रॉपर्टी, HasAndroidResources से जुड़ी है
"पिछली बार प्रोजेक्ट सिंक होने के बाद, Gradle फ़ाइलों में बदलाव हुए हैं" मैसेज को बंद नहीं किया जा सकता
"हमारा सुझाव है कि आप नए Android Gradle प्लग इन का इस्तेमाल करें", जब कोई नया प्लग इन उपलब्ध न हो
processDebugUnitTestManifest, टेस्ट वैरिएंट के लिए मेनिफ़ेस्ट प्लेसहोल्डर के साथ काम नहीं कर रहा है
CheckAarMetadataTask में, SDK टूल को कंपाइल करने की जांच बंद करने के लिए बूलियन फ़्लैग
बिल्ड से जुड़ी गड़बड़ी, एपीआई लेवल 34 से जुड़ी है, जो मौजूद नहीं है
JVM टूलचैन सेट करने से, JavaCompile targetCompatibility वैल्यू पर कोई असर नहीं पड़ता
वाइल्डकार्ड डोमेन वाले नेविगेशन डीपलिंक एंट्री के लिए, मर्ज किए गए मेनिफ़ेस्ट में `android:host` एट्रिब्यूट मौजूद नहीं है
Android Gradle प्लग इन 8.1 के बाद, processDebugMainManifest टास्क पूरा नहीं हो पा रहा है
क्या AnalyticsRecordingTask को हटाया जा सकता है?
output-metadata.json का कॉन्टेंट एक जैसा नहीं है
क्या AnalyticsRecordingTask को हटाया जा सकता है?
output-metadata.json का कॉन्टेंट एक जैसा नहीं है
JVM टूलचैन सेट करने से, JavaCompile targetCompatibility वैल्यू पर कोई असर नहीं पड़ता
वाइल्डकार्ड डोमेन वाले नेविगेशन डीपलिंक एंट्री के लिए, मर्ज किए गए मेनिफ़ेस्ट में `android:host` एट्रिब्यूट मौजूद नहीं है
Android Gradle प्लग इन 8.1 के बाद, processDebugMainManifest टास्क पूरा नहीं हो पा रहा है
Android Studio, STUDIO_GRADLE_JDK एनवायरमेंट वैरिएबल का इस्तेमाल नहीं करता
कस्टम सोर्स टाइप, अलग-अलग फ़्लेवर वाले सोर्सेट बनाते हैं
DependenciesInfoBuilder को एपीआई अपडेट और दस्तावेज़ की ज़रूरत है
Java 11 टारगेट के साथ DexingNoClasspathTransform (minSdk >= 24) काम नहीं करता, क्योंकि नेस्ट में शामिल सदस्य मौजूद नहीं हैं
DslExtension.Builder.extendProjectWith() फ़ंक्शन, Groovy में बताए गए तरीके से काम नहीं कर रहा है
VariantSelector.withFlavor API जोड़ें, जो kotlin.Pair का इस्तेमाल नहीं करता
AndroidLintAnalysisTask (:lintAnalyzeExternalRelease) में कैश मेमोरी नहीं है, क्योंकि `proguard.txt` बदल गया है
ऐप्लिकेशन के मर्ज किए गए मेनिफ़ेस्ट में, डिपेंडेंसी से extractNativeLibs और useEmbeddedDex एट्रिब्यूट शामिल हैं
AGP: सार्वजनिक एपीआई के तौर पर, AIDL टूल और फ़्रेमवर्क AIDL फ़ाइल का पाथ एक्सपोज़ करना
अनुरोध: आईडीई को "PermittedSubclasses के लिए ASM9 की ज़रूरत है" की समस्या को ठीक करने का विकल्प दें
गड़बड़ी: "KSP चालू करें और इस डिपेंडेंसी के लिए KSP प्रोसेसर का इस्तेमाल करें" विकल्प, सिर्फ़ किसी वेबसाइट पर ले जाता है
Gradle 8.1 में, .gradle/.android/analytics.settings की वजह से कॉन्फ़िगरेशन कैश मेमोरी का इस्तेमाल नहीं किया जा सकता
agp 8.1.0 में generateLocaleConfig, तय क्रम का इस्तेमाल नहीं करता. इससे, दोबारा बनाए जा सकने वाले बिल्ड में गड़बड़ी आती है
Dexer (D8)
हाल ही के अपडेट के बाद, कोर लाइब्रेरी के डीसुगरिंग की वजह से ऐप्लिकेशन क्रैश हो रहा है.
agp 8.1.0 regression with API 21 - F/dex2oat ( 4176): art/compiler/driver/compiler_driver.cc:1181] Check failed: !method->IsAbstract()
Lint
Lint, सीधे लागू किए गए इंटरफ़ेस के लिए ही सुरक्षित कास्ट की जांच करता है, न कि इनहेरिट किए गए इंटरफ़ेस के लिए
Lint, कॉल पाने वालों के लिए मान्य कास्ट की जांच नहीं करता
TypedArray#close (एपीआई 31) को डी-सुगर नहीं किया गया है, लेकिन try-with-resources में इस्तेमाल करने पर, AS चेतावनी नहीं दिखाता
गड़बड़ी: "'BC' प्रोवाइडर अब काम नहीं करता और Android P के बाद से..." की गलत चेतावनी
Kotlin को 1.8.0 पर अपग्रेड करने के बाद, remember फ़ंक्शन के बारे में गलत चेतावनी मिलना
किसी एनोटेशन पैरामीटर वाले तरीके में की गई SDK_INT जांचों के लिए, गलत सकारात्मक Lint चेतावनी
TypographyQuotes की लिंट जांच, एस्केप किए गए कोट पर काम नहीं करती
TrustAllX509TrustManager लिंट की जांच, X509TrustManager को एक्सटेंशन देने वाले इंटरफ़ेस को गलत तरीके से फ़्लैग करती है
बदलाव करने के लिए डाले गए कोड को फिर से फ़ॉर्मैट करना
Lint: intention preview throws exception for ReplaceStringQuickFix
Shrinker (R8)
VerifyError: Verifier rejected class when using R8 with Kotlin 1.8.20
AGP 8 पर R8 की वजह से, Google Fit की सेवा काम नहीं करती
सोर्स फ़ाइल की जानकारी में, इनपुट के नामों से ओवरलैप होने वाले बाकी नामों को शामिल करने पर, जानकारी सही तरीके से नहीं दिखती
ArrayIndexOutOfBoundsException की वजह से, Compose के बिल्ड के दौरान R8 काम नहीं करता
SimpleStringBuilder से जुड़े कोड में, रिलीज़ या debuggable=false मोड में जोड़ने के लिए टेल कॉल मौजूद नहीं है
VirtualDispatchMethodArgumentPropagator.shouldActivateMethodStateGuardedByBounds() तरीके में एक कोने का मामला
dex-startup-optimization की वजह से java.lang.VerifyError: Rejecting class
Android 12 और उसके बाद के वर्शन पर, पुष्टि करने से जुड़ी गड़बड़ी की वजह से ऐप्लिकेशन क्रैश होना

Android Gradle प्लग इन 8.1.1

ठीक की गई समस्याएं
Dexer (D8)
Java 16 रिकॉर्ड: equals(null) से NullPointerException मिलता है
Shrinker (R8)
java.lang.VerifyError: Verifier rejected class
Apache POI लाइब्रेरी का इस्तेमाल करने पर, बिल्ड :minifyReleaseWithR8 पर अटक जाता है
r8 ऑप्टिमाइज़ेशन चालू होने पर, अनुरोध अस्वीकार करना
java.lang.reflect.Executable के लिए NoClassDefFoundError

Android Gradle प्लग इन 8.1.2

ठीक की गई समस्याएं
Android Gradle प्लग इन
androidResources, Android लाइब्रेरी मॉड्यूल में उपलब्ध नहीं है
[AGP 8.1.0] अगर splits.abi.isEnable और testOptions.unitTests.isIncludeAndroidResources, दोनों 'सही' पर सेट हैं, तो ./gradlew test "मेनिफ़ेस्ट आउटपुट नहीं मिला" के साथ फ़ेल हो जाता है
Shrinker (R8)
Kotlin 1.9 में, अगर शून्य जांच की सुविधा हटा दी जाती है, तो R8, Kotlin लैम्ब्डा को नष्ट कर देता है
play-services-measurement-21.3.0-runtime.jar के लिए, R8 "कंपाइल करते समय अमान्य वैल्यू मिली" गड़बड़ी के साथ काम नहीं करता

Android Gradle प्लग इन 8.1.3

ठीक की गई समस्याएं
Android Gradle प्लग इन
[AGP 8.1.0] अगर splits.abi.isEnable और testOptions.unitTests.isIncludeAndroidResources, दोनों 'सही' पर सेट हैं, तो ./gradlew test "मेनिफ़ेस्ट आउटपुट नहीं मिला" के साथ फ़ेल हो जाता है
AGP 8.1 पर अपडेट करने के बाद, बिल्ड न हो पाना

Android Gradle प्लग इन 8.1.4

ठीक की गई समस्याएं
Android Gradle प्लग इन
अगर सब-प्रोजेक्ट की क्लास, आर्टफ़ैक्ट ट्रांसफ़ॉर्म की मदद से पहले ही डेक्स हो चुकी हैं, तो उन पर डेक्स करने का टास्क न चलाएं