Щоб запустити dex в процесі, демону Gradle потрібна більша купа. На даний момент він має приблизно 910 МБ


75

Я отримую цю помилку Gradle щоразу, коли запускаю програму. Помилка:

Щоб запустити dex в процесі, демону Gradle потрібна більша купа. На даний момент він має приблизно 910 МБ.

Для швидшої збірки збільште максимальний розмір купи для демона Gradle до понад 2048 МБ.

Для цього встановіть org.gradle.jvmargs = -Xmx2048M у проекті gradle.properties. Для отримання додаткової інформації див. Https://docs.gradle.org/current/userguide/build_environment.html

Ось мій файл build.gradle (модуль: додаток):

apply plugin: 'com.android.application'

    android {
        compileSdkVersion 23
        buildToolsVersion "23.0.3"

        defaultConfig {
            applicationId "mobileapp.tech2dsk"
            minSdkVersion 15
            targetSdkVersion 23
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:23.3.0'
        compile 'com.android.support:design:23.3.0'
    }

І ось мій файл build.gradle (Project):

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

і ось мій файл gradle.properties:

# Project-wide Gradle settings.

# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.

# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true

Відповіді:


51

Додайте у свій Build.gradle

android {
 dexOptions {
    javaMaxHeapSize "4g"
  }
}

Докладніше - Android Gradle: Що таке javaMaxHeapSize "4g"?


1
в додатку Модуль або у файлі проекту
Рохіт Манчікалапаті

1
build.gradle (додаток для модулів)
Веереш Шарантімат

якщо ви не маєте розуму, будь ласка, скажіть мені, чому трапляються ці помилки
Рохіт Манчікалапаті

1
вибачте, це також не спрацьовує, отримуючи однакову помилку зі
зміною

3
Ви також повинні додати org.gradle.jvmargs = -Xmx2048m Ви можете змінити число 2048 відповідно до оперативної пам'яті, яку ви виділяєте в купу.
5511002233

50

Оновлення від 25 червня 2017 року

У Google IO 2017 було кілька оновлень щодо цієї теми. Більше не рекомендується встановлювати прапор на dexOptions, тому, якщо у вас є щось на зразок наступного, ви можете його видалити.

dexOptions {
   javaMaxHeapSize "2g"
}

Оригінальна відповідь:

Android Studio 2.1 дозволяє Dex In Process, який ділиться віртуальною машиною з Gradle, щоб скоротити час побудови. Через це необхідно збільшити розмір демона Gradle, щоб включити ці процеси Dex.

Принаймні, це потрібно 2 концерти пам'яті, але ви можете спробувати з трьома, якщо можете собі це дозволити.

gradle.properties.

org.gradle.jvmargs=-Xmx3072m

За замовчуванням максимальний розмір купи Java становить один концерт, але якщо ви змінили його у файлі build.gradle ...

build.gradle (додаток)

dexOptions {
   javaMaxHeapSize "2g"
}

... вам слід відповідно змінити розмір демона Gradle (він повинен бути більшим, щоб відповідати купі).

Примітки:

  • Зверніть увагу, що вказані вище цифри різняться залежно від машини.

1
Для тих , хто використовує Йонні побудувати додаток, ви можете org.gradle.jvmargs=-Xmx3072mдо~/.gradle/gradle.properties
Garrett

Цю відповідь слід прийняти як правильну. Дякую, до речі
LeonardoSibela

У Android Studio 3.0 видалення javaMaxHeapSize повністю зменшило час мого нарощування з 90 секунд до 7 секунд.
dell116

Протягом багатьох років я мав це у своєму градле, в даний час на рівні 4 г, і ненавидів, що з часом його завжди потрібно буде (піднімати). Тепер, мабуть, я можу просто позбутися цього безладу. Усунення цього значно зменшило час моєї збірки gradle, як прокоментував dell116.
Androidcoder

24

Просто залиште це на своєму gradle.properties:

org.gradle.jvmargs=-Xmx2048m 

Ви можете подивитися на цю статтю як на посилання.


1
Фантастично! Проблема зводила мене з розуму, і це негайно це розібрало. Дякую
Клайв Саржант

у проектах Кордови файл gradle.properties слід створювати в платформах / android / gradle.properties
Олексій

Я не знаходжу цей файл. У мене є лише project.properties
Sachin HR

14

Я знаю, що пізно для відповіді, але сподіваюся, що це комусь допоможе

Я пробував багато речей та багато шукав, але у мене нічого не працює, включаючи наступне та build.gradle (додаток) також не працює в моєму випадку

android {
  dexOptions {
    javaMaxHeapSize "4g"
  }
}

Також ви можете спробувати додати на ваш gradle.properties :

org.gradle.jvmargs=-Xmx2048m 

У моєму випадку проблема полягає у використанні процесора, коли я будую apk, я запускаю багато процесів, я просто вбиваю деякі процеси, такі як genymotion, skype, сафарі і т.д., і, недійсним кеш / перезапуск, це працює для мене.


вітаю, мабуть, тому що загальний розмір проекту є великим для розміру купи Java за замовчуванням, все ще дякую. тримай це качало брат!
ralphgabb

6

Змініть або створіть файл з назвою gradle.properties у наступному каталозі.

Для Mac /Users/USER_NAME/.gradle/gradle.properties

Для Linux /home/USER_NAME/.gradle/gradle.properties

Для Windows, C: \ Users \ USER_NAME.gradle \ gradle.properties

та застосувати зазначені вище зміни. Нарешті це повинно виглядати,

org.gradle.daemon=true

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
org.gradle.parallel=true

org.gradle.configureondemand=true

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

Будь ласка, перейдіть за цим посиланням https://tausiq.wordpress.com/2015/02/24/android-speed-up-gradle-build-process-in-android-studio/


1
"вгорі"? Можливо, ви маєте на увазі щось на зразок "підписатися"?
Bö macht Blau

У цьому місці немає файлу gradle.properties
Sachin HR

Дякую! Спробував все, і це був лише один, який працював у мене! Здавалося, Java ігнорує всі інші налаштування, перелічені в gradle.properties та build.gradle тощо
Джеймс Трікі

3

Ви можете продовжувати і змінюватись build.gradleтак (як запропонував Веереш Чарантімат):

android {
 dexOptions {
    javaMaxHeapSize "2g"
 }
}

І тоді вам, можливо, доведеться возитися з матеріалами MultiDex (це вам знадобиться для великих проектів для Android). Але ваша проблема може бути простішою. Існує певна ймовірність того, що ви скомпілюєте та включите у свій проект деякі непотрібні бібліотеки. Я зіткнувся з цим питанням у своєму крихітному проекті. Ось що я зробив, щоб це виправити:

Я видалив це з build.gradle:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

І я вручну видалив свою папку збірки з кореня програми. Проблема вирішена.


2

Це помилка чи попередження?

Іноді це лише попередження, і я можу вдало його створити:

:transformClassesWithDexForDebug
To run dex in process, the Gradle daemon needs a larger heap.
It currently has approximately 910 MB.
For faster builds, increase the maximum heap size for the Gradle daemon to more than 2048 MB.
To do this set org.gradle.jvmargs=-Xmx2048M in the project gradle.properties.
For more information see https://docs.gradle.org/current/userguide/build_environment.html
:mergeDebugJniLibFolders UP-TO-DATE
:transformNative_libsWithMergeJniLibsForDebug
:processDebugJavaRes UP-TO-DATE
:transformResourcesWithMergeJavaResForDebug
:validateDebugSigning
:packageDebug
:zipalignDebug
:assembleDebug
:cdvBuildDebug

BUILD SUCCESSFUL

Total time: 3 mins 44.991 secs
Built the following apk(s):
(...)

Тож проблема, яка може перешкодити успішній збірці, може бути іншою ...


2

У WINDOW'S відкрийте gradle.properties з ~ \ Users \ UserName \ .gradle, як показано нижче: для отримання додаткової інформації введіть тут опис посилання

введіть тут опис зображення

і не забудьте встановити його значення як мінімум до 4608M, як показано нижче для швидшої збірки org.gradle.jvmargs = -Xmx4608M

Як тільки ви це зробите, ви зможете побачити денну та нічну різницю в швидкості побудови вашого додатка ...


3
Там немає файлу з ім'ям: gradle.propertiesв C:\Users\USER\.gradle.
fWd82

2

Я впевнений , що javaMaxHeapSizeі org.gradle.jvmargsє взаємовиключними.

  • javaMaxHeapSizeце старий спосіб зробити це, де dex працює поза процесом. Це буде аргументом процесу dex.
  • org.gradle.jvmargsце новий спосіб зробити це, за допомогою dex всередині процесу gradle. Це максимальна пам’ять для всього процесу (gradle, включаючи dex)

Що застереження говорить, це org.gradle.jvmargsмає бути> = javaMaxHeapSize (what you used previously for dex)+ 512M (an estimation of what's needed for gradle own needs).

Отже, якщо ви хочете використовувати dex в процесі (що швидше), вам не слід хвилюватись javaMaxHeapSize. Просто встановіть org.gradle.jvmargsправильне значення для вашого проекту / машини.



1
  • Будь ласка, перевірте спочатку gradle.propertises у кореневому каталозі вашого проекту.

Якщо це відсутність, будь ласка, створіть файл таким чином, то додайте org.gradle.jvmargs = -Xmx1536m

інакше, якщо вже є, збільште розмір.

Я зіткнувся з тією ж проблемою, де я вирішив таким чином.


1

Наприклад, у gradle.propertiesкорені вашого проекту.

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m


-4

Спробуйте це

defaultConfig {
    ...

    // Enabling multidex support.
    multiDexEnabled true
}

Вітаємо! Ваша відповідь не стосується проблеми. Ви топите як себе, так і користувачів SO. Видаліть цю відповідь, щоб повернути свою позитивну оцінку. Дякую.
fWd82
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.