Мгновенный запуск занимает больше времени, чем стандартные сборки

С некоторых пор Instant Run уже не работает, то есть медленнее, чем стандартные сборки.

В системе отслеживания ошибок AOSP есть некоторые материалы, но я не смог разобраться с этим. Я уверен, что некоторые из вас помогут.

Без мгновенного запуска

Сборка занимает около 1,30 мин.

С мгновенным запуском

Я запускаю приложение в первый раз, затем вношу небольшие изменения. Например, измените int a = 1 на int a = 2 внутри метода или измените строку.

Затем снова нажмите «Выполнить». Что происходит:

  • Происходит, казалось бы, полная сборка (вызов assembleDebug на всех моих модулях). Продолжительность около 1,30 мин.
  • Второй раунд продолжается, называя только app:assembleDebug. Проходит еще минута:

    16:27:10 Executing tasks: [:app:assembleDebug]
    16:28:16 Gradle build finished in 1m 5s 264ms
    16:28:22 Instant Run applied code changes and restarted the app.
    

Во время первого раунда никаких выходных данных в журнал событий или консоль Gradle. Во время второго раунда консоль Gradle выводит много материала и заканчивается

BUILD SUCCESSFUL

Total time: 51.385 secs
PREDEX CACHE HITS:   0
PREDEX CACHE MISSES: 45
Stopped 0 compiler daemon(s).

Что я могу сделать?

У меня есть это в моем файле grade.properties:

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.daemon=true

В build.gradle файлах нет ничего связанного с dex. Не используя Джека. Android-студия 2.2.3.


файл gradle.properties

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.daemon=true

ANDROID_BUILD_MIN_SDK_VERSION=15
ANDROID_BUILD_TARGET_SDK_VERSION=25
ANDROID_BUILD_SDK_VERSION=25
ANDROID_BUILD_TOOLS_VERSION=25.0.2

Уровень проекта build.gradle

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

Основной модуль build.gradle

(У меня также есть два других «библиотечных» модуля)

apply plugin: 'com.android.application'

Properties signProp = new Properties()
signProp.load(new FileInputStream(file(project.property("SIGN_PROPS"))))

Properties authProp = new Properties()
authProp.load(new FileInputStream(file(project.property("AUTH_KEYS_PROPS"))))


def PARSE_APPLICATION_ID = '"' + authProp['parseApplicationId'] + '"';
def PARSE_CLIENT_KEY = '"' + authProp['parseClientKey'] + '"'
def PARSE_SERVER_URL = '"' + authProp['parseServerURL'] + '"'
def GOOGLE_PLAY_API_KEY = '"' + authProp['googlePlayApiKey'] + '"'


android {
    signingConfigs {
        release_config {
            keyAlias signProp['keyAlias']
            keyPassword signProp['keyPassword']
            storeFile file(signProp['storeFilePath'])
            storePassword signProp['storePassword']
        }
    }
    compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION)
    buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION

    defaultConfig {
        minSdkVersion Integer.parseInt(project.ANDROID_BUILD_MIN_SDK_VERSION)
        targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION)
        versionCode 21
        versionName "1.3.3"

        buildConfigField 'String', 'PARSE_APPLICATION_ID', PARSE_APPLICATION_ID
        buildConfigField 'String', 'PARSE_CLIENT_KEY', PARSE_CLIENT_KEY
        buildConfigField 'String', 'PARSE_SERVER_URL', PARSE_SERVER_URL
        buildConfigField 'String', 'GOOGLE_PLAY_API_KEY', GOOGLE_PLAY_API_KEY

        signingConfig signingConfigs.release_config
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        vectorDrawables.useSupportLibrary = true
    }

    buildTypes {

        release {
            minifyEnabled true
            shrinkResources true
        }

        debug {
            minifyEnabled false
            shrinkResources false
        }
    }
    productFlavors {
    }

}

dependencies {

    compile 'com.android.support:design:24.2.1'
    compile 'com.android.support:cardview-v7:24.2.1'
    compile 'com.android.support:recyclerview-v7:24.2.1'
    compile 'com.android.support:preference-v14:24.2.1'
    compile 'com.google.maps.android:android-maps-utils:0.4.3'
    compile 'com.google.android.gms:play-services-maps:9.2.1'
    compile 'com.google.android.gms:play-services-appinvite:9.2.1'
    compile 'com.google.android.gms:play-services-location:9.2.1'
    compile 'com.google.android.gms:play-services-appindexing:9.2.1'
    compile ('com.facebook.android:facebook-android-sdk:4.16.1') {
        exclude module: 'bolts-tasks'
    }

    compile 'com.parse.bolts:bolts-tasks:1.4.0'
    compile 'com.squareup.okhttp3:okhttp:3.2.0'
    compile 'com.parse:parse-android:1.13.1'
    compile ('com.parse:parseui-widget-android:0.0.1') {
        exclude module: 'parse-android' 
    }

    compile project(':dateTimePicker')
    compile project(':commons')


}

apply plugin: 'com.google.gms.google-services'

person natario    schedule 27.12.2016    source источник
comment
возможно, из-за этой ошибки code.google.com/p/android/issues /detail?id=206698 ?, я не знаю, какая у вас сборка   -  person Dasser Basyouni    schedule 30.12.2016
comment
@ Дассер, да, кто знает? Кажется, это просто список людей, жалующихся, а не отчет об ошибке.   -  person natario    schedule 30.12.2016
comment
Вы прочитали ограничения мгновенного запуска и убедились, что ваш проект не жертва одной из перечисленных ловушек, да?   -  person Dioxin    schedule 30.12.2016
comment
@ Винс У меня сейчас нет подводных камней. Раньше тоже работало. Что-то изменилось в последних нескольких обновлениях, но я не успел отследить проблему, как только увидел ее.   -  person natario    schedule 30.12.2016
comment
@natario это для конкретного проекта или любого проекта?   -  person Charuක    schedule 04.01.2017
comment
@Charuka Я работаю только над проектом, я могу создать пустой проект, но сомневаюсь, что это будет иметь значение.   -  person natario    schedule 04.01.2017
comment
@natario Как только у вас будет время, попробуйте это, я знаю, что это не решит вашу проблему, но если это сработает нормально, возможно, мы можем немного больше сосредоточиться на зависимостях и распределении памяти.   -  person Charuක    schedule 04.01.2017
comment
Пожалуйста, проверьте stackoverflow.com/a/37207831/2826147 и stackoverflow.com/a/35169716/2826147   -  person Amit Vaghela    schedule 05.01.2017
comment
@Charuka хорошо работает с «пустым» проектом.   -  person natario    schedule 05.01.2017
comment
@Amit Я не нашел там решения.   -  person natario    schedule 05.01.2017
comment
@natario, тогда пришло время открыть свой градиент, давайте посмотрим!   -  person Charuක    schedule 05.01.2017
comment
Я знаю, я просто хотел сказать вам, что в мгновенном запуске все еще есть ошибки.   -  person Amit Vaghela    schedule 05.01.2017
comment
@Charuka отредактировал вопрос.   -  person natario    schedule 05.01.2017
comment
@natario Я думаю, что это утечка памяти в демоне Gradle, вы вручную добавили это org.gradle.daemon=true, удалите его и посмотрите   -  person Charuක    schedule 05.01.2017
comment
@Charuka У меня такое же поведение, даже без использования демона.   -  person natario    schedule 05.01.2017


Ответы (4)


http://tools.android.com/recent/androidstudio223isnowavailable

Обновите Android Studio до последней версии, а затем увеличьте профиль памяти в (studio.vmoptions) в зависимости от вашей системной памяти.

    -Xms256m
    -Xmx1280m
-XX:MaxPermSize=350m
person Ajay Venugopal    schedule 04.01.2017
comment
Уже использую 2.2.3 и уже устанавливаю некоторые из этих параметров в файле сборки, как вы можете видеть в вопросе. Если вы расширите это, я могу попробовать их настроить, но я пытался раньше. - person natario; 05.01.2017

Если вы используете службы Google Play, убедитесь, что вы не используете это в своем скрипте сборки Gradle:

compile 'com.google.android.gms:play-services:8.3.0'

Используйте только те API Google, которые действительно использует ваше приложение. Если все, что вы используете, это Google Maps, вы должны использовать это:

com.google.android.gms:play-services-maps:8.3.0

Когда я сделал это, время компиляции увеличилось с более чем 2 минут до примерно 25 секунд. Список API-интерфейсов Google, с которыми вы можете выборочно скомпилировать, см.:

https://developers.google.com/android/guides/setup

person Sambhaji Karad    schedule 04.01.2017
comment
Да, я уже делаю это. Кроме того, дело не только в том, что компиляция занимает много времени; странная проблема также в том, что компиляция происходит дважды. - person natario; 04.01.2017

Включить мгновенный запуск

  1. Откройте диалоговое окно «Настройки» или «Настройки».
  2. Перейдите к сборке, выполнению, развертыванию > Мгновенный запуск.
  3. установите флажок рядом с Включить мгновенный запуск.

Ограничения мгновенного запуска.

Развертывание на нескольких устройствах, Мультииндексирование вашего приложения, Использование сторонних плагинов, Внесение изменений в многопроцессорные приложения, Запуск вашего приложения в рабочем профиле.

Если вы используете поддержку multidex (multiDexEnabled true) для своего приложения, minSdkVersion должен быть 21 или выше. В противном случае студия Android отключает Instant Run.

Плагин Android для версии Gradle должен быть 2.1.0 или выше.

Включите автономную работу Android Studio, чтобы ускорить работу:

Перейдите в настройки файл >> или просто нажмите ctrl + alt + s

файл >> настройки >> Gradle. пожалуйста, проверьте автономную работу в глобальной настройке Gradle

Повысить производительность Gradle

После открытия студии Android откройте файл gradle.properties с правой стороны студии Android и добавьте следующие две строки.

  org.gradle.jvmargs=-Xmx1536m  
  org.gradle.daemon=true
  org.gradle.parallel=true

Настроить варианты сборки отладки в buildTypes

debug {
        minifyEnabled false
        applicationIdSuffix ".debug"
    }

После изменений вы должны перезапустить Android Studio.

Примечание. Время сборки зависит от вашего процессора и оперативной памяти. Я заметил в (i7-3610qm с 8 ГБ оперативной памяти), когда вы одновременно компилируете 4 проекта студии Android, а затем медленно отвечаете на окно. после завершения процесса сборки компьютер работает нормально.

person Jigar Patel    schedule 05.01.2017
comment
@natario Пожалуйста, проверьте уровень проекта build.gradle ===== задача очистить (тип: Удалить) {удалить rootProject.buildDir} - person Jigar Patel; 09.01.2017
comment
Не размещайте классы контекста Android в статических полях; это утечка памяти, а также нарушает Instant Run - person Jigar Patel; 11.01.2017

Сохраняйте встроенные версии и целевую версию одинаковыми

person Nandu    schedule 03.01.2017
comment
пожалуйста, добавьте детали. Это вопрос о щедрости - person IntelliJ Amiya; 03.01.2017
comment
Я, версия сборки 25, целевая версия 25 и версия инструментов сборки 25.0.2 во всех моих модулях. - person natario; 03.01.2017
comment
compileSdkVersion 23, buildToolsVersion 23.0.3, minSdkVersion 11, targetSdkVersion 23. Поддерживая все это, я решил проблему - person Nandu; 04.01.2017