Android Gradle प्लगिन 3.1.0 (मार्च 2018)

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

सबसे पुराना वर्शन डिफ़ॉल्ट वर्शन नोट
ग्रेडल 4.4 4.4 ज़्यादा जानकारी के लिए, Gradle को अपडेट करने का तरीका देखें.
एसडीके बिल्ड टूल 27.0.3 27.0.3 इंस्टॉल करें या कॉन्फ़िगर करें एसडीके बिल्ड टूल. ध्यान रखें कि अब आपको android.buildToolsVersion प्रॉपर्टी का इस्तेमाल करके, बिल्ड टूल के लिए कोई वर्शन तय करने की ज़रूरत नहीं है. प्लगिन, डिफ़ॉल्ट रूप से ज़रूरी सबसे पुराने वर्शन का इस्तेमाल करता है.

नया DEX कंपाइलर, D8

Android Studio अब डिफ़ॉल्ट रूप से, D8 नाम के नए DEX कंपाइलर का इस्तेमाल करता है. DEX कंपाइलेशन, .class बाइटकोड को .dex बाइटकोड में बदलने की प्रोसेस है. यह Android Runtime (या Android के पुराने वर्शन के लिए Dalvik) के लिए है. DX नाम के पिछले कंपाइलर की तुलना में, D8 तेज़ी से कंपाइल करता है और छोटी DEX फ़ाइलें आउटपुट करता है. साथ ही, यह ऐप्लिकेशन के रनटाइम की परफ़ॉर्मेंस को बेहतर बनाता है.

D8 से, ऐप्लिकेशन डेवलपमेंट के आपके रोज़ाना के वर्कफ़्लो में कोई बदलाव नहीं होना चाहिए. हालांकि, अगर आपको नए कंपाइलर से जुड़ी कोई समस्या आती है, तो कृपया गड़बड़ी की शिकायत करें. अपने प्रोजेक्ट की gradle.properties फ़ाइल में, यह कोड शामिल करके, D8 को अस्थायी तौर पर बंद किया जा सकता है और DX का इस्तेमाल किया जा सकता है:

      android.enableD8=false
    

Java 8 की भाषा की सुविधाओं का इस्तेमाल करने वाले प्रोजेक्ट के लिए, डिफ़ॉल्ट रूप से, इंक्रीमेंटल डेसुगरिंग की सुविधा चालू होती है. अपने प्रोजेक्ट की gradle.properties फ़ाइल में यह कोड शामिल करके, इसे बंद किया जा सकता है:

      android.enableIncrementalDesugaring=false.
    

प्रीव्यू इस्तेमाल करने वाले लोग: अगर आपने D8 का प्रीव्यू वर्शन इस्तेमाल किया है, तो ध्यान दें कि अब यह एसडीके बिल्ड टूल में शामिल लाइब्रेरी के हिसाब से कंपाइल होता है. यह JDK के हिसाब से कंपाइल नहीं होता. इसलिए, अगर आप उन एपीआई को ऐक्सेस कर रहे हैं जो JDK में मौजूद हैं, लेकिन एसडीके बिल्ड टूल की लाइब्रेरी में नहीं हैं, तो आपको कंपाइल करने में गड़बड़ी मिलेगी.

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

  • अलग-अलग एबीआई को टारगेट करने वाले कई APK बनाने पर, अब डिफ़ॉल्ट रूप से इन एबीआई के लिए APK जनरेट नहीं करता: mips, mips64, और armeabi.

    अगर आपको इन एबीआई को टारगेट करने वाले APK बनाने हैं, तो आपको NDK r16b या इससे पहले का वर्शन इस्तेमाल करना होगा. साथ ही, अपनी build.gradle फ़ाइल में एबीआई तय करने होंगे. इसके लिए, यहां दिया गया तरीका अपनाएं:

              splits {
                  abi {
                      include 'armeabi', 'mips', 'mips64'
                      ...
                  }
              }
            
              splits {
                  abi {
                      include("armeabi", "mips", "mips64")
                      ...
                  }
              }
            
  • Android प्लगिन का बिल्ड कैश अब 30 दिनों से ज़्यादा पुराने कैश एंट्री को हटा देता है.

  • "auto" को resConfig में पास करने पर, अब आपके APK में पैकेज करने के लिए स्ट्रिंग संसाधन अपने-आप नहीं चुने जाते. अगर आपने "auto" का इस्तेमाल जारी रखा, तो प्लगिन आपके ऐप्लिकेशन और उसकी डिपेंडेंसी से मिलने वाले सभी स्ट्रिंग संसाधनों को पैकेज करेगा. इसलिए, आपको हर वह स्थानीय भाषा तय करनी चाहिए जिसे प्लगिन को आपके APK में पैकेज करना है.

  • स्थानीय मॉड्यूल, आपके ऐप्लिकेशन के टेस्ट APK पर निर्भर नहीं हो सकते. इसलिए, androidTestApi कॉन्फ़िगरेशन का इस्तेमाल करके, इंस्ट्रूमेंटेड टेस्ट में डिपेंडेंसी जोड़ने पर, androidTestImplementation के बजाय, Gradle यह चेतावनी जारी करता है:

            WARNING: Configuration 'androidTestApi' is obsolete
            and has been replaced with 'androidTestImplementation'
            
            WARNING: Configuration 'androidTestApi' is obsolete
            and has been replaced with 'androidTestImplementation'
            

समाधान

  • हमने उस समस्या को ठीक कर दिया है जिसमें Android Studio, कंपोज़िट बिल्ड में डिपेंडेंसी को सही तरीके से नहीं पहचान पाता था.
  • हमने उस समस्या को ठीक कर दिया है जिसमें एक ही बिल्ड में Android प्लगिन को कई बार लोड करने पर, आपको प्रोजेक्ट सिंक करने में गड़बड़ी मिलती थी. उदाहरण के लिए, जब कई सबप्रोजेक्ट में से हर एक में, Android प्लगिन को अपने बिल्डस्क्रिप्ट क्लासपाथ में शामिल किया जाता है.