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

Can RxJava and RxJava 2 coexist in the same Android project?

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

执行gradle同步时,一切正常。但是在编译过程中出现了以下错误

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForProductionDebug'. com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in 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'

您需要排除一些 rx 属性。 添加:

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

到您的应用构建 gradle

所以关于 this documentation 它们理论上可以共存,因为 类 位于不同的包中。

您遇到的错误消息可能只是由于 android 打包到 apk 中导致的,它尝试导入两个库并找到一个存在于两个库中的文件(查看 this issue).

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

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

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