الإصدار 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" الميزات الجديدة التالية.

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

اعتبارًا من الإصدار 4.2، سيستخدم المكوّن الإضافي لنظام Gradle المتوافق مع Android مستوى لغة 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 ضمن مشروع فرعي بدلاً من المشروع الجذر، سيتم تجاهلها.

على سبيل المثال، في الإصدارات السابقة، كان &quot;المكوّن الإضافي لنظام Gradle المتوافق مع Android&quot; يقرأ القيم من <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 8 مضمّنة في "استوديو Android". في الإصدار 4.2، تم تضمين JDK 11 بدلاً من ذلك. عند استخدام حزمة JDK الجديدة لتشغيل Gradle، قد يؤدي ذلك إلى بعض حالات عدم التوافق أو التأثير في أداء الجهاز الافتراضي لجافا (JVM) بسبب التغييرات التي تم إجراؤها على أداة جمع البيانات غير الضرورية. في ما يلي وصف لهذه المشاكل.

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

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

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

تحسين عمليات إنشاء Gradle للإصدار 11 من JDK

يؤثر هذا التحديث إلى 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 أو أكثر

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

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

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

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

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

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

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