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

التوافق

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

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

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

الإصدار 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"
  }
}

برنامج تجميع موارد JVM جديد

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

يمكن الآن توقيع الإصدارَين 3 و4

يتوافق الإصدار 4.2 من المكوّن الإضافي لنظام Gradle المتوافق مع Android الآن مع تنسيقَي توقيع APK v3 وAPK v4. لتفعيل أحد هذين التنسيقَين أو كليهما في إصدارك، أضِف السمات التالية إلى ملف 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 الإضافية من AB في 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 أو من خلال سطر الأوامر.

grale.properties
android.native.buildOutput=verbose

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

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

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

بدءًا من الإصدار 4.2 من AGP، لم يعُد من الممكن إلغاء خصائص 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

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

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

توافق "استوديو YouTube" مع المكوّن الإضافي لنظام 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 بدلاً من ذلك، يمكنك إضافة ما يلي إلى ملف build.gradle:

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

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

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

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

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