Зависимость 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'
}

Также смотрите эту ссылку, для той же проблемы.

Другие вопросы по тегам