Android向けARDKアプリをビルドする

以下の手順で、ARDKアプリをビルドしてAndroidデバイスにデプロイします。

注釈

Google Playストアにアプリを公開するには、アプリがGoogle Playの 対象APIレベルの要件 (最新のAPIレベルは31)を満たしている必要があります。Unity 2021を使用してAPI レベル31のARDKアプリをビルドするには、新しいバージョンのgradleをインストールして設定する必要があります。詳細については、 OpenCL準拠のAndroid APIレベル31を対象としたビルド をご参照ください。なお、現在ARDK 2.3は最新バージョンのgradleのインストールが 必要 になります。

前提条件

ARDKをUnityに追加する に記載されているように、ARDKパッケージを使用してUnityプロジェクトが設定されている必要があります。

認証 に記載されているように、APIキーを使用して、Unityプロジェクトに認証アセットが設定されている必要があります。

ARDKと互換性のあるAndroidデバイスが必要です。互換性のあるAndroidデバイスと最小バージョンのAndroidのリストについては、 システム要件 の「ランタイム要件」を参照してください。

Unityのシーンは、Androidの権限(カメラや位置情報の権限など)をリクエストするように設定してください。詳細については、 権限 をご参照ください。

手順

  1. External Tools(外部ツール) ウィンドウ(Unity > Preferences(環境設定))を開き、Android SDKとNDKのパスを指定します。Use embedded JDK(組み込みJDKを使用) オプションを選択することをお勧めします。

../../_images/ExternalTools.png
  1. Build Settings(ビルド設定) (メニュー: File(ファイル) > Build Settings(ビルド設定) )にアクセスして、Player Settings(プレイヤー設定) を開きます。

../../_images/BuildMenu.png

Company Name(会社名) を所属する組織名に変更します。続いて、Android > Other Settings(その他の設定) 操作画面の順に移動してビルド設定を指定します。

../../_images/BuildSettings.png

レンダリングセクションで、Auto Graphics API 設定のチェックを外し、Vulkanレンダラーがある場合は削除します。ARCoreとVulkanは連携しません。

../../_images/AndroidGraphics.png

Scripting Backend(スクリプティングバックエンド) には、IL2CPPを選択してください。Monoを選択すると、アウェアネス機能を使用する際にクラッシュする問題が生じる場合があります。

Target Architectures(ターゲットアーキテクチャ) には、ARMv7とARM64の両方を選択してください。なお、64ビット版の一部のデバイスでは、ARCoreで32ビット専用アプリを実行することはできません

../../_images/AndroidScriptSettings.png

設定やアプリケーションへの影響については、他にも次のようなものがあります。

設定

機能

マルチスレッドレンダリング

マルチスレッドレンダリングを使用するには、このオプションを有効にします。ARDKでは、このオプションの有効化と無効化のいずれもサポートされています。

パッケージ名

デバイス上やGoogle Playストアでアプリを一意に識別するためのアプリケーションIDを設定します。

最小のAPIレベル

Android 5.1 'Lollipop'(APIレベル22)

アプリケーションの実行に必要な最小限のAndroidバージョン(APIレベル)。Unity 2020では、Android 5.0です。

対象APIレベル

Automatic(最大レベルがインストールされた状態)

アプリケーションのコンパイル対象となるAndroidのバージョン(APIレベル)。APIレベル31以上の場合は、以下の説明をご参照ください。

注釈

ターゲットAPIレベルがAPIレベル31以上に設定されている場合は、これらのビルド設定手順を完了後、Unityでビルドに使用するgradleのバージョンを更新する必要があります。詳細については、 OpenCL準拠のAndroid APIレベル31を対象としたビルド をご参照ください。なお、現在ARDK 2.3は最新バージョンのgradleのインストールが 必要 になります。

  1. ビルド設定 ウィンドウに戻ると、Example/StarterScene が自動的に追加され、Scenes In Build ボックス内にチェックが入っているのが分かります。チェックが入っていない場合は、Unity Projectウィンドウでシーンを探し、ボックス内にドラッグします。

../../_images/Scenes.png
  1. Androidデバイスをコンピューターに接続し、Build and Run(ビルドして実行) ボタンをクリックします。ビルドを任意の場所に保存し、Save(保存) をクリックします。しばらくすると、自動的にアプリがデバイスで開きます。

../../_images/BuildAndRun.png

OpenCL準拠のAndroid APIレベル31を対象としたビルド

Android API 31以降、Androidではデフォルトで、アプリケーションのマニフェストでライブラリが指定されている場合を除き、システム共有ライブラリの使用はブロックされます。ARDKの各種機能を使用するには、システムのOpenCLライブラリにアクセスする必要があります。OpenCLが利用できない場合、ARDKはOpenGLを使用しますが、パフォーマンスは低下します。Nianticでは、一部のデバイスにおいて最大で2倍程度の性能差が発生する場合もあると判断しています。

ARDK 2.3以降では、アプリマニフェストでOpenCLを自動的に有効化しますが、適切にビルドするには6.7.1以降のgradleも必要です。Unity 2021に付属するgradleのデフォルトバージョンは6.1.1ですが、OpenCLを有効にするために必要なマニフェストの <uses-native-library> フィールド に対応していません。2021以前のUnityを使用する場合は、次の手順に沿って、OpenCLを有効にするためのビルドを設定します。

  1. https://gradle.org/releases/ から6.7.1以降のgradleをインストールしてください。

  2. Unityで、Preferences(環境設定)External Tools(外部ツール)Android の順に進み、Unityに付属するデフォルトのgradleの使用を無効にし、ローカルにインストールしたgradle 6.7.1へのパスに置き換えます。次の例の新しいパス(/usr/local/Cellar/gradle/7.5.1/libexec)は、 lib/gradle-launcher-7.5.1.jar がある場所になります。

../../_images/BuildSettingsCustomGradle.png

Unity UIではなくコマンドラインを使用してビルドする場合は、Unityのビルドスクリプトにおいて、 AndroidExternalToolsSettings.gradlePath の設定でカスタムのgradleを指定できます。

AndroidExternalToolsSettings.gradlePath = path-to-downloaded-gradle
  1. Unityの Build Settings(ビルド設定) で、Player Settings(プレイヤー設定) をクリックします。次に、Publishing Settings(公開設定) で、Custom Base Gradle Template(カスタムベースのgradleテンプレート) を有効にします。

../../_images/PublishSettingsCustomBaseGradle.png

これで、テンプレートファイルが Assets/Plugins/Android/baseProjectTemplate.gradle に生成されます。

  1. dependencies 下にあるgradleの プラグイン にバージョン4.2.0(またはそれ以上)が適用されるように、生成した baseProjectTemplate.gradle ファイルを修正します。

allprojects {
    buildscript {
        repositories {**ARTIFACTORYREPOSITORY**
            google()
            jcenter()
        }

        dependencies {
            // If you are changing the Android Gradle Plugin version, make sure it is compatible with the Gradle version preinstalled with Unity
            // See which Gradle version is preinstalled with Unity here https://docs.unity3d.com/Manual/android-gradle-overview.html
            // See official Gradle and Android Gradle Plugin compatibility table here https://developer.android.com/studio/releases/gradle-plugin#updating-gradle
            // To specify a custom Gradle version in Unity, go do "Preferences > External Tools", uncheck "Gradle Installed with Unity (recommended)" and specify a path to a custom Gradle version
            classpath 'com.android.tools.build:gradle:4.2.0'
            **BUILD_SCRIPT_DEPS**
        }
    }

    repositories {**ARTIFACTORYREPOSITORY**
        google()
        jcenter()
        flatDir {
            dirs "${project(':unityLibrary').projectDir}/libs"
        }
    }
}
  1. 作成したAndroidアプリをビルドして、通常どおり検証します。

Android向けARDKの依存関係を理解する

ARDKでは、ビルドの依存関係(ARCoreなど)がAndroidのビルドに自動的に追加されます。ARDKの依存関係でビルドの問題が発生した場合は、以下の情報をもとに、ARDKによってビルドに追加された内容を確認してください。

以下のカスタムのAndroidManifest.xmlは、そのまま使用できる完全なマニフェストではありませんが、ハイライトされている行は、ARDKによってビルドに追加される依存関係を示しています。プロジェクトでビルドの問題が発生しないように、必要に応じて、これらのセクションをプロジェクトの custom AndroidManifest.xml に統合することをお勧めします。

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unity3d.player"
    xmlns:tools="http://schemas.android.com/tools">

    <uses-permission android:name="android.permission.CAMERA" />

    <!-- Read permission required to load vocab file -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <!-- This tag indicates that this application requires ARCore.  This results in the application
    only being visible in the Google Play Store on devices that support ARCore. -->
    <uses-feature android:name="android.hardware.camera.ar" android:required="false"/>

    <application>
        <!-- This activity is critical for installing ARCore when it is not already present. -->
        <activity
            android:name="com.google.ar.core.InstallActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:excludeFromRecents="true"
            android:exported="false"
            android:launchMode="singleTop"
        />

        <meta-data android:name="com.google.ar.core" android:value="optional" />
    </application>

    <queries>
        <package android:name="com.google.ar.core" />
    </queries>
</manifest>