RxJava和RxJava 2可以在同一个Android项目中共存吗?

时间:2017-07-07 12:04:12

标签: java android rx-java rx-android rx-java2

我有一个使用RxJava 1的项目。现在我正在构建一个模块组件,并考虑从RxJava 2开始。

执行gradle sync时,一切都很好。但是在编译期间我收到以下错误

  

错误:任务':app:transformResourcesWithMergeJavaResForProductionDebug'执行失败。   com.android.build.api.transform.TransformException:com.android.builder.packaging.DuplicateFileException:在APK META-INF / rxjava.properties中复制的重复文件       File1:/Users/user.name/.gradle/caches/modules-2/files-2.1/io.reactivex/rxjava/1.2.5/b423532b5a3c949cbb799468f83bf566032fe98d/rxjava-1.2.5.jar       File2:/Users/user.name/.gradle/caches/modules-2/files-2.1/io.reactivex.rxjava2/rxjava/2.0.1/57f850a6b317e5582f1dbaff10a9e7d7e1fcdcfb/rxjava-2.0.1.jar

无论如何,我可以将它们共存在一个项目中(但不同的库),或者这绝对不是 -

即。一,我有

compile 'io.reactivex:rxjava:1.2.5'
compile 'io.reactivex:rxandroid:1.2.1'

另一个我有

compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

2 个答案:

答案 0 :(得分:1)

因此,对于this documentation,它们可以在理论上共存,因为这些类位于不同的包中。

你面对的错误信息可能只是由android打包到apk中,它试图导入两个库并找到两个库中都存在的文件(看看this issue)。

您可以通过将以下内容添加到build.gradle的“android”块中来忽略该文件:

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

但是,请确保在更改后正确测试您的项目。

答案 1 :(得分:0)

您需要排除某些rx属性。 加上这个:

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

到你的app build gradle