/ ANDROID

APK 빌드시 'Duplicate files copied in APK {파일 이름}' 해결하기

애플리케이션을 제작하다 보면 여러 라이브러리를 사용하는 경우가 잦습니다.

그러다 보면 각 라이브러리 내 동일한 경로에 동일한 이름을 가진 파일이 있는 경우가 있는데, 이런 일이 발생할 경우 APK 형태로 바이너리를 제작하는 도중 다음과 유사한 형태의 에러 메시지가 표시됩니다.

Error:Execution failed for task ':mobile:transformResourcesWithMergeJavaResForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/NOTICE
    File1: /Users/kunny/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-core/2.2.2/d20be6a5ddd6f8cfd36ebf6dea329873a1c41f1b/jackson-core-2.2.2.jar
    File2: /Users/kunny/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-databind/2.2.2/3c8f6018eaa72d43b261181e801e6f8676c16ef6/jackson-databind-2.2.2.jar

Duplicate files copied in APK META-INF/NOTICE 메시지를 통해 META-INF/NOTICE 라는 파일이 문제라는 것을 확인할 수 있겠네요.

이 문제를 해결하려면 문제가 되는 파일을 패키징하지 않도록 설정하면 됩니다. 이를 설정하려면 안드로이드 Gradle 플러그인 옵션 중 packagingOptions를 사용하면 되며, 위의 예시에서 문제가 된 META-INF/NOTICE 파일을 제외하는 예는 다음과 같습니다.

android {
  packagingOptions {
    exclude 'META-INF/NOTICE'
  }
}
kunny

커니

안드로이드와 오픈소스, 코틀린(Kotlin)에 관심이 많습니다. 전 한국 GDG 안드로이드 운영자 및 GDE 안드로이드로 활동했으며, 현재 구글에서 애드몹 기술 지원을 담당하고 있습니다.

Read More