Подтвердить что ты не робот

Gradle - Android Studio строит слишком медленное приложение с несколькими приложениями

Когда я добавляю в свой проект multidex: true и создаю класс приложения, который простирается от MultiDexApplication, мое время сборки проекта прошло от 20 секунд до 90 секунд. Как сделать что-то быстрее?

4b9b3361

Ответ 1

Если вы похожи на меня, который уже пробовал решение Vic Vu, но по-прежнему не может избежать включения multiDex, вы можете попробовать это (если у вас есть устройство с Android 5.0 и выше).

Примечание. Это ускорит вашу сборку разработки. Ваша сборка будет все еще медленной.

В принципе, вам нужно ввести 2 продукта, один для dev и один для prod.

Добавить multiDexEnabled true

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'
        }
        defaultConfig {
            applicationId "com.something.something"
            targetSdkVersion 23
            versionCode 1
            versionName "1.0.0"

            multiDexEnabled true
        }
    }
dependencies {
  compile 'com.android.support:multidex:1.0.1'
}

И у меня есть класс, который расширяет Application, поэтому мне пришлось переопределить attachBaseContext()

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

Если вы не расширяете Application, просто используйте MultiDexApplication в теге AndroidManifest.xml Application.

Убедитесь, что в Android Studio Build Variants вы указываете на devDebug.

Прочитайте полные инструкции здесь https://developer.android.com/studio/build/multidex.html#dev-build

Ответ 2

Поставка в качестве ответа, потому что это лучше подходит для форматирования.

Чтобы просто ответить на ваш вопрос: Нет, нет способа. Multidex - это процесс, призванный помочь снять бремя ограничения по методу 65k. Этот процесс сложный и будет просто увеличивать время сборки.

Лучшее, что вы можете сделать, это снизить количество ваших методов.

В вашем файле build.gradle(указанном здесь) вы используете:

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

Но если вы посмотрите на самые последние игровые сервисы api, вы можете выбрать, какие услуги вам действительно нужны.

Посмотрите на таблицу 1 на этой странице.

Используйте только те, которые вам нужны. Службы Google в целом находятся где-то около 30 тыс. Методов.

Это должно помочь.

Ответ 3

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

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

dexOptions {
    javaMaxHeapSize "4g"
}

Ответ 4

Это зависит.

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