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

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

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

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

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

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

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

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

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

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

التحسينات

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

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

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

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

    رائع

            android {
              testOptions {
                execution 'ANDROID_TEST_ORCHESTRATOR'
              }
            }
            

    Kotlin

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

    رائع

            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 بلغات معيّنة مع الإصدار 1.1 من حزمة SDK لتطبيقات Android الفورية أو الإصدارات الأحدث.
  • يمكنك الآن تغيير دليل الإخراج لمشروع الإصدار الأصلي الخارجي، كما هو موضَّح أدناه:

    رائع

            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"
                    }
                }
            }
            
  • يمكنك الآن استخدام CMake 3.7 أو إصدار أحدث عند إنشاء مشاريع مدمجة مع المحتوى من "استوديو Android".
  • تتيح لك إعدادات التبعية الجديدة الخاصة بـ lintChecks إنشاء ملف JAR يحدّد قواعد Lit المخصصة ودمجه في مشاريع AAR وحِزمة APK.

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

    رائع

            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.

    رائع

          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.