الإصدار 3.0.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android" (أكتوبر 2017)

يتضمّن الإصدار 3.0.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android مجموعة متنوّعة من التغييرات التي تهدف إلى معالجة مشاكل الأداء في المشاريع الكبيرة.

على سبيل المثال، في مشروع هيكلي تجريبي يتضمّن حوالي 130 وحدة وعددًا كبيرًا من التبعيات الخارجية (ولكن بدون رموز أو موارد)، يمكنك ملاحظة تحسينات في الأداء مشابهة لما يلي:

إصدار المكوّن الإضافي لنظام Android + إصدار Gradle المكوّن الإضافي لنظام Android الإصدار 2.2.0 + نظام Gradle الإصدار 2.14.1 المكوّن الإضافي لنظام Android الإصدار 2.3.0 والإصدار 3.3 من Gradle المكوّن الإضافي لنظام Android الإصدار 3.0.0 والإصدار 4.1 من Gradle
الإعداد (مثل تنفيذ ./gradlew --help) ‫~2 دقيقة ‫9 ثوانٍ تقريبًا ‫~2.5 ثانية
تغيير سطر واحد في Java (تغيير في التنفيذ) ‫2 دقيقة و15 ثانية تقريبًا ‫~29 ثانية ‫~6.4 ثانية

تؤدي بعض هذه التغييرات إلى إيقاف الإصدارات الحالية. لذلك، عليك مراعاة
الجهد المطلوب لنقل مشروعك قبل استخدام المكوّن الإضافي الجديد.

إذا لم تلاحظ التحسينات في الأداء الموضّحة أعلاه، يُرجى إرسال تقرير عن الخطأ وتضمين تتبُّع لإنشائك باستخدام أداة Gradle Profiler.

يتطلّب هذا الإصدار من المكوّن الإضافي لنظام التشغيل Android ما يلي:

الحد الأدنى للإصدار الإصدار التلقائي الملاحظات
Gradle 4.1 4.1 لمزيد من المعلومات، اطّلِع على تحديث Gradle.
أدوات إنشاء حزمة تطوير البرامج (SDK) 26.0.2 26.0.2 ثبِّت أو اضبط أدوات إنشاء حزمة تطوير البرامج (SDK). من خلال هذا التحديث، لن تحتاج بعد الآن إلى تحديد إصدار لأدوات الإنشاء، إذ تستخدم المكوّن الإضافي الحد الأدنى للإصدار المطلوب تلقائيًا. وبالتالي، يمكنك الآن إزالة السمة android.buildToolsVersion.

‫3.0.1 (تشرين الثاني/نوفمبر 2017)

هذا تحديث بسيط لدعم الإصدار 3.0.1 من "استوديو Android"، ويتضمّن إصلاحات عامة للأخطاء وتحسينات في الأداء.

التحسينات

  • تحسين التوازي للمشاريع المتعددة الوحدات من خلال رسم بياني دقيق للمهام.
  • عند إجراء تغييرات على التبعية، ينفّذ Gradle عمليات إنشاء أسرع من خلال عدم إعادة تجميع الوحدات التي لا يمكنها الوصول إلى واجهة برمجة التطبيقات الخاصة بهذه التبعية. عليك حصر التبعيات التي تسرّب واجهات برمجة التطبيقات الخاصة بها إلى وحدات أخرى من خلال استخدام إعدادات التبعيات الجديدة في Gradle: implementation وapi وcompileOnly وruntimeOnly.
  • سرعة إنشاء متزايدة أسرع بسبب تقسيم رمز DEX على مستوى كل فئة يتم الآن تجميع كل فئة في ملفات DEX منفصلة، ولا تتم إعادة تجميع الفئات إلا إذا تم تعديلها. من المفترض أيضًا أن تلاحظ تحسّنًا في سرعات الإنشاء للتطبيقات التي تضبط قيمة minSdkVersion على 20 أو أقل، وتستخدم الإصدار القديم من Multi-Dex.
  • تحسين سرعات الإنشاء من خلال تحسين مهام معيّنة لاستخدام النواتج المخزّنة مؤقتًا للاستفادة من هذا التحسين، عليك أولاً تفعيل ذاكرة التخزين المؤقت لإنشاء Gradle.
  • تحسين معالجة الموارد التزايدية باستخدام AAPT2، والتي أصبحت مفعّلة تلقائيًا. إذا كنت تواجه مشاكل أثناء استخدام AAPT2، يُرجى الإبلاغ عن خطأ. يمكنك أيضًا إيقاف AAPT2 من خلال ضبط android.enableAapt2=false في ملف gradle.properties وإعادة تشغيل عملية Gradle من خلال تنفيذ ./gradlew --stop من سطر الأوامر.

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

  • إدارة التبعيات التي تتضمّن خيارات منتج: عند إنشاء صيغة معيّنة من وحدة، تتطابق الإضافة الآن تلقائيًا مع صيغ تبعيات وحدة المكتبة المحلية مع صيغة الوحدة التي يتم إنشاؤها.
  • تتضمّن إضافة وحدة ميزات جديدة لدعم التطبيقات الفورية على Android و"حزمة تطوير البرامج للتطبيقات الفورية على Android" (التي يمكنك تنزيلها باستخدام "مدير حزمة تطوير البرامج"). لمزيد من المعلومات حول إنشاء وحدات الميزات باستخدام المكوّن الإضافي الجديد، يمكنك الاطّلاع على بنية تطبيق فوري يتضمّن ميزات متعددة.
  • إتاحة استخدام ميزات لغة Java 8 ومكتبات Java 8 بشكل مدمج تم إيقاف Jack نهائيًا ولم يعُد مطلوبًا، ويجب أولاً إيقاف Jack لاستخدام ميزة التوافق المحسّنة مع Java 8 المضمّنة في سلسلة الأدوات التلقائية. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة استخدام ميزات لغة Java 8.
  • تمت إضافة إمكانية إجراء الاختبارات باستخدام Android Test Orchestrator، ما يتيح لك إجراء كل اختبار من اختبارات تطبيقك في استدعاء خاص به لـ Instrumentation. وبما أنّ كل اختبار يتم تنفيذه في مثيل Instrumentation خاص به، فإنّ أي حالة مشترَكة بين الاختبارات لا تتراكم على وحدة المعالجة المركزية أو الذاكرة في جهازك. وحتى إذا تعذّر تنفيذ أحد الاختبارات، سيؤدي ذلك إلى إيقاف مثيل Instrumentation الخاص به فقط، وبالتالي ستظل اختباراتك الأخرى تعمل.

    • تمت إضافة testOptions.execution لتحديد ما إذا كان سيتم استخدام تنسيق الاختبار على الجهاز. إذا أردت استخدام Android Test Orchestrator، عليك تحديد ANDROID_TEST_ORCHESTRATOR، كما هو موضّح أدناه. يتم ضبط هذه السمة تلقائيًا على HOST، ما يؤدي إلى إيقاف التنسيق على الجهاز، وهي الطريقة العادية لتنفيذ الاختبارات.

    Groovy

            android {
              testOptions {
                execution 'ANDROID_TEST_ORCHESTRATOR'
              }
            }
            

    Kotlin

            android {
              testOptions {
                execution = "ANDROID_TEST_ORCHESTRATOR"
              }
            }
            
  • يتيح لك إعداد التبعية الجديد androidTestUtil تثبيت حزمة APK أخرى خاصة بأداة الاختبار المساعدة قبل تشغيل اختبارات الأجهزة، مثل Android Test Orchestrator:

    Groovy

            dependencies {
              androidTestUtil 'com.android.support.test:orchestrator:1.0.0'
              ...
            }
            

    Kotlin

            dependencies {
              androidTestUtil("com.android.support.test:orchestrator:1.0.0")
              ...
            }
            
  • تمت إضافة testOptions.unitTests.includeAndroidResources لدعم اختبارات الوحدات التي تتطلّب موارد Android، مثل Roboelectric. عند ضبط هذه السمة على true، تنفّذ الإضافة عملية دمج للموارد ومواد العرض وبيانات البيان قبل تشغيل اختبارات الوحدات. يمكن أن تفحص اختباراتك بعد ذلك com/android/tools/test_config.properties في مسار الفئة بحثًا عن المفاتيح التالية:

    • android_merged_assets: المسار المطلق إلى مجلد مواد العرض المدمجة.

      ملاحظة: بالنسبة إلى وحدات المكتبة، لا تحتوي مواد العرض المدمجة على مواد عرض التبعيات (راجِع المشكلة رقم 65550419).

    • android_merged_manifest: المسار المطلق إلى ملف البيان المدمج.

    • android_merged_resources: المسار المطلق إلى دليل الموارد المدمجة، والذي يحتوي على جميع الموارد من الوحدة وجميع التبعيات الخاصة بها.

    • android_custom_package: اسم حزمة فئة R النهائية في حال تعديل معرّف التطبيق بشكل ديناميكي، قد لا يتطابق اسم الحزمة هذا مع السمة package في ملف بيان التطبيق.

  • إتاحة استخدام الخطوط كموارد (وهي ميزة جديدة تم طرحها في Android 8.0 (المستوى 26 لواجهة برمجة التطبيقات)).
  • إتاحة حِزم APK خاصة بلغات معيّنة باستخدام حزمة تطوير البرامج (SDK) للإصدار 1.1 من "تطبيقات Android الفورية" والإصدارات الأحدث
  • يمكنك الآن تغيير دليل الإخراج لمشروع الإصدار الأصلي الخارجي، كما هو موضّح أدناه:

    Groovy

            android {
                ...
                externalNativeBuild {
                    // For ndk-build, instead use the ndkBuild block.
                    cmake {
                        ...
                        // Specifies a relative path for outputs from external native
                        // builds. You can specify any path that's not a subdirectory
                        // of your project's temporary build/ directory.
                        buildStagingDirectory "./outputs/cmake"
                    }
                }
            }
            

    Kotlin

            android {
                ...
                externalNativeBuild {
                    // For ndk-build, instead use the ndkBuild block.
                    cmake {
                        ...
                        // Specifies a relative path for outputs from external native
                        // builds. You can specify any path that's not a subdirectory
                        // of your project's temporary build/ directory.
                        buildStagingDirectory = "./outputs/cmake"
                    }
                }
            }
            
  • يمكنك الآن استخدام الإصدار 3.7 من CMake أو إصدار أحدث عند إنشاء مشاريع بلغة C/C++ من Android Studio.
  • يتيح لك إعداد التبعية الجديد lintChecks إنشاء ملف JAR يحدّد قواعد Lint المخصّصة، وتضمينه في مشاريع AAR وAPK.

    يجب أن تنتمي قواعد Lint المخصّصة إلى مشروع منفصل يعرض ملف JAR واحدًا ويتضمّن فقط compileOnly التبعيات. يمكن أن تعتمد وحدات التطبيق والمكتبة الأخرى بعد ذلك على مشروع lint باستخدام إعدادات lintChecks:

    Groovy

            dependencies {
                // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file
                // and package it with your module. If the module is an Android library,
                // other projects that depend on it automatically use the lint checks.
                // If the module is an app, lint includes these rules when analyzing the app.
                lintChecks project(':lint-checks')
            }
            

    Kotlin

            dependencies {
                // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file
                // and package it with your module. If the module is an Android library,
                // other projects that depend on it automatically use the lint checks.
                // If the module is an app, lint includes these rules when analyzing the app.
                lintChecks(project(":lint-checks"))
            }
            

تغييرات السلوك

  • يزيل الإصدار 3.0.0 من المكوّن الإضافي لنظام Android بعض واجهات برمجة التطبيقات، وسيتعذّر إنشاء تطبيقك إذا كنت تستخدمها. على سبيل المثال، لن يعود بإمكانك استخدام Variants API للوصول إلى عناصر outputFile() أو استخدام processManifest.manifestOutputFile() للحصول على ملف البيان لكل صيغة. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في واجهة برمجة التطبيقات.
  • لم يعُد عليك تحديد إصدار لأدوات الإنشاء (وبالتالي، يمكنك الآن إزالة السمة android.buildToolsVersion). تستخدم المكوّنات الإضافية تلقائيًا الحد الأدنى من إصدار أدوات الإنشاء المطلوب لإصدار مكوّن Android الإضافي الذي تستخدمه.
  • يمكنك الآن تفعيل/إيقاف تقليل حجم ملفات PNG في كتلة buildTypes كما هو موضّح أدناه. يتم تفعيل ضغط ملفات PNG تلقائيًا لجميع الإصدارات باستثناء إصدارات تصحيح الأخطاء، لأنّ ذلك يزيد من أوقات الإنشاء للمشاريع التي تتضمّن العديد من ملفات PNG. لتحسين أوقات الإنشاء لأنواع الإنشاء الأخرى، عليك إما إيقاف تصغير حجم ملفات PNG أو تحويل صورك إلى WebP.

    Groovy

          android {
            buildTypes {
              release {
                // Disables PNG crunching for the release build type.
                crunchPngs false
              }
            }
          }
          

    Kotlin

          android {
            buildTypes {
              release {
                // Disables PNG crunching for the release build type.
                isCrunchPngs = false
              }
            }
          }
          
  • تنشئ إضافة Android الآن تلقائيًا أهدافًا قابلة للتنفيذ يمكنك ضبطها في مشاريع CMake الخارجية.
  • عليك الآن إضافة معالِجات التعليقات التوضيحية إلى مسار فئة المعالج باستخدام إعداد التبعية annotationProcessor.
  • أصبح استخدام ndkCompile المتوقّف نهائيًا أكثر تقييدًا. بدلاً من ذلك، عليك نقل البيانات لاستخدام CMake أو ndk-build لتجميع الرمز البرمجي الأصلي الذي تريد تضمينه في حزمة APK. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة نقل البيانات من ndkcompile.