【问题标题】:Using RxJava 2 and Retrofit 2, adapter version issue使用 RxJava 2 和 Retrofit 2,适配器版本问题
【发布时间】:2016-12-14 10:25:57
【问题描述】:

我在 Android Studio 中的现有应用程序模块中添加了一个新的库模块。主要区别在于添加了 RxJava 2 和 Retrofit 2。 更新新模块的 build.gradle 后,我开始收到下一个错误:

错误:任务“:app:transformResourcesWithMergeJavaResForBetaNewApiDebug”执行失败。 com.android.build.api.transform.TransformException:com.android.builder.packaging.DuplicateFileException:重复文件 在 APK META-INF/rxjava.properties File1 中复制: C:\Users\Gaket.gradle\caches\modules-2\files-2.1\io.reactivex.rxjava2\rxjava\2.0.2\cfccdd18cdfbe7b4773d42c9f3512eeafbe5cbf9\rxjava-2.0.2.jar 文件2: C:\Users\Gaket.gradle\caches\modules-2\files-2.1\io.reactivex\rxjava\1.1.5\ece7b5d0870e66d8226dab6dcf47a2b12afff061\rxjava-1.1.5.jar

我发现 RxJava 存在一些问题(我想尝试 RxJava 2,在这里我看到了 RxJava 1 和 RxJava 2)。添加所有依赖项后立即出现问题,我们在主应用程序中没有使用RxJava

更新: 正如我在下面提到的,我检查了三个主题(你可以在下面看到它)。这个问题:possible duplicate 类似于我在下面已经提到的问题:this one。他们都有解决方法,没有考虑到我在回答中强调的真正问题。 答案是“目前没有从 Retrofit 2 到 RxJava 2 的生产就绪适配器”(详细信息在下面的答案中描述)。

我检查了几个主题:first 是针对具体问题的一些具体解决方案,second 谈论rxbindings,但我不使用它们,其他一些也没有解决我的问题或看起来像总解决方法this one。我尝试用谷歌搜索“rxjava 2 and retrofit 2”,但没有找到解决方案。

这是图书馆的build.gradle

apply plugin: 'com.android.library'
apply plugin: 'com.jakewharton.butterknife'

android {
compileSdkVersion 25
buildToolsVersion "25.0.0"

defaultConfig {
    minSdkVersion 15
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}



dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2',      {
    exclude group: 'com.android.support', module: 'support-annotations'
})

compile "com.android.support:appcompat-v7:$supportLibraryVersion"
compile "com.android.support:recyclerview-v7:$supportLibraryVersion"

compile 'io.reactivex.rxjava2:rxjava:2.0.2'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'com.squareup.okhttp3:okhttp:3.5.0'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile "com.makeramen:roundedimageview:1.3.0"

annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
provided 'javax.annotation:jsr250-api:1.0'
compile 'com.jakewharton:butterknife:8.4.0'

testCompile 'junit:junit:4.12'

}

问题是:
为什么会出现这个问题,正确的处理方法是什么?

【问题讨论】:

  • 不是它不是重复的。我展示了我查看了类似的问题,它们包含解决方法。看看下面的答案。
  • 是的,我明白了......这与如何在 gradle stackoverflow.com/questions/21645071/… 中列出依赖项相当重复
  • 可能更接近这个。但是,对于一个具体问题,我有一个具体的解决方案:将 Retrofit 2 与 RxJava 2 一起使用。仅仅看到现有适配器在内部使用 RxJava 是不够的。
  • 标题具有误导性......因此,如果您不阅读整个问题,您不知道主要问题不是 .properties 文件的副本,但 我看到有RxJava 的一些问题(我想尝试 RxJava 2,在这里我看到了 RxJava 1 和 RxJava 2)
  • 同意。试图更新问题标题。如果你愿意,你可以推荐一个。

标签: android retrofit2 rx-java2 gradle-dependencies


【解决方案1】:

你应该使用 second 版本的 RxJava 的官方适配器:

compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0 // works with RxJava 2

适配器的版本为 2.*.* 并不意味着它像我想的那样是用于 RxJava 2 的。

compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' // won't work with RxJava 2

以前,您应该使用临时版本:这是 Jake Wharton 的存储库,Retrofit 2 to RxJava 2 adapter

我在 Android Studio 终端中使用命令 gradlew :app dependencies 发现了这个问题,其中 app 是我的库模块的名称。在那里我寻找“rxjava”关键字并找到它的不同版本。

更新: 正如 Darshan Mistry 在评论中指出的那样,21 Square 于 2 月发布了适配器的正式版本。答案已更新。

【讨论】:

  • RxJava 2 适配器与 Retrofit 合并,现在你必须删除 compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0' 依赖并添加这个:compile 'com.squareup. retrofit2:adapter-rxjava2:2.2.0'
【解决方案2】:

如果使用不同版本多次添加,需要从项目中删除重复的库。

或者如果两个依赖的库具有不同的版本,那么两者都会有不同的元 inf 版本,这将导致此类问题。

如何检查依赖关系/层次结构 参考this答案

在您的情况下,jar meta inf 中有多个 rxjava.properties 因此,要忽略该重复条目,请将其从应用程序的 build.gradle 中的 android 标记中排除

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

【讨论】:

  • 谢谢,但对我来说,这是一种解决方法,我在其他主题中看到过。我想我找到了解决方案 - 尚未发布适配器的稳定版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
相关资源
最近更新 更多