[英]Using RxJava 2 and Retrofit 2, adapter version issue
我在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
。
更新:正如我在下面提到的,我检查了三个主题(您可以在下面看到)。 这个问题: 可能的重复类似于我在下面提到的那个: 这一个 。 他们两个都有解决方法,没有考虑我在答案中强调的真正问题。 答案是 “目前还没有从Retrofit 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'
}
问题是:
为什么会出现这个问题以及处理它的正确方法是什么?
您应该将官方适配器用于第二版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到RxJava 2适配器 。
我在Android Studio终端中使用命令gradlew :app dependencies
发现了这个问题,其中app
是我的库模块的名称。 在那里我查找了“rxjava”关键字并找到了它的不同版本。
更新: 2月,21 Square发布了适配器的官方版本,正如Darshan Mistry在评论中指出的那样。 答案已更新。
如果使用不同版本添加多次,则需要从项目中删除重复的库。
或者如果两个依赖且具有不同版本的库都将具有不同的meta inf版本,这将导致此类问题。
如何检查依赖关系/层次结构参考此答案
在你的情况下,jar meta inf中有多个rxjava.properties
所以要忽略那个重复的条目将它从android
标签中的应用程序的build.gradle
中排除
packagingOptions {
exclude 'META-INF/rxjava.properties'
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.