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

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

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

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

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

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

يتطلّب هذا الإصدار ما يلي:

الحد الأدنى للإصدار الإصدار التلقائي الملاحظات
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 وحزمة تطوير البرامج (SDK) الخاصة بالتطبيقات الفورية على Android (التي يمكنك تنزيلها باستخدام "مدير حزمة تطوير البرامج"). لمزيد من المعلومات حول إنشاء وحدات الميزات باستخدام المكوّن الإضافي الجديد، يمكنك الاطّلاع على بنية تطبيق فوري يتضمّن ميزات متعددة.
  • إتاحة استخدام ميزات لغة Java 8 ومكتبات Java 8 بشكل مدمج تم إيقاف Jack نهائيًا ولم يعُد مطلوبًا، ويجب أولاً إيقاف Jack للاستفادة من ميزة التوافق المحسّن مع Java 8 المضمّنة في سلسلة الأدوات التلقائية. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة استخدام ميزات لغة Java 8.
  • تمت إضافة إمكانية إجراء الاختبارات باستخدام منسّق الاختبارات من Android، ما يتيح لك إجراء كل اختبار من اختبارات تطبيقك في استدعاء خاص به لقياس حالة التطبيق. وبما أنّ كل اختبار يتم تنفيذه في مثيل خاص به لقياس حالة التطبيق، فإنّ أي حالة مشترَكة بين الاختبارات لا تتراكم على وحدة المعالجة المركزية أو الذاكرة في جهازك. وحتى إذا تعذّر إجراء أحد الاختبارات، سيؤدي ذلك إلى إيقاف مثيل قياس حالة التطبيق الخاص به فقط، وبالتالي ستظل الاختبارات الأخرى تعمل.

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

    Groovy

            android {
              testOptions {
                execution 'ANDROID_TEST_ORCHESTRATOR'
              }
            }
            

    Kotlin

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

    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 أو إصدار أحدث عند إنشاء مشاريع أصلية من "استوديو Android".
  • يتيح لك إعداد الاعتمادية الجديد 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.