Android Studio – Зависимости Gradle – Как исключить «болты» из «facebook»?

Ошибка: не удалось выполнить задачу ':app:transformClassesWithJarMergingForDebug'.

com.android.build.api.transform.TransformException: java.util.zip.ZipException: повторяющаяся запись: Bolts/AggregateException.class

Вот так выглядит ошибка. Я знаю, что bolts используется в 3 моих зависимостях, com.facebook.fresco:fresco:0.10.0, com.parse:parse-android:1.13.1 и банке ePOS2.jar.

Я пробовал несколько решений, начиная с

 compile('com.facebook.fresco:fresco:0.10.0') {
         exclude group: 'com.parse.bolts', module: 'bolts-android'
     }

Но я все еще получаю ошибку. Я также попытался исключить некоторые части из com.parse:parse-android1.13.1, как показано в этом сообщении но затем я получаю сообщение об ошибке отсутствующих классов.

Я также включил multidex, как показано в этом сообщении но ошибка все еще возникает.

Я попытался исключить com/parse/bolts/AggregateException.class, как показано в этом сообщении, все равно возникает ошибка.

Самое странное, что если я включу InstantRun, я смогу запустить приложение, но вылетит, когда оно использует определенный класс из jar.

java.lang.UnsatisfiedLinkError: com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader

Итак, я подумал, можно ли исключить этот определенный класс AggregateException.class из jar или com.parse:parse-android:1.13.1?

ИЗМЕНИТЬ

compile('com.facebook.fresco:fresco:0.10.0') { исключить модуль: 'bolts-android'}

OR

compile('com.facebook.fresco:fresco:0.10.0') { группа исключения: 'com.parse.bolts', модуль: 'bolts-android'}

Я пытался исключить bolts из com.facebook.fresco:fresco:0.10.0, но что бы я ни делал, они все равно появляются:

    +--- com.android.support:multidex:1.0.1                                  
+--- com.android.support:design:23.3.0
|    +--- com.android.support:appcompat-v7:23.3.0
|    |    +--- com.android.support:support-vector-drawable:23.3.0
|    |    |    \--- com.android.support:support-v4:23.3.0
|    |    |         \--- com.android.support:support-annotations:23.3.0
|    |    +--- com.android.support:animated-vector-drawable:23.3.0
|    |    |    \--- com.android.support:support-vector-drawable:23.3.0 (*)
|    |    \--- com.android.support:support-v4:23.3.0 (*)
|    +--- com.android.support:support-v4:23.3.0 (*)
|    \--- com.android.support:recyclerview-v7:23.3.0
|         +--- com.android.support:support-v4:23.3.0 (*)
|         \--- com.android.support:support-annotations:23.3.0
+--- com.makeramen:roundedimageview:2.2.1
+--- com.facebook.fresco:fresco:0.10.0
|    +--- com.facebook.fresco:drawee:0.10.0
|    |    +--- com.android.support:support-v4:23.1.1 -> 23.3.0 (*)
|    |    \--- com.facebook.fresco:fbcore:0.10.0
|    +--- com.facebook.fresco:fbcore:0.10.0
|    \--- com.facebook.fresco:imagepipeline:0.10.0
|         +--- com.android.support:support-v4:23.1.1 -> 23.3.0 (*)
|         +--- com.nineoldandroids:library:2.4.0
|         +--- com.facebook.fresco:fbcore:0.10.0
|         +--- com.facebook.fresco:imagepipeline-base:0.10.0
|         |    +--- com.android.support:support-v4:23.1.1 -> 23.3.0 (*)
|         |    +--- com.nineoldandroids:library:2.4.0
|         |    +--- com.facebook.fresco:fbcore:0.10.0
|         |    \--- com.parse.bolts:bolts-android:1.1.4 !!! HERE
|         \--- com.parse.bolts:bolts-android:1.1.4  !!! HERE
+--- com.facebook.fresco:imagepipeline-okhttp:0.7.0
|    +--- com.squareup.okhttp:okhttp:2.3.0
|    |    \--- com.squareup.okio:okio:1.3.0
|    +--- com.facebook.fresco:imagepipeline:0.7.0 -> 0.10.0 (*)
|    \--- com.facebook.fresco:fbcore:0.7.0 -> 0.10.0
+--- com.parse:parse-android:1.13.1
|    \--- com.parse.bolts:bolts-tasks:1.4.0
\--- uk.co.chrisjenx:calligraphy:2.2.0
     \--- com.android.support:appcompat-v7:23.1.1 -> 23.3.0 (*)

person AlexAndro    schedule 30.08.2016    source источник


Ответы (2)


Ошибка duplicate entry обычно возникает из-за того, что упаковщик пытается упаковать несколько разных версий одного и того же класса.

Похоже, вы исключили только определенную часть библиотеки болтов. Это заставляет вашу сборку смешивать 2 разные версии оставшихся частей библиотеки, которые, вероятно, все еще имеют некоторые перекрывающиеся классы.

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

В моей сборке Gradle я исключил болты из всех модулей, зависящих от болтов, например так:

compile('com.facebook.android:facebook-android-sdk:4.14.1') {
    exclude group: 'com.parse.bolts'
}

А потом заставил все модули использовать последние болты:

compile 'com.parse.bolts:bolts-android:1.+'
person Vaiden    schedule 30.08.2016
comment
Рад слышать - person Vaiden; 31.08.2016

У меня возникла проблема при создании APK, и я использовал:

    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.android.support:cardview-v7:23.3.0'
    compile ('com.sromku:simple-fb:4.1.1')      

затем я изменил это на:

    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.android.support:cardview-v7:23.3.0'
    compile ('com.sromku:simple-fb:4.1.1'){
        exclude group: 'com.parse.bolts'
    }

и это сработало как ШАРМ!

person Dipak Poudel    schedule 18.01.2017
comment
Добро пожаловать в Stack Overflow! Ответы только на код не очень полезны. Пожалуйста, отредактируйте свой ответ, чтобы объяснить, почему ваш код решает исходную проблему. - person Joe C; 19.01.2017
comment
Добро пожаловать в Stack Overflow! Похоже, вы решили чью-то проблему. Поздравляем! Как писал @JoeC, добавление объяснения сделает ваш ответ еще более ценным. - person Ellen Spertus; 19.01.2017