الإصدار 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 المكوّن الإضافي لنظام Android 3.0.0 + Gradle 4.1
الإعداد (مثل تشغيل ./gradlew --help) دقيقتان تقريبًا ‫9 ثوانٍ تقريبًا ‫2.5 ثانية تقريبًا
تغيير سطر واحد في Java (تغيير في التنفيذ) ‎2 min 15 s ‫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.
  • سرعة إنشاء متزايدة بشكل أسرع بسبب الفهرسة لكل فئة يتم الآن compiling كل فئة في ملفات DEX منفصلة، ولا تتم إعادة إنشاء ملف DEX إلا للفئات التي تم تعديلها. من المفترض أيضًا أن تلاحظ سرعات إنشاء محسّنة ل التطبيقات التي تضبط minSdkVersion على 20 أو أقل، وتستخدم حِزم dex المتعددة القديمة.
  • سرعات إنشاء محسّنة من خلال تحسين مهام معيّنة لاستخدام النتائج المخزّنة للاستفادة من هذا التحسين، عليك أولاً تفعيل ذاكرة التخزين المؤقت لإنشاء Gradle.
  • معالجة مُحسَّنة للموارد المتزايدة باستخدام AAPT2، وهو الآن فعال تلقائيًا إذا كنت تواجه مشاكل أثناء استخدام AAPT2، يُرجى الإبلاغ عن خطأ. يمكنك أيضًا إيقاف AAPT2 من خلال ضبط android.enableAapt2=false فيملف gradle.properties وإعادة تشغيل برنامج Gradle الخفي من خلال تشغيل ./gradlew --stop من سطر الأوامر.

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

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

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

    رائع

            android {
              testOptions {
                execution 'ANDROID_TEST_ORCHESTRATOR'
              }
            }
            

    Kotlin

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

    رائع

            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 فيملف Classpath للمفاتيح التالية:

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

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

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

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

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

  • إتاحة استخدام الخطوط كموارد (وهي ميزة جديدة تم تقديمها في Android 8.0 (المستوى 26 لواجهة برمجة التطبيقات))
  • إتاحة ملفات APK المخصّصة للغة مع حزمة تطوير البرامج (SDK) 1.1 لتطبيقات Android الفورية والإصدارات الأحدث
  • يمكنك الآن تغيير دليل الإخراج لمشروع الإصدار التلقائي المتوافق مع الأجهزة المزوّدة بنظام التشغيل 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 Studio.
  • تتيح لك إعدادات التبعيات الجديدة في lintChecks إنشاء حزمة JAR تحدّد قواعد lint مخصّصة، وتُحزِّمها في مشاريع AAR وAPK.

    يجب أن تنتمي قواعد lint المخصّصة إلى مشروع منفصل يُنشئملف 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"))
            }
            

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

  • يزيل المكوّن الإضافي لنظام Android 3.0.0 واجهات برمجة تطبيقات معيّنة، وسيتم إيقاف عملية التصميم إذا كنت تستخدمها. على سبيل المثال، لم يعُد بإمكانك استخدام 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.