だらだら〜自由自在〜

インディーゲーム制作チーム GAME GABURI でプログラム担当してます

UnityCloudBuildでビルドエラー "Dex cannot parse version 52 byte code."

Androidで手元ではビルド成功するのにUCB上ではビルドエラーが出る…!という状況がまぁまぁあるのですが、そのパターンの解決策の1つとしてさっき分かったものご紹介します。

まず出るエラーはこんな

22567: [Unity] EXCEPTION: CommandInvokationFailure: Gradle build failed.
22568: [Unity] /BUILD_PATH/jdk1.8.0_121.jdk/Contents/Home/bin/java -classpath "/UNITY_PATH/Unity/Unity-2017_3_1p3/PlaybackEngines/AndroidPlayer/Tools/gradle/lib/gradle-launcher-4.0.1.jar" org.gradle.launcher.GradleMain "-Dorg.gradle.jvmargs=-Xmx2048m" "assembleDebug"
22569: [Unity] stderr[
22570: [Unity] Dex: Error converting bytecode to dex:
22571: [Unity] Cause: Dex cannot parse version 52 byte code.
22572: [Unity] This is caused by library dependencies that have been compiled using Java 8 or above.
22573: [Unity] If you are using the 'java' gradle plugin in a library submodule add
22574: [Unity] targetCompatibility = '1.7'
22575: [Unity] sourceCompatibility = '1.7'
22576: [Unity] to that submodule's build.gradle file.
22577: [Unity] UNEXPECTED TOP-LEVEL EXCEPTION:
22578: [Unity] java.lang.RuntimeException: Exception parsing classes
22579: [Unity] Caused by: com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
22580: [Unity] 1 error; aborting

何日か悩んだ末にビルドシステムがGradleっぽいことに気づき、UCBのConfigで「高度な設定 > Android Build System > Internal」にしてみる。そしたら治った。手元ではInternalでビルドしていたから再現しなかったのか~。
元々なんに設定していたかというとGardleでもInternalでもなかった。デフォルトの設定でビルドを作成したときはこの状態で、実際ビルドするときにはGradleが使われるということだろうか。

いやー、しかしリリース近いのにこういうことが起きると嫌だよね~。