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'
}
}