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

التبعيات:
الحد الأدنى للإصدار الإصدار التلقائي ملاحظات
Gradle 2.14.1 2.14.1 لمزيد من المعلومات، يُرجى الاطّلاع على مقالة تحديث Gradle.
أدوات إنشاء حِزم SDK 23.0.2 23.0.2 ثبِّت أو اضبط أدوات إنشاء حِزم SDK.
جديد:
  • يستخدم Gradle 2.14.1 الذي يتضمّن تحسينات في الأداء وميزات جديدة، ويصلح ثغرة أمنية تسمح بتصعيد الأذونات المحلية عند استخدام برنامج Gradle الخفي. لمزيد من التفاصيل، يُرجى الاطّلاع على ملاحظات إصدار Gradle.
  • باستخدام لغة برمجة externalNativeBuild {}، يتيح لك Gradle الآن الربط بمصادرك الأصلية وتجميع المكتبات الأصلية باستخدام CMake أو ndk-build. بعد إنشاء المكتبات المجمّعة من رموز برمجية أصلية، يُجمّعها Gradle في حزمة APK. للاطّلاع على مزيد من المعلومات عن استخدام CMake و ndk-build مع Gradle، يُرجى قراءة مقالة إضافة رمز C وC++ إلى مشروعك.
  • عند تشغيل عملية إنشاء من سطر الأوامر، يحاول Gradle الآن تنزيل أيّ مكوّنات أو تحديثات غير متوفّرة من حزمة SDK يعتمد عليها مشروعك تلقائيًا. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة التنزيل التلقائي للحِزم غير المتوفّرة باستخدام Gradle.
  • تتيح ميزة التخزين المؤقت التجريبية الجديدة لـ Gradle تسريع مدّة الإنشاء من خلال تحويل ملف APK إلى ملف DEX مسبقًا وتخزينه وإعادة استخدامه في مكتباتك. لمزيد من المعلومات عن استخدام هذه الميزة التجريبية، يمكنك الاطّلاع على دليل إنشاء ذاكرة التخزين المؤقت.
  • تحسين أداء عملية الإنشاء من خلال استخدام مسار جديد تلقائي لتعبئة التطبيقات يمكنه التعامل مع ضغط الملفات وتوقيعها ومواءمتها في مهمة واحدة يمكنك الرجوع إلى استخدام أدوات الحزمة القديمة من خلال إضافة 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
        }
      }
    }
          
  • بالنسبة إلى عمليات إنشاء حِزم متعددة بتنسيق DEX، يمكنك الآن استخدام قواعد ProGuard لتحديد الفئات التي يجب أن يجمعها Gradle في ملف DEX الرئيسي لتطبيقك. بما أنّه يحمِّل نظام Android ملف DEX الرئيسي أولاً عند بدء تشغيل تطبيقك، يمكنك منح الأولوية لفئات معيّنة عند بدء التشغيل من خلال تجميعها في ملف DEX الرئيسي. بعد إنشاء ملف إعدادات ProGuard خصيصًا لملف ملف ‎DEXE الرئيسي، يمكنك تمرير مسار ملف الإعدادات إلى Gradle باستخدام buildTypes.multiDexKeepProguard. يختلف استخدام لغة الترميز هذه عن استخدام buildTypes.proguardFiles، التي توفّر قواعد عامة في ProGuard لتطبيقك ولا تحدّد فئات لملف DEX الرئيسي.
  • إضافة علامة android:extractNativeLibs التي يمكن أن تقلّل حجم تطبيقك عند تثبيته على جهاز عند ضبط هذه العلامة على false في عنصر <application> في بيان تطبيقك، تحزم Gradle إصدارات غير مضغوطة ومحسَّنة من مكتباتك المجمّعة من رموز برمجية أصلية مع حزمة APK. ويؤدي ذلك إلى منع PackageManager من نسخ مكتباتك المجمّعة من رموز برمجية أصلية من حزمة APK إلى نظام ملفاته أثناء التثبيت، كما أنّه يساهم في تقليل حجم التحديثات المعدَّلة لتطبيقك.
  • يمكنك الآن تحديد versionNameSuffix و applicationIdSuffix لأنواع المنتجات. (المشكلة 59614)
التغييرات:
  • getDefaultProguardFile يعرض الآن ملفات ProGuard الافتراضية التي يوفّرها المكوّن الإضافي لنظام Android في Gradle، ولم يعُد يستخدم الملفات المتوفّرة في حزمة SDK لنظام Android.
  • ميزات وأداء محسّنان لمجمّع Jack:
    • يتيح Jack الآن تغطية اختبارات Jacoco عند ضبط testCoverageEnabled على true.
    • تحسين التوافق مع معالجات التعليقات التوضيحية يتم تلقائيًا تطبيق معالجات التعليقات التوضيحية في مسار الفصل، مثل أي تبعيات compile ، على عملية الإنشاء. يمكنك أيضًا تحديد معالِج تعليقات توضيحية في عملية الإنشاء وتقديم الوسيطات باستخدام لغة برمجة javaCompileOptions.annotationProcessorOptions {} فيملف 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"))
            }
          }
        }
      }
          

      إذا كنت تريد تطبيق معالج تعليقات توضيحية أثناء عملية compiling ولكن لا تريد تضمينه في حزمة 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
      

    • بشكلٍ تلقائي، إذا كان حجم ذاكرة heap لخادم Gradle غير القابل للتشغيل في الخلفية هو 1.5 غيغابايت على الأقل، سيتم تشغيل Jack الآن في العملية نفسها التي يتم فيها تشغيل Gradle. لضبط حجم ملف heap الخاص بالديمون، أضِف ما يلي إلى ملف gradle.properties:

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