TransformExceptionやDexArchiveBuilderExceptionやGradle build failedというAndroidビルドエラー【Unity】

UnityでAndroidビルドする際に起きたエラー。
AdMobとNCMBを利用していましたが、NCMBは関係あるかわかりません。


com.android.build.api.transform.TransformException:
com.android.builder.dexing.DexArchiveBuilderException:
com.android.builder.dexing.DexArchiveBuilderException: Failed to process…

だったり、

CommandInvokationFailure: Gradle build failed. /Applications/Unity/Hub/Editor/2019.1.1f1/PlaybackEngines/AndroidPlayer/Tools/OpenJDK/MacOS/bin/java -classpath “/Applications/Unity/Hub/Editor/2019.1.1f1/PlaybackEngines/AndroidPlayer/Tools/gradle/lib/gradle-launcher-4.6.jar” org.gradle.launcher.GradleMain “-Dorg.gradle.jvmargs=-Xmx4096m” “assembleRelease”

といったエラーが起きました。

解決方法

解決したのですが、どれが原因で解決したのかがいまいち分からないので、とりあえず関係ありそうなものを書いていきます。

NCMBとAdMobのバージョンを揃える

Plugins/Android/ 以下のファイルを一度全部削除します。
その後、まずNCMBだけをインポート。

次に、GoogleMobileAds/Editor/GoogleMobileAdsDependencies.xmlを開きます。

<androidPackage spec="com.google.android.gms:play-services-ads:15.0.1">

の末尾の部分を、NCMBのplay-services-XXXファイルの一番高いバージョンに変更。

最後に、Assets > Play Services Resolver > Android Resolver > Resolve を選択してAdMobプラグインを自動で導入。

重複している.jarや.aarのファイルを削除

play-services-XXX
support-XXX
などのファイルで、名前が同じでバージョン番号だけが異なるファイルは古い方を削除します。

このとき、
play-services-base-XX.X.X.aar
も一緒に削除します。(同じ名前のファイルはありませんが)

AndroidManifestの編集

AndroidManifestのminSdkVersionの値を全てのAndroidManifestで同じにします。

UnityでのPlayerSettingsで設定しているMinimum API Levelの値も合わせておきます。

そして、NcmbGcmPlugin.aarの中身のAndroidManifestも見落としがちなので確認します。
Finderやエクスプローラでこのファイルを表示し、拡張子を.zipに変更したあと、展開(解凍)します。
中にAndroidManifestが入っているのでminSdkVersionの値を修正した後、再びzipに圧縮して拡張子を.aarに変更。
展開したフォルダは削除してしまいましょう。

これらを行うと無事ビルドが通るようになりました!!

コメント