Com.android.dex.DexException: несколько файлов dex определяют
Я использую Android Studio 0.4.2. Открыт проект от друга, который использует 0.3.2. Пытался скомпилировать, но получил исключение.
Execution failed for task ':JuiceTV:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
C:\Program Files\Android\android-studio\sdk\build-tools\19.0.0\dx.bat --dex --output D:\Antik TV - Android\JuiceTV\build\libs\JuiceTV-debug.dex D:\Antik TV - Android\JuiceTV\build\classes\debug D:\Antik TV - Android\JuiceTV\build\dependency-cache\debug D:\Antik TV - Android\JuiceTV\build\pre-dexed\debug\classes-ffe9228b675e120536184b1056a59fcfc91e4006.jar D:\Antik TV - Android\JuiceTV\build\pre-dexed\debug\commons-io-2.4-27f1277ba9e42db4b52f3f658da01a26db29b896.jar D:\Antik TV - Android\JuiceTV\build\pre-dexed\debug\joda-time-2.2-4549e2440d188ee3fb4f85702e03eace13e8ad18.jar D:\Antik TV - Android\JuiceTV\build\pre-dexed\debug\mmlib-04a4fd100008bfbc84f0c25fd219e50eb7de9d0b.jar D:\Antik TV - Android\JuiceTV\build\pre-dexed\debug\support-v4-18.0.0-ba816fc3ae00ee0fdb20e5444c1d8bb88647d773.jar
Error Code:
2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Lcom/sevensoft/mmlib/AttachedOverlayWindow$1;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:593)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:551)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:532)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:169)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:187)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
at com.android.dx.command.dexer.Main.run(Main.java:230)
at com.android.dx.command.dexer.Main.main(Main.java:199)
at com.android.dx.command.Main.main(Main.java:103)
Пробовал это:
- удаление *.apk файлов
- поиск зависимостей с gradle -q зависимостями
но ничего не получил
JuiceTV Gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.7.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
android {
compileSdkVersion 18
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 14
targetSdkVersion 18
}
}
dependencies {
compile project(':TVbase')
}
BaseTv Gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.7.+'
}
}
apply plugin: 'android-library'
repositories {
mavenCentral()
}
android {
compileSdkVersion 18
buildToolsVersion '19.0.0'
defaultConfig {
minSdkVersion 14
targetSdkVersion 18
}
}
dependencies {
compile 'com.android.support:support-v4:18.0.+'
compile files('libs/joda-time-2.2.jar')
compile files('libs/mmlib.jar')
compile files('libs/commons-io-2.4.jar')
}
Любые новые подсказки?
Ответы
Ответ 1
У меня была одна и та же проблема, и я обнаружил, что мое приложение и библиотека ссылаются на 2 версии одной и той же банки.
Я выполнил поиск, и мой файл application.iml четко показал дубликаты.
<orderEntry type="library" exported="" name="crittercism_v3_0_11_sdkonly" level="project" />
<orderEntry type="library" exported="" name="crittercism_v4_4_0" level="project" />
Я заменил старую версию v3 версией v4 и работал после чистого восстановления.
Ответ 2
Это происходит, когда модуль имеет зависимость от другого модуля и того же самого модуля.
Ответ 3
У меня была эта проблема на android studio 1.0, наряду с удалением повторяющейся записи для библиотек вы также должны попытаться удалить папки bin и сделать чистую сборку.
Ответ 4
Как и для Android Gradle 1.0, это может произойти несколькими способами:
-
Если вы используете только репозитории Maven, вы можете столкнуться с этой проблемой, если два разных артефакта включают один и тот же файл класса.
Например, библиотека Mockito-all включает в себя Hamcrest, и поэтому вы вызываете эту ошибку, если бы вы включили обе зависимости в сборку.
Обратите внимание, что если вы включили мини-код, вы не увидите ошибку до тех пор, пока не начнете использовать Hamcrest. Способ решения этой проблемы - использовать версию библиотеки, которая не включает другие классы пакетов (в этом случае Mockito-core).
-
Если вы объявляете зависимую локальную jar/aar (compile 'com.some.library:[email protected]'
), которая уже включена другими зависимостями на основе maven.
В этой ситуации ваша локальная декларация не отменяется с помощью Maven, потому что информация pom недоступна. Обычно вы создаете локальный репозиторий maven на основе файлов для aar, чтобы обойти это.
В любом случае для очистки изменений требуется чистый проект.
Ответ 5
При отключении multiDex и инкрементном включении dexOptions это также вызовет эту проблему.
defaultConfig {
multiDexEnabled = false
}
dexOptions {
javaMaxHeapSize "4g"
incremental true
}