안드로이드 빌드 시, 아래와 같은 에러를 만나는 경우가 있다.
Error:Execution failed for task ':proguardRelease'. > java.io.IOException: The same input jar [libs/gtranslateapi-1.0.jar] is specified twice.
메시지 내용은 ‘gtranslateapi-1.0.jar’가 중복으로 언급된다는 것이다. 이 때, proguard-project.txt나 proguard.cfg를 보면 아래와 같이 되어 있는 경우가 많다.
... -libraryjars libs/gtranslateapi-1.0.jar -keep class com.gtranslate.** { *; } ...
결론부터 이야기하면, ‘-libraryjars ..’ 줄을 지우면 된다. 원래 -libraryjars는 참조하지만 apk에 들어가지 않는 라이브러리를 명시적으로 표시하는 옵션이었다. 불필요하다고 생각할 수도 있으나, 명시적으로 언급하면 JDK 버전을 다양하게 입력할 수 있는 장점이 있다고 proguard의 메뉴얼에서 설명하고 있다.
프로가드의 옵션에 대한 문서가 불충분하여 왜 -libraryjars와 -keep 옵션 사이에 문제가 생기는지는 불분명하다.
참조
- http://stackoverflow.com/questions/24547562/proguard-say-input-jar-file-is-specified-twice
- http://stackoverflow.com/questions/29343214/android-proguard-same-jar-specified-twice
- https://stuff.mit.edu/afs/sipb/project/android/sdk/android-sdk-linux/tools/proguard/docs/index.html#manual/usage.html