유니티로 게임 개발 막바지 상황에서 기저귀값좀 벌어보겠다고 Admob Plugin을 넣었는데 컴파일 에러가 발생하네요.

일단 문제의 원인을 찾아서 해결은 했는데 이건 By-pass 방법일듯해서 당분간 실질적인 해결책을 찾을때까지는 요렇게 우회하는 방법으로 사용해야겠네요.


문제의 에러코드입니다.


CommandInvokationFailure: Gradle build failed.

C : \Program Files\Java\jdk1.8.0_92\bin\java.exe - classpath "C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle\lib\gradle-launcher-2.14.jar" org.gradle.launcher.GradleMain "assembleRelease"


stderr[

Note:there were 7 duplicate class definitions.

(http ://proguard.sourceforge.net/manual/troubleshooting.html#duplicateclass)

Warning: com.google.android.gms.internal.zzbga : can't find referenced method 'boolean isInstantApp()' in library class android.content.pm.PackageManager

Warning : com.google.android.gms.internal.zzbgb : can't find referenced method 'boolean isInstantApp(java.lang.String)' in library class android.content.pm.PackageManager

Warning : there were 2 unresolved references to library class members.

You probably need to update the library versions.

(http ://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedlibraryclassmember)


FAILURE: Build failed with an exception.


* What went wrong :

Execution failed for task ':transformClassesAndResourcesWithProguardForRelease'.

> java.io.IOException: Please correct the above warnings first.


* Try :

Run with --stacktrace option to get the stack trace.Run with --info or --debug option to get more log output.

]


이 문제를 해결하기 위한 방법을 Proguard 사이트에서 찾았는데 내용은 아래와 같습니다.


https://www.guardsquare.com/en/proguard/manual/troubleshooting#unresolvedlibraryclassmember


Note: duplicate definition of program/library class
Your program jars or library jars contain multiple definitions of the listed classes. ProGuard continues processing as usual, only considering the first definitions. The warning may be an indication of some problem though, so it's advisable to remove the duplicates. A convenient way to do so is by specifying filters on the input jars or library jars. You can switch off these notes by specifying the -dontnote option.

android The standard Android build process automatically specifies the input jars for you. There may not be an easy way to filter them to remove these notes. You could remove the duplicate classes manually from your libraries. You should never explicitly specify the input jars yourself (with -injars or -libraryjars), since you'll then get duplicate definitions. You should also not add libraries to your application that are already part of the Android run-time (notably org.w3c.dom, org.xml.sax, org.xmlpull.v1, org.apache.commons.logging.Log, org.apache.http, and org.json). They are possibly inconsistent, and the run-time libraries would get precedence anyway.


근데 잘 못하겠더라구요. 그래서 가장 단순하게 이 문제를 우회하는 방법을 찾아봤습니다.

이 에러코드를 우회하는 방법은 아래와 같습니다. 안드로이드 빌드 옵션을 살펴보시면 Minify 라고 하는 섹션에 Release 란에 "Proguard"로 되어 있을 것입니다. 여기서 Proguard로 선택되어 있다면 위에 메시지 처럼 에러가 발생하는데



이 부분을 꺼 버리고 빌드하게 되면 아무런 문제없이 컴파일이 됩니다.



참고. Minify 이 옵션은 Android Build System 세팅을 Interanl로 하게되면 비활성화 되고 Gradle(New)로 선택하게 되면 활성화 되는 부분입니다.


이 방법은 근본적인 해결책은 아닌듯합니다만, 당장 컴파일하고 테스트 할때 유용하게 사용할 수 있을것 같네요. Proguard에 대해서 자세하게 알고 싶은 분들은 아래 링크를 참조해 주세요.


https://www.guardsquare.com/en