Android Gradle प्लग इन 2.2.0 (सितंबर 2016)

डिपेंडेंसी:
कम से कम वर्शन डिफ़ॉल्ट वर्शन नोट
Gradle 2.14.1 2.14.1 ज़्यादा जानने के लिए, Gradle को अपडेट करना लेख पढ़ें.
SDK टूल के लिए बिल्ड टूल 23.0.2 23.0.2 SDK Build Tools को इंस्टॉल या कॉन्फ़िगर करें.
नया:
  • इसमें Gradle 2.14.1 का इस्तेमाल किया गया है. इसमें परफ़ॉर्मेंस में सुधार और नई सुविधाएं शामिल हैं. साथ ही, इसमें सुरक्षा से जुड़ी एक ऐसी समस्या को ठीक किया गया है जिसकी वजह से Gradle डेमन का इस्तेमाल करते समय, स्थानीय विशेषाधिकार बढ़ाए जा सकते हैं. ज़्यादा जानकारी के लिए, Gradle के रिलीज़ नोट देखें.
  • externalNativeBuild {} डीएसएल का इस्तेमाल करके, Gradle अब आपको अपने नेटिव सोर्स से लिंक करने और CMake या ndk-build का इस्तेमाल करके नेटिव लाइब्रेरी को कंपाइल करने की सुविधा देता है. नेटिव लाइब्रेरी बनाने के बाद, Gradle उन्हें आपके APK में पैकेज करता है. Gradle के साथ CMake और ndk-build का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, अपने प्रोजेक्ट में C और C++ कोड जोड़ना लेख पढ़ें.
  • कमांड लाइन से कोई प्रोजेक्ट बनाते समय, Gradle अब उन सभी SDK कॉम्पोनेंट या अपडेट को अपने-आप डाउनलोड करने की कोशिश करता है जिन पर आपका प्रोजेक्ट निर्भर करता है. ज़्यादा जानने के लिए, Gradle की मदद से, मौजूद न होने वाले पैकेज अपने-आप डाउनलोड होने की सुविधा लेख पढ़ें.
  • कैश मेमोरी का इस्तेमाल करने की नई सुविधा, एक्सपेरिमेंट के तौर पर उपलब्ध है. इसकी मदद से, Gradle आपकी लाइब्रेरी के पहले से डीकंपाइल किए गए वर्शन को पहले से डीकंपाइल करके, स्टोर करके, और फिर से इस्तेमाल करके, ऐप्लिकेशन बनाने में लगने वाले समय को कम करता है. एक्सपेरिमेंट के तौर पर उपलब्ध इस सुविधा का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, कैश मेमोरी बनाएं गाइड पढ़ें.
  • पैकेजिंग के लिए नई डिफ़ॉल्ट पाइपलाइन का इस्तेमाल करके, बिल्ड की परफ़ॉर्मेंस को बेहतर बनाता है. यह पाइपलाइन, एक ही टास्क में ज़िप करने, हस्ताक्षर करने, और zipalign करने की प्रोसेस को मैनेज करती है. अपनी gradle.properties फ़ाइल में android.useOldPackaging=true जोड़कर, पैकेजिंग के पुराने टूल का इस्तेमाल फिर से शुरू किया जा सकता है. पैकेजिंग के नए टूल का इस्तेमाल करते समय, zipalignDebug टास्क उपलब्ध नहीं होता. हालांकि, createZipAlignTask(String taskName, File inputFile, File outputFile) तरीके को कॉल करके, खुद ही एक क्वेरी बनाई जा सकती है.
  • APK साइनिंग की सुविधा अब, पारंपरिक JAR साइनिंग के साथ-साथ APK सिग्नेचर स्कीम v2 का इस्तेमाल करती है. इस प्रोसेस के बाद, सभी Android प्लैटफ़ॉर्म पर APK इस्तेमाल किए जा सकते हैं. साइन करने के बाद, इन APK में कोई भी बदलाव करने पर, उनके v2 साइन इन अमान्य हो जाते हैं. साथ ही, उन्हें किसी डिवाइस पर इंस्टॉल नहीं किया जा सकता. इस सुविधा को बंद करने के लिए, अपने मॉड्यूल-लेवल की build.gradle फ़ाइल में ये चीज़ें जोड़ें:

    Groovy

    android {
      ...
      signingConfigs {
        config {
          ...
          v2SigningEnabled false
        }
      }
    }
          

    Kotlin

    android {
      ...
      signingConfigs {
        create("config") {
          ...
          v2SigningEnabled = false
        }
      }
    }
          
  • मल्टीडेक्स बिल्ड के लिए, अब ProGuard के नियमों का इस्तेमाल करके यह तय किया जा सकता है कि Gradle को आपके ऐप्लिकेशन की मुख्य DEX फ़ाइल में कौनसी क्लास को कंपाइल करना चाहिए. ऐप्लिकेशन शुरू करने पर, Android सिस्टम सबसे पहले मुख्य DEX फ़ाइल को लोड करता है. इसलिए, मुख्य DEX फ़ाइल में कुछ क्लास को कंपाइल करके, स्टार्टअप के समय उन्हें प्राथमिकता दी जा सकती है. खास तौर पर अपनी मुख्य DEX फ़ाइल के लिए ProGuard कॉन्फ़िगरेशन फ़ाइल बनाने के बाद, buildTypes.multiDexKeepProguard का इस्तेमाल करके कॉन्फ़िगरेशन फ़ाइल का पाथ, Gradle को पास करें. इस डीएसएल का इस्तेमाल करना, buildTypes.proguardFiles का इस्तेमाल करने से अलग है. buildTypes.proguardFiles, आपके ऐप्लिकेशन के लिए ProGuard के सामान्य नियमों को लागू करता है. साथ ही, यह मुख्य DEX फ़ाइल के लिए क्लास की जानकारी नहीं देता.
  • android:extractNativeLibs फ़्लैग के लिए सहायता जोड़ता है, जिससे किसी डिवाइस पर ऐप्लिकेशन इंस्टॉल करने पर, ऐप्लिकेशन का साइज़ कम हो सकता है. जब इस फ़्लैग को अपने ऐप्लिकेशन मेनिफ़ेस्ट के <application> एलिमेंट में false पर सेट किया जाता है, तो Gradle आपके APK के साथ, आपकी नेटिव लाइब्रेरी के बिना कंप्रेस किए गए और अलाइन किए गए वर्शन पैकेज करता है. इससे, PackageManager को इंस्टॉलेशन के दौरान, आपकी नेटिव लाइब्रेरी को APK से डिवाइस के फ़ाइल सिस्टम में कॉपी करने से रोका जा सकता है. साथ ही, इससे आपके ऐप्लिकेशन के डेल्टा अपडेट को छोटा करने का अतिरिक्त फ़ायदा भी मिलता है.
  • अब प्रॉडक्ट के फ़्लेवर के लिए, versionNameSuffix और applicationIdSuffix का इस्तेमाल किया जा सकता है. (समस्या 59614)
बदलाव:
  • getDefaultProguardFile अब डिफ़ॉल्ट ProGuard फ़ाइलें दिखाता है, जो Gradle के लिए Android प्लग इन उपलब्ध कराता है. साथ ही, अब Android SDK में मौजूद फ़ाइलों का इस्तेमाल नहीं करता.
  • Jack कंपाइलर की परफ़ॉर्मेंस और सुविधाओं को बेहतर बनाया गया:
    • Jack अब testCoverageEnabled को true पर सेट करते समय, Jacoco टेस्ट कवरेज के साथ काम करता है.
    • एनोटेशन प्रोसेसर के लिए बेहतर सहायता. आपके क्लासपथ पर मौजूद एनोटेशन प्रोसेसर, जैसे कि compile डिपेंडेंसी, आपके बिल्ड पर अपने-आप लागू हो जाते हैं. आपके पास अपने बिल्ड में एनोटेशन प्रोसेसर तय करने और अपने मॉड्यूल-लेवल build.gradle फ़ाइल में javaCompileOptions.annotationProcessorOptions {} डीएसएल का इस्तेमाल करके, आर्ग्युमेंट पास करने का विकल्प भी है:

      Groovy

      android {
        ...
        defaultConfig {
          ...
          javaCompileOptions {
            annotationProcessorOptions {
              className 'com.example.MyProcessor'
              // Arguments are optional.
              arguments = [ foo : 'bar' ]
            }
          }
        }
      }
          

      Kotlin

      android {
        ...
        defaultConfig {
          ...
          javaCompileOptions {
            annotationProcessorOptions {
              className = "com.example.MyProcessor"
              // Arguments are optional.
              arguments(mapOf(foo to "bar"))
            }
          }
        }
      }
          

      अगर आपको संकलन के समय एनोटेशन प्रोसेसर को लागू करना है, लेकिन उसे अपने APK में शामिल नहीं करना है, तो annotationProcessor डिपेंडेंसी स्कोप का इस्तेमाल करें:

      Groovy

      dependencies {
          compile 'com.google.dagger:dagger:2.0'
          annotationProcessor 'com.google.dagger:dagger-compiler:2.0'
         // or use buildVariantAnnotationProcessor to target a specific build variant
      }
          

      Kotlin

      dependencies {
          implementation("com.google.dagger:dagger:2.0")
          annotationProcessor("com.google.dagger:dagger-compiler:2.0")
         // or use buildVariantAnnotationProcessor to target a specific build variant
      }
          
    • सेट किए जा सकने वाले पैरामीटर की सूची के लिए, कमांड लाइन से यह कमांड चलाएं:

      java -jar /build-tools/jack.jar --help-properties
      

    • डिफ़ॉल्ट रूप से, अगर Gradle डेमन का हेप साइज़ कम से कम 1.5 जीबी है, तो Jack अब Gradle की उसी प्रोसेस में चलता है. डेमन हेप का साइज़ अडजस्ट करने के लिए, अपनी gradle.properties फ़ाइल में ये चीज़ें जोड़ें:

      # This sets the daemon heap size to 1.5GB.
      org.gradle.jvmargs=-Xmx1536M