Ускорение создания градиента в многодисковом приложении

В моем приложении есть множество библиотек, которые очень важны, поэтому я был вынужден использовать библиотеку поддержки multidex, и она работает хорошо. Но здесь проблема заключается в скорости роста градиента. Требуется в среднем 2 минуты для сборки, а когда я разрабатываю и тестирую, это довольно раздражает.

Есть ли способ ускорить сборку отладки?

Solutions Collecting From Web of "Ускорение создания градиента в многодисковом приложении"

Вы можете ускорить ваши разработки , указав минимальную версию SDK = 21.
Официальная документация включает в себя целый раздел об этом.

Пример (из документации):

android { productFlavors { // Define separate dev and prod product flavors. dev { // dev utilizes minSDKVersion = 21 to allow the Android gradle plugin // to pre-dex each module and produce an APK that can be tested on // Android Lollipop without time consuming dex merging processes. minSdkVersion 21 } prod { // The actual minSdkVersion for the application. minSdkVersion 14 } } ... buildTypes { release { runProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile 'com.android.support:multidex:1.0.0' } 

После того, как вы добавили ароматы продукта, вы можете использовать задачу devDebug (вместо задачи debug по умолчанию) для своих версий:
– из командной строки: запустить ./gradlew installDevDebug
– из Android Studio: откройте окно «Варианты сборки» и выберите devDebug сборки devDebug .

Разумеется, вы должны работать против устройства, SDK> = 21.


Существует также решение для тех, кто не хочет использовать ароматы. Как предложено в этом документе , динамически minSdkVersion значение minSdkVersion :

 int minSdk = hasProperty('devMinSdk') ? devMinSdk.toInteger() : 14 apply plugin: 'com.android.application' android { ... defaultConfig { minSdkVersion minSdk ... } } 

В этом примере мы проверяем, определено ли свойство devMinSdk , и если true – мы его используем. В противном случае мы по умолчанию 14.

Как передать значение devMinSdk для создания скрипта? Два варианта:

Использование командной строки:

 ./gradlew installDebug -PdevMinSdk=21 

Использование настроек Android Studio:

Перейдите в « Настройки»Настройки в Windows») -> « Сборка, выполнение, развертывание -> Компилятор -> поместите -PdevMinSdk=21 в текстовое поле« Параметры командной строки » .

Параметры компилятора Studio для Android

Недавно созданный кэш был представлен командой, работающей над плагином Android Gradle. Вы можете включить его, добавив android.enableBuildCache=true в gradle.properties .

Подробнее здесь http://tools.android.com/tech-docs/build-cache

Для меня это увеличило инкрементное время сборки на ~ 30 секунд.

Он не работает с устаревшим multidex ( com.android.support:multidex ), представленным как часть библиотеки поддержки, поэтому он подходит только в том случае, если ваш minSDK> = 21. Вы можете установить его только для своих сборников разработки и выполнить выпуск сборок с помощью MinSDK <21.

Он также работает без возможности многопоточности.

Android Studio 1.3 (в настоящее время в Preview 3 ) использует новую систему сборки, которая улучшает время построения градиента (на самом деле, например, на 10-30 раз быстрее).

Дополнительная информация на Live сессии в Google I / O 2015

Multidexing использует больше памяти. Когда вы приблизитесь к максимальному размеру кучи в Java, вы обнаружите, что Java тратит больше времени на выполнение GC, чем на любую реальную работу, это может сильно замедлить работу.

Я настоятельно рекомендую увеличить максимальный размер кучи при использовании multidex. Добавьте следующее к закрытию Android в файле build.gradle, чтобы сделать максимальный размер кучи 4 ГБ (уменьшите его, если хотите):

 dexOptions { javaMaxHeapSize "4g" } 

Изменение MinSdk до 21 сделало все для меня нормальным. Теперь все скомпилировано в 6s

Перейдите в настройку, найдите компилятор, введите «–offline» в параметрах командной строки и компилируйте.