Как разрешить дубликаты файлов, скопированных в APK META-INF/rxjava.properties

Я использую rxjava и rxvolley на моей андроидной установке. Когда я пытаюсь запустить его, я получаю эту ошибку

Execution failed for task ':testapp:transformResourcesWithMergeJavaResForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/rxjava.properties
            File1: C:\Users\Daniel\.gradle\caches\modules-2\files-2.1\io.reactivex\rxjava\1.1.0\748f0546d5c3c27f1aef07270ffea0c45f0c42a4\rxjava-1.1.0.jar
            File2: C:\Users\Daniel\.gradle\caches\modules-2\files-2.1\io.reactivex.rxjava2\rxjava\2.0.3\d2f725668bd22e21170381b23f8fbdf72c69d886\rxjava-2.0.3.jar

У меня есть файл exclude.gradle, подобный этому

android {
packagingOptions {
    exclude 'META-INF/DEPENDENCIES.txt'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/rxjava.properties'
    exclude 'META-INF/rxjava.PROPERTIES'
    exclude 'META-INF/RXJAVA.properties'
    exclude 'META-INF/RXJAVA.PROPERTIES'
    exclude 'META-INF/rxjava'
    exclude 'META-INF/RXJAVA'
}

lintOptions {
    abortOnError false
}
}

Как я могу исправить эту проблему?

Ответ 1

У меня такая же проблема. Я исправил это, добавив параметры packagingOptions в приложении, как описано в Дублированном файле rxjava.properties

android {

    defaultConfig {
    }
    buildTypes {
    }
    packagingOptions{
        exclude 'META-INF/rxjava.properties'
    }
}

Ответ 2

Я была такая же проблема.
В моем случае я использую Retrofit2 но я предполагаю, что проблема с rx libraries

Это build.gradle(module:app) я использую и в моем случае работает.

compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'

compile 'io.reactivex:rxandroid:1.1.0' //<-use this
compile 'io.reactivex:rxjava:1.1.3'    //<-use this

compile 'com.squareup.okhttp3:okhttp:3.1.2'
compile 'com.squareup.okhttp3:logging-interceptor:3.0.1'

Как бы то ни было, есть лучшее решение, которое вы можете увидеть сверху.

Ответ 3

Я столкнулся с той же проблемой и исправил ее, указав ниже код в файле app/build.gradle. Обратите внимание, что вы должны поместить "*" в конец пути, чтобы исключить все файлы внутри папки. Вам нужно будет изменить путь к файлам, которые будут исключены в приведенном ниже коде, в зависимости от описания ошибки.

compileSdkVersion 25
    buildToolsVersion "24.0.3"

    packagingOptions {
        exclude 'com/google/appengine/repackaged/org/apache/commons/codec/language/bm/*'
        exclude 'com/google/appengine/repackaged/org/codehaus/jackson/impl/*'
        exclude 'com/google/appengine/repackaged/org/apache/commons/codec/language/*'
    }

Ответ 4

У меня была эта проблема сегодня и исправлена ​​эта проблема

compile 'com.squareup.retrofit2:retrofit:2.2.0'
compile 'com.squareup.retrofit2:converter-gson:2.2.0'
compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'

//RxJava dependencies
compile 'io.reactivex.rxjava2:rxandroid:2.0.0'
compile 'io.reactivex.rxjava2:rxjava:2.0.2'
compile 'org.reactivestreams:reactive-streams:1.0.0'

Ответ 5

У меня также есть эта проблема, я также использовал тот же метод, что и вы, но из-за того, что у меня есть два модуля, я меняю его только в модуле, который зависит от Rxjava, И наконец, исправлено II, добавление packaginOptions в приложение gradle

packagingOptions {
    exclude 'META-INF/rxjava.properties'
}

Ответ 6

У меня также есть та же проблема, но я легко удалил дублированный "комментарий" всех зависимостей, связанных с Rxjava, который он не использует в моем коде.

//RxJava removes or comment duplicated and not used dependencies.
      //  implementation 'com.squareup.retrofit2:adapter-rxjava:2.4.0'
       // implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
       // implementation 'io.reactivex.rxjava2:rxjava:2.1.13'

Ответ 7

Если вы столкнулись с этой проблемой в 2019 году и выше, скорее всего, это связано с тем, что вы используете устаревшую версию RxJava 2 CallAdapter.Factory, т.е.

com.jakewharton.retrofit: retrofit2-rxjava2-адаптер

вам придется удалить эту зависимость и добавить это

реализация 'com.squareup.retrofit2: adapter-rxjava2: latest.version'

пожалуйста, получите последнюю версию здесь