如何解决APK META-INF / rxjava.properties中复制的重复文件

时间:2017-02-01 01:39:37

标签: android android-gradle rx-java rx-android

我在我的android应用程序上使用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
}
}

如何解决此问题?

8 个答案:

答案 0 :(得分:81)

我遇到了同样的问题。我修复它的方法是在Duplicated file rxjava.properties

中添加{app} gradle中的packagingOptions
android {

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

答案 1 :(得分:5)

我有同样的问题 就我而言,我使用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'

无论如何,你可以在顶部找到一个更好的解决方案

答案 2 :(得分:0)

我遇到了同样的问题并通过将以下代码放在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/*'
    }

答案 3 :(得分:0)

我今天遇到了这个问题并解决了这个问题

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'

答案 4 :(得分:0)

我也有这个问题,我也使用了和你一样的方法,但是因为我有两个模块,我只在模块中修改它依赖Rxjava,最后II修复它是在app gradle中添加packaginOptions

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

答案 5 :(得分:0)

我也有同样的问题,但是可以轻松删除重复的“注释”所有未在我的代码中使用的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'

答案 6 :(得分:0)

如果您在2019年及以后面临此问题,则最有可能是因为您使用的是已弃用的 RxJava 2 CallAdapter.Factory,即

  

com.jakewharton.retrofit:retrofit2-rxjava2-adapter

您将必须删除该依赖项并添加

  

实现'com.squareup.retrofit2:adapter-rxjava2:latest.version'

请从here获取最新版本

答案 7 :(得分:0)

在 build.gradle.app 中添加这段代码

<?php
$my_array = ["name" => "John", "email" => "example@example.com"];

if (!is_array($my_array["email"])) {
    $my_array["email"] = [$my_array["email"]];
}

$my_array["email"][] = "second@example.com";

var_dump($my_array);