我在 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
在我们的主要应用程序中。
Update:正如我在下面提到的,我检查了三个主题(您可以在下面看到它)。这个问题:可能重复与我在下面提到的类似: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'
}
问题是:
为什么会发生这个问题以及处理它的正确方法是什么?
您应该使用官方适配器secondRxJava 版本:
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 适配器.
我使用命令发现了这个问题gradlew :app dependencies
在 Android Studio 终端中,其中app
是我的库模块的名称。在那里我查找了“rxjava”关键字并找到了它的不同版本。
Update:2月21广场发布适配器正式版,为达尚·米斯特里在评论中指出。答案已更新。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)