RxJava 1.x와 2.x 버전이 있습니다.

모든 라이브러리가 아직 RxJava 2.x 버전 대응을 한 것은 아닙니다.

그에 따라서 1.x와 2.x 버전을 함께 사용하게 됩니다.

Gradle 동기화 중에는 오류가 발생하지 않지만, run을 진행하면 아래와 같은 오류가 발생할 수 있습니다.

이 오류를 해결하는 방법을 간단하게 정리합니다.

Error:Execution failed for task ‘:app:transformResourcesWithMergeJavaResForDebug’. > com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/rxjava.properties File1: /Users/tae-hwan/.gradle/caches/modules-2/files-2.1/io.reactivex/rxjava/1.2.3/7fe1a94c1aeb958acc876fe616922cc191f3222c/rxjava-1.2.3.jar File2: /Users/tae-hwan/.gradle/caches/modules-2/files-2.1/io.reactivex.rxjava2/rxjava/2.0.1/57f850a6b317e5582f1dbaff10a9e7d7e1fcdcfb/rxjava-2.0.1.jar


작성한 Gradle

작성한 Gradle은 다음과 같습니다. RxJava 2sqlbrite입니다.

sqlbrite는 아직 Rx 2.x 버전을 지원하지 않습니다. 그래서 RxJava 1.x 버전에 dependencies가 걸려있습니다.

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.3"

    // 생략
}

dependencies {
    compile "io.reactivex.rxjava2:rxjava:$rootProject.ext.rxjavaVersion"
    compile "com.squareup.sqlbrite:sqlbrite:$rootProject.ext.sqlbriteVersion"
}

위를 Gradle 싱크 상에는 문제가 없지만 Run을 통해 packaging 진행을 하면 오류가 발생합니다.

com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/rxjava.properties


해결 방법

RxJava 1.x와 2.x에서 META-INF 파일 중복으로 나오기 때문에 packagingOptions에 exclude 처리합니다.

참고로 .gradle 폴더의 caches 폴더에 위와 같은 .jar를 확인해볼 수 있습니다.

그래서 기존 gradle에 다음과 같이 추가하여 해결할 수 있습니다.

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.3"

    // 생략

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

dependencies {
    compile "io.reactivex.rxjava2:rxjava:$rootProject.ext.rxjavaVersion"
    compile "com.squareup.sqlbrite:sqlbrite:$rootProject.ext.sqlbriteVersion"
}


마무리

위와 같이 작업해주면 오류가 해결되고, packaging 처리와 앱 동작에 문제가 없게 됩니다.

감사합니다.


Tae-hwan

Android, Kotlin .. Create a content development.