Android Gradle प्लग इन 8.0.0 (अप्रैल 2023)

'Android Gradle प्लग इन 8.0.0' एक मुख्य रिलीज़ है, जिसमें कई तरह के नए वर्शन शामिल हैं सुविधाओं और सुधारों के बारे में है.

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

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

पैच रिलीज़

'Android Gradle प्लग इन' के लिए पैच रिलीज़ की सूची नीचे दी गई है 8.0.

Android Gradle प्लग इन 8.0.2 (मई 2023)

एजीपी 8.0.2 में ठीक की गई गड़बड़ियों की सूची देखने के लिए, Android Studio 2022.2.1 में हो रही समस्याएं.

Android Gradle प्लग इन 8.0.1 (मई 2023)

इस छोटे अपडेट में ये गड़बड़ियां ठीक की गई हैं:

ठीक की गई समस्याएं
गड़बड़ी: "टेबल में दिए गए आईडी के साथ, Version ब्लॉग की कोई ज़रूरत नहीं है" AGP 7.2.2 अपग्रेड करने के बाद -> 7.4.0
MarkTypeAsLive AGP 7.4.1 पर R8 NullPointerexception
[R8 4.0.53] Android 11 पर हार्ड क्लास की पुष्टि नहीं हो सकी

ब्रेकिंग बदलाव: मॉड्यूल लेवल की बिल्ड स्क्रिप्ट में नेमस्पेस ज़रूरी है

इसके बजाय, आपको मॉड्यूल लेवल की build.gradle.kts फ़ाइल में नेमस्पेस सेट करना होगा से ज़्यादा होने चाहिए. namespace DSL प्रॉपर्टी का इस्तेमाल शुरू किया जा सकता है की शुरुआत एजीपी 7.3 से हुई है. इस बारे में ज़्यादा जानने के लिए, यह देखें नेमस्पेस सेट करें.

नेमस्पेस डीएसएल में माइग्रेट करते समय, इन समस्याओं के बारे में जानकारी रखें:

  • एजीपी के पिछले वर्शन में, मुख्य नेमस्पेस से टेस्ट नेमस्पेस का अनुमान लगाया जाता है या कुछ मामलों में गलत तरीके से भी ऐप्लिकेशन आईडी दर्ज करता है. AGP अपग्रेड असिस्टेंट, अगर इसे पता चलता है कि आपके प्रोजेक्ट का मुख्य नेमस्पेस और टेस्ट नेमस्पेस ये हैं एक जैसा. अगर अपग्रेड ब्लॉक किया गया है, तो आपको मैन्युअल तरीके से testNamespace को बदलना होगा और अपने सोर्स कोड में बदलाव करें.
  • टेस्ट नेमस्पेस बदलने के बाद, हो सकता है कि आपका कोड कंपाइल हो जाए लेकिन रनटाइम के दौरान, आपके इंस्ट्रुमेंटेड टेस्ट फ़ेल हो जाते हैं. ऐसा तब हो सकता है, जब आपके इंस्ट्रुमेंट्ड टेस्ट सोर्स कोड एक ऐसे संसाधन का रेफ़रंस देता है जो आपके दोनों में androidTest और ऐप्लिकेशन के सोर्स.

ज़्यादा जानकारी के लिए, यह देखें समस्या #191813691 टिप्पणी #19.

नुकसान पहुंचा सकने वाले बदलाव: विकल्प के लिए डिफ़ॉल्ट वैल्यू बनाएं

एजीपी 8.0 से शुरू करते हुए, इन फ़्लैग की डिफ़ॉल्ट वैल्यू बदलकर यह हो गई है बिल्ड की परफ़ॉर्मेंस को बेहतर बनाया जा सकता है. कुछ सुविधाओं का इस्तेमाल करने के लिए, अपने कोड को अडजस्ट करने में मदद पाने के लिए इन बदलावों के लिए, AGP Upgrade Assistant का इस्तेमाल करें (टूल > एजीपी अपग्रेड असिस्टेंट). Upgrade Assistant आपकी मदद करेगी नए व्यवहार के हिसाब से अपना कोड अपडेट करना या फ़्लैग करके सुरक्षा बढ़ाना पिछली कार्रवाई.

चिह्नित करें नई डिफ़ॉल्ट वैल्यू पिछली डिफ़ॉल्ट वैल्यू नोट
android.defaults.buildfeatures.buildconfig false true AGP 8.0, डिफ़ॉल्ट रूप से BuildConfig जनरेट नहीं करता. आपको इनकी ज़रूरत होगी का इस्तेमाल करें.
android.defaults.buildfeatures.aidl false true AGP 8.0, डिफ़ॉल्ट रूप से एआईडीएल सपोर्ट को चालू नहीं करता. आपको यह बताना होगा इस विकल्प का इस्तेमाल करके उन प्रोजेक्ट में DSL का इस्तेमाल किया जा सकता है जहां आपको इसकी ज़रूरत है. यह फ़्लैग है AGP के 9.0 वर्शन में हटाए जाने की योजना है.
android.defaults.buildfeatures.renderscript false true AGP 8.0 डिफ़ॉल्ट रूप से, RenderScript के साथ काम करने की सुविधा को चालू नहीं करता है. आपको ये काम करने होंगे इस विकल्प को उन प्रोजेक्ट में DSL का इस्तेमाल करके बताएं जहां आपको इसकी ज़रूरत है. यह AGP के वर्शन 9.0 से भी इस झंडे को हटाने की योजना है.
android.nonFinalResIds true false AGP 8.0, R क्लास जनरेट करता है. इन क्लास में, नॉन-फ़ाइनल फ़ील्ड शामिल नहीं होते हैं: डिफ़ॉल्ट.
android.nonTransitiveRClass true false AGP 8.0, इसमें बताए गए संसाधनों के लिए R क्लास जनरेट करता है की ज़रूरत नहीं है.
android.enableR8.fullMode true false AGP 8.0 पर, R8 के फ़ुल मोड को डिफ़ॉल्ट रूप से चालू किया जाता है. ज़्यादा जानकारी के लिए, यह देखें R8 फ़ुल मोड.

नुकसान पहुंचा सकने वाले बदलाव: बिल्ड के विकल्प की वैल्यू लागू की गईं

AGP 8.0 और इसके बाद के वर्शन में, अब आप इन फ़्लैग के लिए वैल्यू नहीं बदल सकते. अगर आपने तो आप उन्हें gradle.properties फ़ाइल में तय करते हैं, तो मान को अनदेखा कर दिया जाता है और एजीपी प्रिंट चेतावनियां.

चिह्नित करें लागू किया गया मान नोट
android.dependencyResolutionAtConfigurationTime.warn true अगर AGP 8.0 को कॉन्फ़िगरेशन रिज़ॉल्यूशन का पता चलता है, तो कॉन्फ़िगरेशन का चरण पूरा कर सकता है, क्योंकि यह Gradle कॉन्फ़िगरेशन पर बुरा असर डालता है बार.
android.r8.failOnMissingClasses true AGP 8.0 उस बिल्ड के लिए फ़ेल हो जाता है जो R8 का इस्तेमाल करता है. ऐसा तब होता है, जब कोई क्लास मौजूद नहीं होती है पक्का करें कि DEX ऑप्टिमाइज़ेशन बेहतर हो. इसे ठीक करने के लिए, आपको लाइब्रेरी मौजूद न हों या -dontwarn नियम बनाए रखें. ज़्यादा जानकारी के लिए, देखें R8 श्रिंकर में क्लास से जुड़ी चेतावनियां नहीं दिख रही हैं.
android.testConfig.useRelativePath true जब Android के संसाधनों, एसेट, और मेनिफ़ेस्ट को यूनिट टेस्ट की सुविधा चालू है, तो AGP 8.0 test_config.properties फ़ाइल जिसमें सिर्फ़ रिलेटिव पाथ. इससे यह पक्का होता है कि Android यूनिट टेस्ट हमेशा, Gradle का इस्तेमाल कर सकते हैं बिल्ड कैश मेमोरी.
android.useNewJarCreator true AGP, बेहतर बनाने के लिए JAR फ़ाइलें बनाते समय Zipflinger लाइब्रेरी का इस्तेमाल करता है परफ़ॉर्मेंस को बेहतर बनाना.
android.bundletool.includeRepositoriesInDependencyReport true एएबी और APKs में, SDK टूल की डिपेंडेंसी की जानकारी जोड़ने की सुविधा चालू होने पर, AGP 8.0 ने इस जानकारी में, प्रोजेक्ट स्टोर करने की जगहों की सूची भी जोड़ी है. यहां की यात्रा पर हूं ज़्यादा जानें, देखें Play Console पर निर्भरता की जानकारी.
android.enableArtProfiles true बेसलाइन प्रोफ़ाइल अब हमेशा जनरेट की जाती हैं. ज़्यादा जानकारी के लिए, बेसलाइन प्रोफ़ाइल देखें.
android.enableNewResourceShrinker true डिफ़ॉल्ट रूप से, नए रिसॉर्स शिंकर लागू करने का इस्तेमाल करें. नया रिसॉर्स श्रिंकर में डाइनैमिक सुविधाओं के लिए सहायता शामिल है.
android.enableSourceSetPathsMap true रिलेटिव रिसॉर्स पाथ मैपिंग की गिनती के लिए, इसका इस्तेमाल किया जाता है. इसलिए, Gradle बिल्ड वे ज़्यादा समय तक अप-टू-डेट होते हैं.
android.cacheCompileLibResources true लाइब्रेरी के कंपाइल किए गए संसाधन अब डिफ़ॉल्ट रूप से कैश मेमोरी में सेव किए जा सकते हैं, क्योंकि Gradle प्रोजेक्ट की जगह से संबंधित संसाधन फ़ाइलों को ट्रैक करता है. ज़रूरी है android.enableSourceSetPathsMap चालू करना होगा.
android.disableAutomaticComponentCreation true एजीपी 8.0, डिफ़ॉल्ट रूप से कोई सॉफ़्टवेयर कॉम्पोनेंट नहीं बनाता है. इसके बजाय, AGP इन्हें बनाता है सॉफ़्टवेयर कॉम्पोनेंट सिर्फ़ उन वैरिएंट के लिए जिन्हें पब्लिश करने के लिए कॉन्फ़िगर किया गया है पब्लिशिंग DSL का उपयोग करके.

एक्ज़ीक्यूशन प्रोफ़ाइल के लिए नया स्टेबल फ़्लैग

एजीपी में नया झंडे android.settings.executionProfile शामिल है. इस फ़्लैग का इस्तेमाल इन कामों के लिए करें यह नीति SettingsExtension. ज़्यादा जानने के लिए, सेटिंग प्लगिन से जुड़ा दस्तावेज़ देखें.

एक्सपेरिमेंटल फ़्लैग की झलक देखने के लिए, रिलीज़ नोट की झलक देखें.

Kotlin लेज़ी प्रॉपर्टी असाइनमेंट काम नहीं करता है

अगर बिल्ड स्क्रिप्ट के लिए Gradle का Kotlin DSL इस्तेमाल किया जा रहा है, तो ध्यान रखें कि Android Studio और AGP 8.0, = ऑपरेटर. इस सुविधा के बारे में ज़्यादा जानकारी के लिए, देखें प्रॉडक्ट की जानकारी और दस्तावेज़.

बिल्ड ऐनालाइज़र टास्क की कैटगरी

Android Studio फ़्लमिंगो में शुरुआत की जा रही है. बिल्ड ऐनालाइज़र में इनके लिए एक नया डिफ़ॉल्ट व्यू जोड़ा गया है बिल्ड की अवधि पर असर डालने वाले टास्क हैं. अगर आपका प्रोजेक्ट AGP 8.0 या इसके बाद के वर्शन का इस्तेमाल करता है, बिल्ड को अलग-अलग दिखाने के बजाय, बिल्ड ऐनालाइज़र उन्हें टास्क के हिसाब से ग्रुप में बांटता है श्रेणी. उदाहरण के लिए, Android रिसॉर्स, Kotlin या Dexing से जुड़े टास्क इन्हें एक ग्रुप में रखा जाता है और फिर इन्हें बिल्ड की अवधि के हिसाब से क्रम में लगाया जाता है. इससे ये चीज़ें आसान हो जाती हैं यह जानें कि बिल्ड के समय पर किस कैटगरी का सबसे ज़्यादा असर पड़ता है. हर कैटगरी को बड़ा किया जा रहा है संबंधित टास्क की सूची दिखाता है. टास्क को अलग-अलग दिखाने के लिए, बिना ग्रुप किए, इसके हिसाब से ग्रुप करें ड्रॉप-डाउन का इस्तेमाल करें.

ऐनालाइज़र टास्क की कैटगरी बनाएं.

नया सेटिंग प्लगिन

AGP 8.0.0-alpha09 में नया सेटिंग प्लगिन उपलब्ध है. सेटिंग प्लगिन, ग्लोबल कॉन्फ़िगरेशन को एक ही जगह से मैनेज करता है. कॉन्फ़िगरेशन, जो सभी मॉड्यूल पर लागू होते हैं एक ही जगह पर, कॉन्फ़िगरेशन को कॉपी करके चिपकाने की ज़रूरत नहीं पड़ेगी मॉड्यूल देखें. इसके अलावा, टूल बनाने के लिए सेटिंग प्लगिन का इस्तेमाल किया जा सकता है एक्ज़िक्यूशन प्रोफ़ाइल या किसी टूल को चलाने के तरीके के बारे में अलग-अलग निर्देश, और उसके बीच स्विच कर सकता है.

सेटिंग प्लगिन का इस्तेमाल करने के लिए, settings.gradle फ़ाइल में प्लगिन लागू करें:

apply plugin 'com.android.settings'

ग्लोबल कॉन्फ़िगरेशन को एक ही जगह से मैनेज करें

ग्लोबल कॉन्फ़िगरेशन को कॉन्फ़िगर करने के लिए, यहां नए android ब्लॉक का इस्तेमाल करें: settings.gradle फ़ाइल. यहां एक उदाहरण दिया गया है:

android {
  compileSdk 31
  minSdk 28
  ...
}

टूल का इस्तेमाल करने की प्रोफ़ाइल

सेटिंग प्लगिन की मदद से, कुछ टूल के लिए एक्ज़ीक्यूशन प्रोफ़ाइल भी बनाई जा सकती हैं. अगर आप एक्ज़ीक्यूशन प्रोफ़ाइल से यह तय होता है कि टूल कैसे चलाया जाता है; तो अलग-अलग एक्ज़ीक्यूशन प्रोफ़ाइल बनाई जा सकती हैं. एक्ज़ीक्यूशन प्रोफ़ाइल में, आपको किसी टूल के लिए JVM आर्ग्युमेंट सेट कर सकता है और उसे अलग प्रोसेस में चलाने के लिए कॉन्फ़िगर कर सकता है. फ़िलहाल, सिर्फ़ R8 टूल काम करता है.

एक्ज़ीक्यूशन प्रोफ़ाइल बनाएं और settings.gradle फ़ाइल, जैसा कि इस उदाहरण में दिखाया गया है:

android {
  execution {
    profiles {
      high {
        r8 {
          jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      low {
        r8 {
          jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      ci {
        r8.runInSeparateProcess false
      }
    }
    defaultProfile "low"
  }
}

डिफ़ॉल्ट प्रोफ़ाइल को ओवरराइड करने के लिए, android.experimental.settings.executionProfile प्रॉपर्टी gradle.properties फ़ाइल:

android.experimental.settings.executionProfile=high

इस प्रॉपर्टी को कमांड लाइन का इस्तेमाल करके भी सेट किया जा सकता है. इससे आपको अलग-अलग वर्कफ़्लो को मैनेज किया जा सकता है. उदाहरण के लिए, अगर आपका इंटिग्रेशन लगातार चलता रहता है तो आप बिना कमांड लाइन का इस्तेमाल करके, एक्ज़ीक्यूशन प्रोफ़ाइल बदल सकते हैं. settings.gradle फ़ाइल बदलें:

./gradlew assembleRelease \
  -Pandroid.experimental.settings.executionProfile=ci

AGP 8.0 चलाने के लिए JDK 17 की ज़रूरत है

अपना ऐप्लिकेशन बनाने के लिए, Android Gradle प्लग इन 8.0 का इस्तेमाल करते समय, अब JDK 17 की ज़रूरत होती है Gradle चलाने के लिए. Android Studio के फ़्लमिंगो में, JDK 17 को बंडल किया जाता है और Gradle को कॉन्फ़िगर किया जाता है इसे डिफ़ॉल्ट रूप से इस्तेमाल किया जा सकता है. इसका मतलब है कि Android Studio के ज़्यादातर उपयोगकर्ताओं को उनके प्रोजेक्ट के कॉन्फ़िगरेशन में कोई बदलाव होता है.

अगर आपको मैन्युअल तरीके से JDK वर्शन सेट करना है, तो का इस्तेमाल करता है, तो आपको JDK 17 या उसके बाद के वर्शन का इस्तेमाल करना होगा.

Android Studio के बिना AGP का इस्तेमाल करते समय, JDK वर्शन को इस तारीख तक अपग्रेड करें JAVA_HOME सेट कर रही हूँ एनवायरमेंट वैरिएबल या -Dorg.gradle.java.home कमांड-लाइन का विकल्प को आपकी JDK 17 इंस्टॉलेशन डायरेक्ट्री में सेव करना होगा.