ARCore が 5 月 10 日に Google I/O で開催されました。 今すぐご登録ください。

Unity を使用して Android 12 向けにビルドする

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Android 12(SDK レベル 31)をターゲットとする Android プロジェクトをビルドすると、次のエラーが発生することがあります。

Could not determine the dependencies of task ':launcher:compileDebugJavaWithJavac'.
> Installed Build Tools revision 31.0.0 is corrupted. Remove and install again using the SDK Manager.
> Configure project :launcher
WARNING: The option 'android.enableR8' is deprecated and should not be used anymore.
It will be removed in a future version of the Android Gradle plugin, and will no longer allow you to disable R8.
Build-tool 31.0.0 is missing DX at <android-sdk-path>/sdk/build-tools/31.0.0/dx
File ~/.android/repositories.cfg could not be loaded.
Build-tool 31.0.0 is missing DX at <android-sdk-path>/sdk/build-tools/31.0.0/dx

これは、Android Build Tools バージョン 31.0.0 と Unity ビルドシステムの間に互換性がないために発生します。Android Build Tools バージョン 31.0.0 では、D8 が優先されて DX が削除されているため、Android 用の Unity ビルドが破損しています。

このエラーは、次のような状況で表示されることがあります。

  • Unity の ARCore 拡張機能バージョン 1.26 にアップグレードしました。
  • ARCore Extensions バージョンに関係なく、任意の Unity プロジェクトで Android SDK レベル 31 をターゲットとする。
  • ARCore Extensions バージョンに関係なく、Build Tools バージョン 31.0.0 がインストールされている任意の Unity プロジェクトで Android SDK レベル 30 をターゲットとする。

回避策

Google は Unity と連携して、この非互換性を解決しています。それまでの間、Android 12 をターゲットとするプロジェクトをビルドする手順は次のとおりです。

  1. Project Settings > Player > Android > Publishing Settings > Build で次の両方を選択します。

    1. Custom Main Gradle Template
    2. Custom Launcher Gradle Template

    両方の Gradle テンプレート オプションが選択されている [Publishing Settings, Build] ペインを示すスクリーンショット

  2. 生成された両方のファイルに次の変更を適用します。

    • Assets/Plugins/Android/mainTemplate.gradle
    • Assets/Plugins/Android/launcherTemplate.gradle

    ファイルの先頭にある次のコメントを削除します(ある場合)。

    // GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
    

    次に、compileSdkVersionbuildToolsVersion を次のように変更します。

    buildToolsVersion '30.0.3'
    

ビルド時に、Unity は Build-Tools バージョン 30.0.3 をダウンロードし、これを使用して、選択した targetSdkVersion を維持しながらプロジェクトをビルドします。

カスタム Gradle ビルドを作成する

古いバージョンでビルドされた Unity バージョン 2019.42020.12020.2 では、カスタム Gradle ビルドを Gradle バージョン 6.1.1 以降に設定する必要があります。Android Gradle プラグイン 4.0.1 以降も必要です。

SDK 31 をターゲットとするアプリには、Gradle バージョン 6.1.1 以降が必要です。

  1. Preferences > External Tools > Android > Gradle に移動し、カスタム Gradle ビルドを Gradle 6.1.1 以降に設定します。ダウンロードについては、Gradle ビルドツールをご覧ください。
  2. 生成された両方のファイルに次の変更を適用します。

    • Assets/Plugins/Android/mainTemplate.gradle
    • Assets/Plugins/Android/launcherTemplate.gradle
buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        // Must be Android Gradle Plugin 4.0.1 or later. For a list of
        // compatible Gradle versions refer to:
        // https://developer.android.com/studio/releases/gradle-plugin
        classpath 'com.android.tools.build:gradle:4.0.1'
    }
}

allprojects {
   repositories {
      google()
      jcenter()
      flatDir {
        dirs 'libs'
      }
   }
}

Android 12 をターゲットとするアプリに変更を適用

Android 12 をターゲットとするアプリでは、android:exported 属性を明示的に宣言する必要があります。Android 12 におけるすべての変更については、Android 12 での変更点をご覧ください。

  1. Project Settings > Player > Android > Publishing Settings > BuildCustom Main Manifest を選択します。

  2. Assets/Plugins/Android/AndroidManifest.xml に次の変更を適用します。

    1. ファイルの先頭にある次のコメントを削除します(ある場合)。

      <!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
      
    2. android:exported 属性<activity> タグに追加します。

       <application>
           <activity android:name="com.unity3d.player.UnityPlayerActivity"
                     android:theme="@style/UnityThemeSelector"
                     android:exported="true">
               <intent-filter>
                   <action android:name="android.intent.action.MAIN" />
                   <category android:name="android.intent.category.LAUNCHER" />
               </intent-filter>
               <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
           </activity>
       </application>