Зависимость Android Stduio, множественная ошибка dex, слияние dex
Сегодня я столкнулся с проблемой с несколькими файлами dex, когда я добавил библиотеку ( https://github.com/navasmdc/MaterialDesignLibrary) в мой проект, который использовал другую библиотеку ( Float Labeled EditText).
В ходе исследований я обнаружил, что конфликт заключается в том, что обе библиотеки используют девятилетних андроидов в качестве зависимости. Я протестировал и увидел, что Float Labeled EditText побуждает мой проект добавить "library-2.4.0.jar" в мои внешние библиотеки после синхронизации gradle, в то время как Library Design Library включает файл "nineoldandroids-2.4.0.jar" в "/libs",
Я попытался удалить дубликаты здесь и там, искал решения в течение нескольких часов, но все равно не повезло.
Является ли в этом случае имя файла jar причиной множественной ошибки dex из-за сбоя dex merger? Или DexMerger достаточно умен, чтобы понять, что два разных jar-файла - это одна и та же зависимость?
Я должен сказать, что я до сих пор не совсем понимаю, как работает DexMerger.
Ниже приведена ошибка, которую я получаю:
Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
...
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Lcom/nineoldandroids/animation/Animator$AnimatorListener;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
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)
РЕДАКТИРОВАТЬ 12/5
Я даже пытался поместить только одну копию nineoldandroids-2.4.0.jar в app/libs, удалил все ссылки, включая зависимости репозитория jar или maven из двух других модулей (materialLib и floatlabeledittext). Затем я добавил в двух модулях
compile files(':app/libs/nineoldandroids-2.4.0.jar')
чтобы убедиться, что есть только одна копия файла JAR, на которую ссылаются.
build.gradle в моем приложении
compile project(':materialLib')
compile project(':floatlabeledittext')
под зависимостями. Все еще многократная ошибка dex. Также пробовал очистить, синхронизировать Gradle, сделать недействительными кэши / перезапустить. Есть идеи, что мне не хватает?
1 ответ
У меня тоже была похожая проблема. Два из моих библиотечных проектов использовали nineoldandroids
как зависимость. Поэтому я исключил nineoldandroids
добавив следующий код в build.gradle
файл, который решил проблему:
compile ('com.balysv.materialmenu:material-menu:1.5.4') {
exclude group: 'com.nineoldandroids', module: 'library'
}
Также смотрите эту ссылку, для той же проблемы.