الإصدار 2.2.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android (أيلول (سبتمبر) 2016)

التبعيات:
جديد:
  • يستخدم Gradle 2.14.1، الذي يتضمّن تحسينات في الأداء وميزات جديدة، ويصلح ثغرة أمنية تسمح بتصعيد الامتيازات المحلية عند استخدام البرنامج الخفي Gradle. لمزيد من التفاصيل، راجِع ملاحظات إصدار Gradle.
  • باستخدام externalNativeBuild {} DSL، يتيح لك Gradle الآن الربط بمصادرك الأصلية وتجميع المكتبات الأصلية باستخدام CMake أو ndk-build. بعد إنشاء مكتباتك الأصلية، تدمجها Gradle في حزمة APK. لمعرفة المزيد من المعلومات حول استخدام CMake وndk-build مع Gradle، يمكنك قراءة مقالة إضافة رمز C وC++ إلى مشروعك.
  • عند تشغيل إصدار من سطر الأوامر، يحاول Gradle الآن التنزيل التلقائي لأي مكوّنات أو تحديثات غير متوفّرة من حزمة SDK يعتمد عليها مشروعك. لمزيد من المعلومات، اطّلِع على مقالة التنزيل التلقائي للحِزم المفقودة باستخدام Gradle.
  • توفّر ميزة التخزين المؤقت التجريبية الجديدة لنظام Gradle المستخدم تسريع وقت الإنشاء من خلال تنقيح إصدارات مكتباتك مسبقًا وتخزينها وإعادة استخدامها. للاطّلاع على مزيد من المعلومات حول استخدام هذه الميزة التجريبية، يمكنك الاطّلاع على دليل إنشاء ذاكرة تخزين مؤقت.
  • يساعد هذا في تحسين أداء الإصدار من خلال اعتماد مسار تغليف تلقائي جديد للحزمة يعالج الضغط والتوقيع ومحاذاة الضغط في مهمة واحدة. يمكنك العودة إلى استخدام أدوات التغليف القديمة من خلال إضافة android.useOldPackaging=true إلى ملف gradle.properties. أثناء استخدام أداة إنشاء التغليف الجديدة، لا تتوفّر مهمة zipalignDebug. مع ذلك، يمكنك إنشاء حساب بنفسك من خلال طلب الطريقة createZipAlignTask(String taskName, File inputFile, File outputFile).
  • يستخدم توقيع APK الآن الإصدار 2 من نظام توقيع APK بالإضافة إلى توقيع JAR التقليدي. تقبل جميع أنظمة Android الأساسية حِزم APK الناتجة. ويؤدي أي تعديل في حِزم APK هذه بعد توقيعها إلى إبطال صلاحية توقيعات الإصدار 2 من هذه التوقيعات ومنع التثبيت على الجهاز. لإيقاف هذه الميزة، أضِف ما يلي إلى ملف build.gradle على مستوى الوحدة:

    رائع

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

    Kotlin

    android {
      ...
      signingConfigs {
        create("config") {
          ...
          v2SigningEnabled = false
        }
      }
    }
          
  • بالنسبة إلى الإصدارات المتعددة اللغات، يمكنك الآن استخدام قواعد ProGuard لتحديد الفئات التي يجب أن يتم تجميعها في Gradle ضمن ملف DEX الرئيسي لتطبيقك. بما أنّ نظام Android يحمّل ملف DEX الرئيسي أولاً عند بدء تشغيل التطبيق، يمكنك منح الأولوية لفئات معيّنة عند بدء التشغيل من خلال تجميعها في ملف DEX الرئيسي. بعد إنشاء ملف إعداد ProGuard خصيصًا لملف DEX الرئيسي، أدخِل مسار ملف الإعداد إلى Gradle باستخدام buildTypes.multiDexKeepProguard. يختلف استخدام DSL هذا عن استخدام buildTypes.proguardFiles الذي يوفّر قواعد ProGuard عامة لتطبيقك ولا يحدّد فئات لملف DEX الرئيسي.
  • تتوافق مع العلامة android:extractNativeLibs التي يمكن أن تقلّل حجم التطبيق عند تثبيته على الجهاز. عند ضبط هذه العلامة على false في العنصر <application> في بيان التطبيق، فإنّ حزم Gradle غير المضغوطة والمتوافقة من مكتباتك الأصلية مع حزمة APK الخاصة بك. ويؤدي هذا الإجراء إلى منع PackageManager من نسخ مكتباتك الأصلية من حزمة APK إلى نظام الملفات على الجهاز أثناء التثبيت، كما أن له فائدة إضافية تتمثل في تصغير حجم تحديثات دلتا لتطبيقك.
  • يمكنك الآن تحديد السمتَين versionNameSuffix و applicationIdSuffix لنكهات المنتجات. (المشكلة 59614)
التغييرات:
  • يعرض getDefaultProguardFile الآن ملفات ProGuard التلقائية التي يوفّرها مكوّن Android الإضافي لتطبيق Gradle ولم يعُد يستخدم الملفات المتوفّرة في حزمة تطوير البرامج (SDK) لنظام التشغيل Android.
  • تم تحسين أداء برنامج تجميع Jack وميزاته:
    • يتيح جاك الآن تغطية اختبار Jacoco عند ضبط testCoverageEnabled على true.
    • دعم محسّن لمعالجات التعليقات التوضيحية يتم تطبيق معالِجات التعليقات التوضيحية في مسار الفئة، مثل أي تبعيات compile، تلقائيًا على إصدارك. يمكنك أيضًا تحديد معالج للتعليقات التوضيحية في وسيطات التصميم وتمرير البيانات باستخدام javaCompileOptions.annotationProcessorOptions {} DSL في ملف build.gradle على مستوى الوحدة:

      رائع

      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:

      رائع

      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