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

التوافق

الحد الأدنى للإصدار الإصدار التلقائي ملاحظات
قاعدة مخروطية 6.7.1 لا ينطبق لمعرفة المزيد من المعلومات، يمكنك الاطّلاع على تحديث Gradle.
أدوات إنشاء حِزم تطوير البرامج (SDK) 30.0.2 30.0.2 تثبيت أدوات إنشاء حزمة تطوير البرامج (SDK) أو ضبطها
كرونة دنماركية لا ينطبق 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 الافتراضية

يحل برنامج التجميع الجديد لموارد JVM في الإصدار 4.2 من المكوّن الإضافي لنظام Gradle المتوافق مع Android، محل الأجزاء مجمع موارد 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.property

بدءًا من الإصدار 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>/app/gradle.properties بالأولوية.

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

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

تغييرات الضبط والتوافق مع Gradle

عند تشغيل أداة إنشاء Gradle في "استوديو Android"، تستخدم حزمة JDK المجمّعة في "استوديو YouTube". في الإصدارات السابقة، تم تضمين قناة JDK 8 مع "استوديو YouTube". في الإصدار 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 فتح المشاريع التي تستخدم AGP 3.1 شريطة أن يقوم AGP بتشغيل Gradle 4.8.1 والإصدارات الأعلى. لمزيد من المعلومات، حول توافق 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
        }
    }
}

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

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

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

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