はじめに (対象読者・この記事でわかること)
この記事は、Unityで「とりあえず広告でも出してみようか」という軽い気持ちで開発を始めたものの、いきなりJavaのビルドエラーに突き落とされて「なんでUnityなのにJavaなんだよ!」と悩んでいる方に向けています。
この記事を読むと、UnityのAndroidビルドがなぜJava/Gradle絡みでコケるのか、そして「最小限の知識」で最短で脱出するための実践的な手順が身につきます。コードを書き換えたり、SDKを再インストールしたり、バージョンを下げたり……とにかく「広告表示」というゴールにたどり着くまでの、無駄な試行錯誤を大幅に減らせます。
前提知識
この記事を読み進める上で、以下の知識があるとスムーズです。
- UnityでAndroid向けビルドをしたことがある(Build Settingsで「Switch Platform」を押したことがあればOK)
- C#でスクリプトを書いたことがある
- ターミナル(コマンドプロンプト)でcdやlsが打てる
Unity広告SDK導入でなぜJavaが絡んでくるのか
Unityはエンジン本体がC++/C#で動いているので「Javaなんて関係ない」と思いきや、Androidビルドを行う瞬間に「Gradle」というビルドツールが動き、Javaのランタイムが必須になります。
AdMobやUnity Adsなどの広告SDKはネイティブ(Java/Kotlin)プラグインを内包しているため、ビルド時に自動的にJavaの依存関係が解決され、さらに「Multidex」「AndroidX」「R8」などの最新Android事情が絡んできます。
結果、「広告表示したいだけなのにcom.android.tools.r8.errorsとか出て意味がわからない」という悲劇が起きるわけです。
最短で広告表示まで進むJava/Gradle対策手順
Unity 2022.3 以降を使っている場合、デフォルトでGoogleの「External Dependency Manager(旧Play Services Resolver)」が入っているため、ここでJavaのバージョン不一致が爆発します。
以下の手順で、Unity上で広告を表示するまでに必要なJava/Gradleのバージョンを「揃えるだけ」で回避できます。
ステップ1:JDK 11をインストールしてUnityに教える
- Adoptiumにアクセスして「OpenJDK 11 (LTS)」をダウンロード
- Windowsならmsi、macOSならpkgを選ぶ - インストール先を控えておく(例:
C:\Program Files\Eclipse Adoptium\jdk-11.0.22+7) - Unity → Preferences → External Tools → Android → JDKの欄を上記パスに変更
- ここで「Embedded JDK」を使うチェックを外すのがコツ
これだけでUnsupported class file major version 61などのJavaバージョンエラーは消えます。
ステップ2:Gradle 6.9.4 を明示的に指定する
Unity 2022.3 系のデフォルト(7.2)だと広告SDKの依存解決がこけることがある。
ProjectSettings.assetをテキストエディタで開くgradleTemplate.gradleが存在しなければ
Unity → Android → Publishing Settings → Custom Gradle TemplateにチェックAssets\Plugins\Android\gradleTemplate.gradleを開き、先頭に以下を追記
gradle distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.4-all.zip- Unityを再起動してビルド
これでCould not find com.unity3d.ads:unity-ads:4.8.0みたいな依存エラーが出にくくなる。
ステップ3:External Dependency Managerの強制解決
広告SDK(AdMobなど)をインポートした直後、Unity上部メニューから
Assets → External Dependency Manager → Android Resolver → Force Resolveを実行
進捗バーが走り終わったらConsoleにResolution succeededが出ていればOK。
もしFailed to find Build Tools revision 30.0.3が出たら、Android Studioから該当バージョンをSDK Managerでインストール。
ハマった点:M1 Macで「Unable to find a JDK」
M1/M2 Macの場合、Rosettaなしのターミナルでjava -versionを叩いてもARM版JDKが見えないとUnityが暴れる。
対策:ターミナルはRosettaで起動するか、JDK 11のARMビルドを明示的に/Applications/Unity/Hub/Editor/2022.3.x/PlaybackEngines/AndroidPlayer/OpenJDKにコピーしてやると一発で解決した。
解決策まとめポイント
- JDKは11で統一(8でも動くが広告SDKが対応してない)
- Gradleは6.9.x帯で固定(Unity 2022.3 LTSで実績多数)
- External Dependency ManagerのResolveを必ず手動で実行
- エラーログに
R8と出たらProGuard/R8設定ファイルに-keepを追加する前に、まずバージョン合わせを疑う
まとめ
本記事では、Unityで広告SDKを入れただけなのにJava/Gradleエラーに見舞われる仕組みと、「JDK 11+Gradle 6.9.4+Resolve実行」という最短3ステップで脱出する方法を紹介しました。
- Unity Androidビルドは裏でJava/Gradleが動いている
- バージョンを揃えるだけで90%のエラーは消える
- External Dependency Managerを手動でResolveする習慣をつくろう
この記事を通して、「広告表示したいのにJavaエラーで3日溶かす」という無駄な時間をゼロにできれば幸いです。
次回は、広告が表示されたあとの「実装がシンプルで収益が高くなる配置テクニック」について書こうと思います。
参考資料
- Unity Manual - Android environment setup
- AdMob Unity Plugin Release Notes
- Gradle Compatibility Matrix
