Android Gradle प्लगिन 3.4.0 (अप्रैल 2019)

Android प्लगिन के इस वर्शन के लिए, ये ज़रूरी शर्तें पूरी होनी चाहिए:

सबसे पुराना वर्शन डिफ़ॉल्ट वर्शन नोट
ग्रेडल 5.1.1 5.1.1 ज़्यादा जानकारी के लिए, Gradle को अपडेट करने का तरीका देखें. Gradle 5.0 और इसके बाद के वर्शन का इस्तेमाल करने पर, Gradle डेमॉन मेमोरी हीप का डिफ़ॉल्ट साइज़ 1 जीबी से घटकर 512 एमबी हो जाता है. इससे, बिल्ड की परफ़ॉर्मेंस में गिरावट आ सकती है. इस डिफ़ॉल्ट सेटिंग को बदलने के लिए, अपने प्रोजेक्ट की gradle.properties फ़ाइल में Gradle डेमॉन हीप का साइज़ तय करें.
एसडीके बिल्ड टूल 28.0.3 28.0.3 इंस्टॉल करें या कॉन्फ़िगर करें एसडीके बिल्ड टूल.

3.4.3 (जुलाई 2020)

इस छोटे अपडेट में, Android 11 में पैकेज की जानकारी देखने से जुड़ी नई डिफ़ॉल्ट सेटिंग और सुविधाओं के साथ काम करने के लिए सपोर्ट जोड़ा गया है.

ज़्यादा जानकारी के लिए, 4.0.1 के रिलीज़ नोट देखें.

3.4.2 (जुलाई 2019)

इस छोटे अपडेट में, Android Studio 3.4.2 के लिए सपोर्ट जोड़ा गया है. साथ ही, इसमें कई गड़बड़ियां ठीक की गई हैं और परफ़ॉर्मेंस में सुधार किया गया है. जिन अहम गड़बड़ियों को ठीक किया गया है उनकी सूची देखने के लिए, रिलीज़ अपडेट ब्लॉग पर इससे जुड़ी पोस्ट पढ़ें.

3.4.1 (मई 2019)

इस छोटे अपडेट में, Android Studio 3.4.1 के लिए सपोर्ट जोड़ा गया है. साथ ही, इसमें कई गड़बड़ियां ठीक की गई हैं और परफ़ॉर्मेंस में सुधार किया गया है. जिन अहम गड़बड़ियों को ठीक किया गया है उनकी सूची देखने के लिए, रिलीज़ अपडेट ब्लॉग पर इससे जुड़ी पोस्ट पढ़ें.

नई सुविधाएं

  • लिंट चेक डिपेंडेंसी के नए कॉन्फ़िगरेशन: `lintChecks` के काम करने के तरीके में बदलाव किया गया है. साथ ही, डिपेंडेंसी का नया कॉन्फ़िगरेशन, lintPublish जोड़ा गया है. इससे, आपको यह तय करने का ज़्यादा कंट्रोल मिलता है कि आपकी Android लाइब्रेरी में कौनसे लिंट चेक पैकेज किए जाएं.lintChecks

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

    यहां दिए गए कोड सैंपल में, स्थानीय Android लाइब्रेरी प्रोजेक्ट में डिपेंडेंसी के दोनों कॉन्फ़िगरेशन का इस्तेमाल किया गया है.

    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks project(':lint')
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish project(':lintpublish')
    }
            
    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks(project(":lint"))
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish(project(":lintpublish"))
        }
            
    • आम तौर पर, पैकेजिंग और साइन करने के टास्क में, बिल्ड स्पीड में कुल मिलाकर सुधार होना चाहिए. अगर आपको इन टास्क से जुड़ी परफ़ॉर्मेंस में गिरावट दिखती है, तो कृपया गड़बड़ी की शिकायत करें.

व्यवहार में बदलाव

नीचे दी गई इमेज में, R8 को जोड़े जाने से पहले, कंपाइल करने की प्रोसेस की खास जानकारी दी गई है.

R8 से पहले, ProGuard, dexing और desugaring से अलग कंपाइल करने का चरण था.

अब R8 की मदद से, डिसुगरिंग, श्रिंक करने, ऑफ़स्केट करने, ऑप्टिमाइज़ करने, और डेक्सिंग (D8) की प्रोसेस एक ही चरण में पूरी की जाती है. इसके लिए, नीचे दी गई इमेज देखें.

R8 की मदद से, एक ही कंपाइल स्टेप में डिसुगरिंग, श्रिंकिंग, ऑबफ़स्केटिंग, ऑप्टिमाइज़िंग, और डेक्सिंग की जाती है.

ध्यान रखें कि R8 को आपके मौजूदा ProGuard नियमों के साथ काम करने के लिए डिज़ाइन किया गया है. इसलिए, R8 का फ़ायदा पाने के लिए, आपको शायद कोई कार्रवाई न करनी पड़े. हालांकि, यह ProGuard से अलग टेक्नोलॉजी है. इसे खास तौर पर Android प्रोजेक्ट के लिए डिज़ाइन किया गया है. इसलिए, श्रिंक करने और ऑप्टिमाइज़ करने की प्रोसेस में, ऐसा कोड हटाया जा सकता है जिसे ProGuard ने न हटाया हो. इसलिए, इस तरह की स्थिति में, आपको बिल्ड आउटपुट में उस कोड को बनाए रखने के लिए, अतिरिक्त नियम जोड़ने पड़ सकते हैं.

अगर आपको R8 का इस्तेमाल करने में समस्याएं आ रही हैं, तो R8 की सुसंगतता से जुड़े अक्सर पूछे जाने वाले सवाल पढ़ें. इससे आपको यह पता चलेगा कि आपकी समस्या का कोई समाधान है या नहीं. अगर किसी समाधान के बारे में जानकारी नहीं दी गई है, कृपया गड़बड़ी की शिकायत करें. R8 को बंद करने के लिए, अपने प्रोजेक्ट की gradle.properties फ़ाइल में इनमें से कोई एक लाइन जोड़ें:

      # Disables R8 for Android Library modules only.
      android.enableR8.libraries = false
      # Disables R8 for all modules.
      android.enableR8 = false
      
    

ध्यान दें: किसी खास बिल्ड टाइप के लिए, अगर आपने अपने ऐप्लिकेशन मॉड्यूल की build.gradle फ़ाइल में useProguard को false पर सेट किया है, तो Android Gradle प्लगिन, उस बिल्ड टाइप के लिए आपके ऐप्लिकेशन के कोड को श्रिंक करने के लिए R8 का इस्तेमाल करेगा. भले ही, आपने अपने प्रोजेक्ट की gradle.properties फ़ाइल में R8 को बंद किया हो.

पहले से मालूम समस्याएं

  • फ़िलहाल, यूनीक पैकेज के नामों के सही इस्तेमाल को लागू नहीं किया जाता हालांकि, प्लगिन के बाद के वर्शन में इसे ज़्यादा सख्ती से लागू किया जाएगा. Android Gradle प्लगिन के वर्शन 3.4.0 में, यह देखने के लिए ऑप्ट-इन किया जा सकता है कि आपके प्रोजेक्ट में स्वीकार किए जा सकने वाले पैकेज के नाम तय किए गए हैं या नहीं. इसके लिए, अपनी gradle.properties फ़ाइल में यह लाइन जोड़ें.

              android.uniquePackageNames = true
              
            

    Android Gradle प्लगिन की मदद से पैकेज का नाम सेट करने के बारे में ज़्यादा जानने के लिए, ऐप्लिकेशन आईडी सेट करना लेख पढ़ें.