Как да ускорите бавно изградените си Gradle

Изминаха няколко седмици след I / O’17 сега и съм сигурен, че всички вие си проправяте път през многото сесии на конференцията.

Една от по-практичните сесии в I / O беше как да ускорите бавните си надстройки на Gradle. В тази сесия екипът от инструменти представи 10 страхотни съвета за ускоряване на вашите градове le

Реших да съставя тези съвети в удобен списък за лесна справка, така че тук е it

Отказ от отговорност: тези съвети не са мои и са взети от записа на IO сесията Как да ускорите бавно изградените от Gradle. Обяснението на тези съвети е моята собствена формулировка.
Целият кредит е на Google и екипа на Tools.

Съвет 1 - Използвайте най-новия Android Gradle Plugin

Екипът на инструментите непрекъснато подобрява Android Gradle Plugin и подобрява скоростта на изграждане, така че този съвет е супер лесен. Винаги използвайте най-новата версия!

buildscript {
  хранилища {
    Google ()
  }
 
 зависимости {
    classpath „com.android.tools.build.gradle: 3.0.0-alpha3“
 }
}

Съвет 2 - Избягвайте наследения мултидекс

Ако не сте сигурни какво е Multidex, прочетете тази статия.

Native multidex на устройства, работещи с API 21 и по-нови, има много малко въздействие върху производителността, но наследеният мултидекс на по-стари устройства прави!

Когато разработвате приложението си, трябва да избягвате използването на наследен мултидекс.

Това включва настройване на minSdkVersion на приложението ви на 21 и разработване на устройство, което поне работи с API 21.

Добрата новина е, че ако използвате по-нова версия на Android Studio, тя ще настрои minSdkVersion за вас, така че не трябва да правите нищо, освен да натиснете бутона за стартиране

Съвет 3 - Деактивиране на мулти-APK (в разработка)

Ако не използвате раздели ABI или Density в приложението си, можете да пропуснете този съвет.

Ако сте, трябва да деактивирате това за изграждане на разработки, тъй като забавя времето за изграждане.

Това може да се постигне чрез преминаване на променлива към gradle при изпълнение на разработка на разработка и деактивиране на разделянията, когато присъства:

android {
   ако (project.hasProperty ('devBuild')) {
      splits.abi.enable = невярно
      splits.density.enable = невярно
   }
}

Когато изграждате от командния ред:

./gradlew assembleDevelopmentDebug -PdevBuild

При изграждане от Android Studio:

Добавете -PdevBuild в полето за опции на командния ред на предпочитанията -> Създаване, изпълнение, внедряване -> Настройки на компилатора в Android Studio:

Съвет 4 - Минимизиране на включените ресурси

Ресурсите заемат значително количество пространство в APK и опаковането на всички тези ресурси забавя изграждането ви.

За изграждането на разработки можете да кажете на Gradle само да пакетира ресурсите, които ви интересуват, за устройството, което разработвате.

продуктАромати {
  развитие {
    minSdkVersion 21
    // само пакетни преводи на английски и ресурси xxhdpi
    resConfigs („en“, „xxhdpi“)
  }
}

Съвет 5 - Деактивиране на ПНГ счупване

Оптимизациите на PNG са активирани по подразбиране, но не са необходими за разработки. Деактивирайте ги, за да ускорите вашите компилации.

android {
  ако (project.hasProperty ('devBuild')) {
    aaptOptions.cruncherEnabled = false
  }
}

Съвет 6 - Използвайте незабавно изпълнение ️

Instant Run получава малко лош рап, но когато работи, наистина може да ви спести време.

Незабавното изпълнение в Android Studio 3.0 има много подобрения и би трябвало да е доста по-стабилно.

Опитай!

Съвет 7 - Избягвайте случайни промени

Gradle е супер гъвкав и можете да правите някои наистина готини неща в сценариите си за изграждане. Но ако не сте внимателни, наистина можете да забавите изграждането.

Този малък фрагмент от код задава версията на кода на текущото време - Полезно за тестване, но това означава, че за всяко изграждане, манифестът се променя, което води до ненужна обработка и опаковане.

//това е лошо!
def buildDateTime = new Date (). формат ("yyMMddHHmm"). toInteger ()
android {
  defaultConfig {
    versionCode buildDateTime
 }
}

Вместо това деактивирайте това при изграждането на разработки:

def buildDateTime = project.hasProperty ('devBuild')? 100: нов формат Дата (). („YyMMddHHmm“). ToInteger ()
android {
  defaultConfig {
    versionCode buildDateTime
 }
}

Правилото на палеца тук е да се уверите, че всяка персонализирана логика, плъгини или библиотеки променят файлове само когато е необходимо, а не всяка компилация.

Друг често срещан проблем са Crashlytics изграждане на идентификатори. Crashlytics ще генерира нов идентификационен номер за всяка версия.

Това може (и трябва) да бъде деактивирано за изграждането на грешки с един ред:

прилагам плъгин: „io.fabric“
android {
  buildTypes {
    отстраняване на грешки {
      ext.alwaysUpdateBuildId = false
    }
  }
}

Съвет 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!