كيفية تسريع بطء Gradle الخاص بك

بعد أسابيع قليلة من I / O '17 الآن ، وأنا متأكد من أنك جميعًا تشق طريقك خلال الجلسات الكثيرة في المؤتمر.

كانت إحدى الجلسات العملية في I / O هي كيفية تسريع إنشاءات Gradle البطيئة لديك. في هذه الجلسة ، قدم فريق الأدوات 10 نصائح رائعة لتسريع عمليات بناء المهارات الخاصة بك

قررت أن أجمع هذه النصائح في قائمة مفيدة لسهولة الرجوع إليها ، لذلك هنا here

إخلاء المسئولية: هذه النصائح ليست لي وهي مأخوذة من تسجيل جلسة IO كيفية تسريع عمليات إنشاء Gradle البطيئة لديك. تفسير هذه النصائح هو صياغة بلدي.
يذهب كل الفضل إلى Google وفريق الأدوات.

نصيحة 1 - استخدم أحدث إصدار من Android Gradle Plugin

يعمل فريق الأدوات دائمًا على تحسين مكون Android Gradle Plugin وتحسين سرعة البناء ، لذلك فإن هذه الحافة سهلة للغاية. دائما استخدام أحدث نسخة!

مخطط البناء {
  مستودعات
    جوجل()
  }
 
 التبعيات
    classpath ‘com.android.tools.build.gradle: 3.0.0-alpha3 '
 }
}

نصيحة 2 - تجنب multidex القديمة

إذا كنت غير متأكد من ماهية Multidex ، فاقرأ هذه المقالة.

multidex الأصلي على الأجهزة التي تعمل API 21 وما فوق له تأثير ضئيل للغاية على الأداء ، ولكن multidex القديمة على الأجهزة القديمة لا!

عند تطوير التطبيق الخاص بك ، يجب عليك تجنب استخدام multidex القديمة.

يتضمن ذلك تعيين minSdkVersion لتطبيقك على 21 ، وتطوير جهاز يعمل على الأقل API 21.

والخبر السار هو أنك إذا كنت تستخدم إصدارًا أحدث من Android Studio ، فسيؤدي ذلك إلى تعيين minSdkVersion لك ، لذلك لن تحتاج إلى القيام بأي شيء باستثناء الضغط على زر التشغيل

نصيحة 3 - تعطيل multi-APK (قيد التطوير)

إذا كنت لا تستخدم انشقاقات ABI أو Density في تطبيقك ، فيمكنك تخطي هذه النصيحة.

إذا كنت كذلك ، يجب عليك تعطيل إنشاءات التطوير لأنها تبطئ أوقات البناء.

يمكن تحقيق ذلك عن طريق تمرير متغير إلى gradle عند تشغيل إنشاء تطوير وتعطيل الانشقاقات عندما تكون موجودة:

ذكري المظهر {
   if (project.hasProperty (‘devBuild’)) {
      splits.abi.enable = خطأ
      splits.density.enable = false
   }
}

عند البناء من سطر الأوامر:

./gradlew assembleDevelopmentDebug -PdevBuild

عند البناء من Android Studio:

أضف -PdevBuild إلى حقل خيارات سطر الأوامر في التفضيلات -> الإنشاء والتنفيذ والنشر -> إعدادات برنامج التحويل البرمجي في Android Studio:

نصيحة 4 - تقليل الموارد المدرجة

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

بالنسبة لبنيات التطوير ، يمكنك إخبار Gradle فقط لحزم الموارد التي تهتم بها ، للجهاز الذي تقوم بتطويره.

المنتجالنكهات
  تطوير {
    minSdkVersion 21
    / / حزمة فقط الترجمة الإنجليزية ، وموارد xxhdpi
    resConfigs ("en" و "xxhdpi")
  }
}

نصيحة 5 - تعطيل PNG الطحن

يتم تمكين تحسينات PNG افتراضيًا ، ولكنها غير ضرورية لبنيات التطوير. تعطيل لهم لتسريع يبني الخاص بك.

ذكري المظهر {
  if (project.hasProperty (‘devBuild’)) {
    aaptOptions.cruncherEnabled = خطأ
  }
}

نصيحة 6 - استخدام التشغيل الفوري ️

يشتعل تطبيق "تشغيل فوري" قليلاً من موسيقى الراب السيئة ، لكن عندما يعمل ، يمكن أن يوفر لك الوقت.

تشتمل ميزة التشغيل الفوري في Android Studio 3.0 على الكثير من التحسينات ، ويجب أن تكون أكثر استقرارًا.

جربها!

نصيحة 7 - تجنب التغييرات غير المقصودة

تتميز أداة Gradle بمرونة فائقة ويمكنك القيام ببعض الأشياء الرائعة حقًا في البرامج النصية الخاصة بك. ولكن إذا لم تكن حريصًا ، فيمكنك بالفعل إبطاء عمليات الإنشاء.

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

//هذا سيء!
def buildDateTime = تاريخ جديد (). التنسيق ('yyMMddHHmm'). toInteger ()
ذكري المظهر {
  defaultConfig {
    versionCode buildDateTime
 }
}

بدلاً من ذلك ، قم بتعطيل هذا عند إنشاء التطوير:

def buildDateTime = project.hasProperty ('devBuild')؟ 100: تاريخ (). تنسيق جديد ('yyMMddHHmm'). toInteger ()
ذكري المظهر {
  defaultConfig {
    versionCode buildDateTime
 }
}

قاعدة الإبهام هنا هي التأكد من أن أي منطق مخصص أو مكونات إضافية أو مكتبات يقوم فقط بتعديل الملفات عند الضرورة ، بدلاً من كل بنية.

مأزق آخر شائع هو معرفات بناء Crashlytics. سوف Crashlytics إنشاء معرف بناء جديد لكل بناء.

يمكن (ويجب) تعطيل هذا لإنشاء تصحيحات التصحيح بسطر واحد:

تطبيق المكوّن الإضافي: "io.fabric"
ذكري المظهر {
  buildTypes {
    تصحيح
      ext.alwaysUpdateBuildId = خطأ
    }
  }
}

نصيحة 8 - لا تستخدم إصدارات التبعية الديناميكية

يعد استخدام إصدارات التبعية الديناميكية أمرًا لا كبيرًا لعدة أسباب:

  • يخلق بنيات غير ديرميني (أو غير قابلة للتكرار).
  • يؤدي Gradle إلى التحقق من وجود إصدارات تبعية جديدة كل 24 ساعة مما يؤدي إلى زيادة أوقات دقة التبعية.

دائما استخدام إصدارات التبعية محددة!

نصيحة 9 - مشاهدة الذاكرة

كن حذرًا من حجم الذاكرة التي تعطيها لـ Gradle.

للحصول على شرح رائع حول إعدادات ذاكرة Gradle و Dex In Process ، اقرأ هذه المقالة بواسطة Reto Meier.

ستحتاج إلى اللعب حول مقدار الذاكرة التي تمنحها لـ Gradle:

org.gradle.jvmargs = -Xmx1536m

ومنذ إصدار Dex In Process ، لم تعد هناك حاجة لهذا التحسين القديم:

dexOptions {
 javaMaxHeapSize = '4g'
}

نصيحة 10 - تمكين التخزين المؤقت Gradle

التخزين المؤقت Gradle جديد في Gradle 3.5 ، وعند تمكينه ، يقوم Gradle بتخزين مؤقت وإعادة استخدام المخرجات من البنيات السابقة.

هذا يعمل من أجل أي بناء ، أي تغييرات فرع ، وعبر المشاريع.

يستفيد Android Studio 3.0 من ذاكرة التخزين المؤقت هذه ، لذا تأكد من تمكينه:

# تعيين هذا في gradle.properties
org.gradle.caching = صحيح

نصيحة النهائي

شاهد الجلسة ، ستتعلم الكثير!

إذا أعجبك هذا المقال ، فتأكد من ❤ ذلك أدناه ، وتابعني على twitter!