使用RxJava 2和Retrofit 2,适配器版本问题

Gak*_*ket 4 android retrofit2 gradle-dependencies rx-java2

我在Android Studio中为现有的应用程序模块添加了一个新的库模块.主要的区别是添加了RxJava 2和Retrofit 2.更新了new模块的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 File2: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主应用程序中使用.

更新: 正如我在下面提到的,我检查了三个主题(您可以在下面看到).这个问题:可能的重复类似于我在下面提到的那个: 这一个.他们两个都有解决方法,没有考虑我在答案中强调的真正问题.而答案是 "没有的生产就绪适配器从改造2至RxJava 2的时刻"(以下答案中描述的全部细节).

我检查了几个主题:首先 是一个具体问题的具体解决方案,第二个谈论rxbindings,但我不使用它们,其他一些也没有解决我的问题或看起来像这个完全解决方法.我试图谷歌"rxjava 2和改造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'

}
Run Code Online (Sandbox Code Playgroud)

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

Gak*_*ket 20

您应该将官方适配器用于第二版RxJava:

compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0 // works with RxJava 2
Run Code Online (Sandbox Code Playgroud)

2.*.*正如我所想,适配器具有版本的事实并不意味着它适用于RxJava 2.

compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' // won't work with RxJava 2
Run Code Online (Sandbox Code Playgroud)

以前,您应该使用临时版本:以下是Jake Wharton的存储库,其中包含Retrofit 2到RxJava 2适配器.

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

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

  • RxJava 2适配器与Retrofit合并,现在你必须删除编译'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'dependanay并添加这个:compile'c​​om.squareup.retrofit2:adapter-rxjava2:2.2. 0' (2认同)

归档时间:

查看次数:

5735 次

最近记录:

7 年,4 月 前