الإصدار 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++ فقط تلقائيًا. في السابق، كان يتم إنشاء سطر من المخرجات لكل ملف تم إنشاؤه، ما يؤدي إلى ظهور عدد كبير من الرسائل الإعلامية.

إذا أردت الاطّلاع على الناتج الكامل للغة الأصلية، اضبط قيمة السمة الجديدة android.native.buildOutput في Gradle على 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، قد يؤدي ذلك إلى حدوث بعض حالات عدم التوافق أو التأثير في أداء الجهاز الافتراضي لجافا (JVM) بسبب التغييرات التي تم إجراؤها على أداة جمع البيانات غير المرغوب فيها. في ما يلي وصف لهذه المشاكل.

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

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

يمكن للإصدار 4.2 من "استوديو Android" فتح المشاريع التي تستخدم الإصدار 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 plugin حِزمًا من المكتبات المجمّعة من رموز برمجية أصلية عند إنشاء تطبيقك، اضبط useLegacyPackaging على true في ملف build.gradle الخاص بتطبيقك:

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

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