الإصدار 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 تلقائيًا. توفّر Java 8 إمكانية الوصول إلى عدد من ميزات اللغة الأحدث، بما في ذلك تعبيرات 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"
  }
}

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

يحلّ أداة جديدة لتجميع موارد Java Virtual Machine (JVM) في أداة "مكوّن إضافي لـ Gradle في Android" 4.2 محل أجزاء من أداة تجميع موارد AAPT2، ما قد يؤدي إلى تحسين أداء عملية الإنشاء، خاصةً على أجهزة Windows. يكون "مجمِّع الموارد" الجديد لـ JVM مفعَّلاً تلقائيًا.

أصبح التوقيع بالإصدارَين 3 و4 متاحًا الآن

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

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

يتيح لك توقيع الإصدار 4 من حِزم APK نشر حِزم APK كبيرة بسرعة باستخدام ADB تثبيت حِزم 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

لتقليل الازدحام في نتائج الإنشاء، تصفِّر أداة AGP 4.2 الرسائل من عمليات الإنشاء الأصلية التي تستخدِم 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

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

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

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

يمكن لإصدار Android Studio 4.2 فتح المشاريع التي تستخدم الإصدار 3.1 من AGP والإصدارات الأحدث شرط أن يستخدم AGP الإصدار 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 أو إصدار أحدث

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

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

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

استخدام لغة وصف البيانات لحزمة المكتبات المجمّعة من رموز برمجية أصلية المضغوطة

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

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

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