環境:Unity2020.3.0f1

はじめに

現在AndroidアプリをアップデートするにはAPIレベルを31以上にする必要があります。
しかしAPIレベルを31以上にするとGardle関係のエラー祭りでビルドができませんでした。
悪戦苦闘したので備忘録と共にシェアしたいと思います。

以下の条件を満たしてしまうとビルドできないようです。

  • SDK31以上
  • JDK8
  • ラムダ式を使ったコードがどこかにある(使わなければ大丈夫かも?)

要するにJDK8→JDK11にすればいいらしいが、
Unity2020.3.0f1はJDK11をサポートしてないという…。
Unity2022ならサポートしてるようですが、バグるかもしれないのでアップグレードなんて無理!
そこでJDK8のままビルドする必要があります。
その方法がGardleのバージョンを6.1.1にするとのことです。

私はこれでビルドすることができました。
その手順

  1. Gardleバージョン6.1.1のあるフォルダのパスを設定する
  2. Custom Base Gradle Templateを作成&編集する
  3. AndroidManifest.xmlを作成&編集する

1つずつ見ていきます。

1.Gardleバージョン6.1.1のあるフォルダのパスを設定する

Edit>Preferences>External Toolsに移動し、Gardleが参照してるパスにGardleバージョン6.1.1が入っているか確認します。
なければチェックを外して、Gardleバージョン6.1.1のあるフォルダパスをセットします。

私が使っているUnity2020.3.0f1には5.6.4が入っているのでNGでした。
Unity2021.3.15f1だと6.1.1なので、こちらのパスをセットしました。
Gardleの公式サイトからダウンロードしてそのファイルパスをセットしてもOKだと思います。

2.Custom Base Gradle Templateを作成&編集する

次にEdit>Project Settings>Playerに移動し、BuildのCustom Base Gradle Templateにチェックを入れます。これによってAssets/Plugins/AndroidにbaseProjectTemplate.gradleファイルが生成されます。

生成されたファイルを開いて↓の箇所を4.0.1に書き換えます。

 dependencies {
           …
            classpath 'com.android.tools.build:gradle:4.0.1'
           …
        }

3.AndroidManifest.xmlを作成&編集する

さっきと同様に、今度はCustom Main Manifestにチェックを入れてAndroidManifest.xmlファイルを生成します。

生成されたファイルを開き、↓のようにandroid:exported=”true”を追加します。

…
<application>
        <activity android:name="com.unity3d.player.UnityPlayerActivity"
                  android:theme="@style/UnityThemeSelector"
                  android:exported="true">
            <intent-filter>
…

これで無事にビルドができました。
しかし…、
私はSDK33を導入したので、この段階でビルドしてGooglePlayConsoleにアップロードしたら、API33は広告がどうのというエラーが出ました。

そこで先ほどのAndroidManifest.xmlファイルに↓のように<uses-permission android:name=”com.google.android.gms.permission.AD_ID”>を追加します。

<manifest>
 …
  <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
</manifest>

これにてようやくアプデすることができました!
この手のエラーは本当に苦手で、いつも神だのみ…。

参考