الإصدار 4.2.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android (مارس 2021)

التوافق

الحد الأدنى للإصدار الإصدار التلقائي الملاحظات
Gradle 6.7.1 لا ينطبق لمزيد من المعلومات، اطّلِع على تحديث Gradle.
أدوات إنشاء حزمة تطوير البرامج (SDK) 30.0.2 30.0.2 ثبِّت أو اضبط أدوات إنشاء حزمة تطوير البرامج (SDK).
NDK لا ينطبق 21.4.7075529 ثبِّت أو اضبط إصدارًا مختلفًا من NDK.

الميزات الجديدة

يتضمّن هذا الإصدار من المكوّن الإضافي لنظام Gradle المتوافق مع Android الميزات الجديدة التالية.

إصدار لغة Java 8 تلقائيًا

بدءًا من الإصدار 4.2، سيستخدم AGP مستوى لغة Java 8 تلقائيًا. يتيح الإصدار 8 من Java الوصول إلى عدد من ميزات اللغة الأحدث، بما في ذلك تعبيرات lambda ومراجع الطرق وطرق الواجهة الثابتة. للاطّلاع على القائمة الكاملة بالميزات المتوافقة، راجِع مستندات Java 8.

للحفاظ على السلوك القديم، حدِّد Java 7 بشكل صريح في ملف build.gradle.kts أو build.gradle على مستوى الوحدة:

// build.gradle
android {
  ...
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}
// build.gradle.kts
android {
  ...
  compileOptions {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}

مترجم جديد لموارد آلة جافا الافتراضية

يحلّ برنامج تجميع موارد JVM الجديد في أداة الإصدار 4.2 من Android Gradle محل أجزاء من برنامج تجميع موارد AAPT2، ما قد يؤدي إلى تحسين أداء عملية الإنشاء، خاصةً على أجهزة Windows. يتم تفعيل برنامج تجميع موارد JVM الجديد تلقائيًا.

إتاحة التوقيع باستخدام الإصدارَين 3 و4

يتوافق الإصدار 4.2 من المكوّن الإضافي لنظام Gradle المتوافق مع Android الآن مع تنسيقات التوقيع الإصدار 3 من حِزم APK والإصدار 4 من حِزم APK. لتفعيل أحد هذين التنسيقَين أو كليهما في الإصدار، أضِف الخصائص التالية إلى ملف build.gradle أو build.gradle.kts على مستوى الوحدة:

// build.gradle
android {
  ...
  signingConfigs {
    config {
        ...
        enableV3Signing true
        enableV4Signing true
    }
  }
}
// build.gradle.kts
android {
  ...
  signingConfigs {
      config {
          ...
          enableV3Signing = true
          enableV4Signing = true
      }
  }
}

يتيح لك توقيع حِزمة APK الإصدار 4 نشر حِزم APK كبيرة بسرعة باستخدام التثبيت التدريجي لحِزم APK في Android 11. تتولّى هذه العلامة الجديدة خطوة توقيع حزمة APK في عملية النشر.

ضبط عملية توقيع التطبيق لكل صيغة

يمكنك الآن تفعيل ميزة "توقيع التطبيق" أو إيقافها في المكوّن الإضافي لنظام Gradle المتوافق مع Android لكل صيغة.

يوضّح هذا المثال كيفية ضبط ميزة "توقيع التطبيق" لكل صيغة باستخدام طريقة onVariants() في Kotlin أو Groovy:

androidComponents {
    onVariants(selector().withName("fooDebug"), {
        signingConfig.enableV1Signing.set(false)
        signingConfig.enableV2Signing.set(true)
    })

خاصية Gradle الجديدة: android.native.buildOutput

للحدّ من الازدحام في ناتج الإصدار، يفلتر الإصدار 4.2 من AGP الرسائل من عمليات الإنشاء الأصلية التي تستخدم CMake وndk-build، ويعرض ناتج برنامج الترجمة البرمجية للغة C/C++ فقط تلقائيًا. في السابق، كان يتم إنشاء سطر من المخرجات لكل ملف تم إنشاؤه، ما يؤدي إلى ظهور عدد كبير من الرسائل الإعلامية.

إذا كنت تريد الاطّلاع على الناتج الكامل للغة الأصلية، اضبط قيمة خاصية Gradle الجديدة android.native.buildOutput على verbose.

يمكنك ضبط هذه السمة في ملف gradle.properties أو من خلال سطر الأوامر.

gradle.properties
android.native.buildOutput=verbose

سطر الأوامر
-Pandroid.native.buildOutput=verbose

القيمة التلقائية لهذه السمة هي quiet.

تغيير في سلوك ملفات gradle.properties

بدءًا من الإصدار 4.2 من "مكوّن Android الإضافي لبرنامج Gradle"، لم يعُد من الممكن تجاهل خصائص Gradle من المشاريع الفرعية. بعبارة أخرى، إذا أعلنت عن سمة في ملف gradle.properties في مشروع فرعي بدلاً من المشروع الجذر، سيتم تجاهلها.

على سبيل المثال، في الإصدارات السابقة، كان AGP يقرأ القيم من <var>projectDir</var>/gradle.properties و<var>projectDir</var>/app/gradle.properties و<var>projectDir</var>/library/gradle.properties وما إلى ذلك. بالنسبة إلى وحدات التطبيق، إذا كانت سمة Gradle نفسها متوفّرة في كل من <var>projectDir</var>/gradle.properties و <var>projectDir</var>/app/gradle.properties، ستكون الأولوية للقيمة من <var>projectDir</var>/app/gradle.properties.

في الإصدار 4.2 من AGP، تم تغيير هذا السلوك، ولن يحمّل AGP القيم من gradle.properties في المشاريع الفرعية (على سبيل المثال، <var>projectDir</var>/app/gradle.properties). يعكس هذا التغيير سلوك Gradle الجديد ويتيح التخزين المؤقت للإعدادات.

لمزيد من المعلومات حول ضبط القيم في ملفات gradle.properties، راجِع مستندات Gradle.

تغييرات في التوافق والإعدادات في Gradle

عند التشغيل في "استوديو Android"، تستخدم أداة الإنشاء Gradle حزمة تطوير Java المضمّنة في "استوديو Android". في الإصدارات السابقة، كانت حزمة تطوير Java‏ (JDK) 8 مضمّنة في Studio. في الإصدار 4.2، تم تضمين JDK 11 بدلاً من ذلك. عند استخدام حزمة JDK الجديدة لتشغيل Gradle، قد يؤدي ذلك إلى حدوث بعض المشاكل في التوافق أو التأثير في أداء الجهاز الافتراضي لـ Java (JVM) بسبب التغييرات التي تم إجراؤها على أداة جمع البيانات غير المرغوب فيها. في ما يلي وصف لهذه المشاكل.

ملاحظة: مع أنّنا ننصح بتشغيل Gradle باستخدام JDK 11، يمكنك تغيير JDK المستخدَم لتشغيل Gradle في مربع الحوار بنية المشروع. سيؤدي تغيير هذا الإعداد إلى تغيير JDK المستخدَم لتشغيل Gradle فقط، ولن يؤدي إلى تغيير JDK المستخدَم لتشغيل Studio نفسه.

توافُق "استوديو Android" مع المكوّن الإضافي لنظام Gradle المتوافق مع Android (AGP)

يمكن للإصدار 4.2 من Android Studio فتح المشاريع التي تستخدم الإصدار 3.1 من "مكوّن Android الإضافي في Gradle" والإصدارات الأحدث، شرط أن يعمل "مكوّن Android الإضافي في Gradle" بالإصدار 4.8.1 من Gradle والإصدارات الأحدث. لمزيد من المعلومات حول توافق Gradle، راجِع مقالة تعديل Gradle.

تحسين إصدارات Gradle المتوافقة مع JDK 11

يؤثر هذا التحديث إلى JDK 11 في الإعداد التلقائي لجامع البيانات غير المرغوب فيها في JVM، لأنّ JDK 8 يستخدم جامع البيانات غير المرغوب فيها المتوازي، بينما يستخدم JDK 11 جامع البيانات غير المرغوب فيها G1.

لتحسين أداء الإصدارات المحتمل، ننصحك باختبار إصدارات Gradle باستخدام جامع البيانات غير المرغوب فيها المتوازي. في gradle.properties، اضبط ما يلي:

org.gradle.jvmargs=-XX:+UseParallelGC

إذا كانت هناك خيارات أخرى تم ضبطها في هذا الحقل، أضِف خيارًا جديدًا:

org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC

لقياس سرعة الإنشاء باستخدام إعدادات مختلفة، اطّلِع على إنشاء ملف تعريف لعملية الإنشاء.

ملفات DEX غير مضغوطة في حِزم APK عندما تكون قيمة minSdk تساوي 28 أو أعلى

تتضمّن حزمة Android Gradle الإضافية الآن ملفات DEX غير مضغوطة في حِزم APK تلقائيًا عندما يكون minSdk = 28 أو أعلى. يؤدي ذلك إلى زيادة حجم حزمة APK، ولكنّه يؤدي إلى تقليل حجم التثبيت على الجهاز، ويكون حجم التنزيل هو نفسه تقريبًا.

لإجبار AGP على تضمين ملفات DEX مضغوطة بدلاً من ذلك، يمكنك إضافة ما يلي إلى ملف build.gradle:

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

استخدام لغة DSL لتعبئة المكتبات الأصلية المضغوطة

ننصحك بتضمين المكتبات الأصلية في حِزم غير مضغوطة، لأنّ ذلك يؤدي إلى تقليل حجم تثبيت التطبيق وحجم تنزيله، كما يؤدي إلى تسريع وقت تحميل التطبيق للمستخدمين. ومع ذلك، إذا كنت تريد أن تتيح لبرنامج Android Gradle المساعد تجميع المكتبات الأصلية المضغوطة عند إنشاء تطبيقك، اضبط useLegacyPackaging على true في ملف build.gradle الخاص بتطبيقك:

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

يحلّ العلم useLegacyPackaging محلّ سمة ملف البيان extractNativeLibs. لمزيد من المعلومات، يمكنك الاطّلاع على ملاحظة الإصدار تعبئة المكتبات الأصلية غير المضغوطة تلقائيًا.