Android XR は、Android のプラットフォームとエコシステムの拡張版です。Android XR SDK は、使い慣れた Android フレームワークとツール、または OpenXR や WebXR などのオープン スタンダードを使用して XR アプリを構築できるように設計されています。対応するモバイルアプリや大画面アプリはすべて、Google Play ストアから XR ヘッドセットにインストールできます。互換性に関する考慮事項を確認して、アプリが互換性があるかどうかを確認します。
このガイドでは、次の項目について説明します。
- 開発ツールとテクノロジーの選択
- Android XR 向けアプリの設計
- アプリのマニフェスト ファイルを構成する
- アプリ マニフェストの互換性に関する考慮事項
- Android XR の権限について
- Android XR アプリの品質を確保する
- Android XR 向けアプリのパッケージ化と配信
開発ツールとテクノロジーを選択する
Android XR 向けのアプリをビルドする場合は、次の開発プラットフォームとテクノロジーから選択できます。
Jetpack XR SDK
Jetpack XR SDK には、XR デバイスの独自の機能を活用するために構築された Android XR Jetpack ライブラリが含まれています。次のいずれかを行う場合は、この SDK から始めます。
- 既存の Android モバイルアプリまたはタブレットアプリを最適化または拡張する
- Android Studio と Jetpack を使用して新しい Android XR アプリを作成する
Android Jetpack での開発に慣れている場合は、Jetpack XR SDK が適しています。これらのフレームワークやライブラリとシームレスに統合するように設計されており、既存の知識を使用して没入型の XR エクスペリエンスを構築できます。
Unity
Unity Engine は、アーティスト、デザイナー、デベロッパーが共同で没入感のあるインタラクティブなエクスペリエンスを作成できるリアルタイム 3D 開発エンジンです。Unity の Android XR サポートにより、Unity の確立された OpenXR サポートとデベロッパー エコシステムを活用しながら、開発する 3D エクスペリエンスを高度に制御できます。
Unity で XR エクスペリエンスをすでに作成している場合や、Unity 開発に精通している場合は、このオプションから始めてください。
詳しくは、Unity for Android XR を使用した開発をご覧ください。
OpenXR
OpenXR は、高性能のマルチプラットフォーム XR エクスペリエンスの構築に使用できる、ロイヤリティフリーのオープン スタンダードです。Android XR は OpenXR 1.0 と 1.1 をサポートしており、Android XR の新しい拡張機能で仕様を拡張しています。Android XR はオープン スタンダードに基づいて構築されているため、OpenXR と Android をサポートする開発ツールは Android XR と互換性がある必要があります。
詳しくは、Android XR での OpenXR のサポートをご覧ください。
WebXR
WebXR を使用すると、ウェブ向けの没入型エクスペリエンスを構築できます。Android XR 版 Chrome などの互換性のあるウェブブラウザで VR デバイスと AR デバイスにアクセスできます。
ウェブ向けの XR エクスペリエンスを構築する場合や、ウェブアプリに XR 機能を追加する場合は、このオプションから始めてください。既存の WebXR エクスペリエンスは Android XR でも機能します。
XR 向けの設計
XR は、従来のフラット スクリーンを超えて設計サーフェスを拡張します。物理的な現実と仮想現実を融合させた没入型エクスペリエンスを設計できます。まったく新しいエクスペリエンスを構築する場合でも、既存のアプリに没入型要素を追加する場合でも、Android XR 向けの設計ガイドを参考にして始めることができます。
アプリのマニフェスト ファイルを構成する
他の Android アプリ プロジェクトと同様に、Android XR アプリには、特定のマニフェスト設定を含む AndroidManifest.xml ファイルが必要です。マニフェスト ファイルは、アプリに関する重要な情報を Android ビルドツール、Android オペレーティング システム、Google Play に提供します。詳しくは、アプリ マニフェストの概要ガイドをご覧ください。
XR の差別化アプリの場合、マニフェスト ファイルには次の要素と属性が含まれている必要があります。
PROPERTY_ACTIVITY_XR_START_MODE プロパティ
android:name="android.window.PROPERTY_ACTIVITY_XR_START_MODE"
プロパティを使用すると、アクティビティの開始時にアクティビティを特定のモードで起動する必要があることを伝えることができます。
このプロパティで指定可能な値は次の 3 つです。
XR_ACTIVITY_START_MODE_HOME_SPACE
(Jetpack XR SDK のみ)XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED
(Jetpack XR SDK のみ)XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
(OpenXR のみ)
XR_ACTIVITY_START_MODE_HOME_SPACE
(Jetpack XR SDK でビルドされたアプリのみ)
この起動モードは、ホームスペースでアプリを起動する際に使用します。ホームスペースでは、複数のアプリを並べて実行できるため、マルチタスクを行うことができます。モバイル アプリや大画面 Android アプリは、Jetpack XR SDK を使用してビルドされた XR アプリと同様に、Home Space で動作できます。
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
android:value="XR_ACTIVITY_START_MODE_HOME_SPACE" />
<activity
android:name="com.example.myapp.MainActivity" ... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED
(Jetpack XR SDK でビルドされたアプリのみ)
この起動モードは、アプリをフルスペースで起動する場合に使用します。フルスペースでは、一度に実行されるアプリは 1 つだけです。スペースの境界はなく、他のアプリはすべて非表示になります。
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED" />
<activity
android:name="com.example.myapp.MainActivity" ... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
(OpenXR でビルドされたアプリのみ)
OpenXR でビルドされたアプリはフルスペースで起動し、XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
起動モードを使用する必要があります。管理対象外のフルスペースは、アプリが OpenXR を使用していることを Android XR に通知します。
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED" />
<activity
android:name="com.example.myapp.MainActivity" ... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
XR アプリ向けの PackageManager 機能
Google Play ストアでアプリを配信する場合は、アプリ マニフェストで必要なハードウェア機能またはソフトウェア機能を指定できます。uses-feature
要素を使用すると、Google Play ストアでユーザーに表示されるアプリを適切にフィルタできます。
次の機能は XR アプリに固有のものです。
android.software.xr.immersive
アプリが Android XR プラットフォームをターゲットとし、XR をサポートするプラットフォームでのみ実行される場合は、値を true に設定します。アプリに XR 向けに最適化された機能が含まれているが、XR 以外のデバイスでも実行できる場合は、値を false に設定します。
OpenXR または Unity でビルドされたアプリでは、この値を true に設定することが必須です。
<uses-feature android:name="android.software.xr.immersive" android:required="true" />
android.hardware.xr.input.controller
この機能は、アプリが正しく機能するために、高精度の 6DoF(自由度)モーション コントローラからの入力を必要とすることを示します。アプリがコントローラをサポートしており、コントローラがないと機能しない場合は、値を true に設定します。アプリがコントローラをサポートしているが、コントローラがなくても動作する場合は、false に設定します。
<uses-feature android:name="android.hardware.xr.input.controller" android:required="true" />
android.hardware.xr.input.hand_tracking
このフラグは、アプリが正しく機能するために、ユーザーの手の関節の位置、向き、速度など、高精度のハンド トラッキングを必要とすることを示します。アプリがハンド トラッキングをサポートしており、ハンド トラッキングなしでは機能しない場合は、値を true に設定します。アプリがハンド トラッキングをサポートしているが、ハンド トラッキングなしでも動作する場合は、false に設定します。
<uses-feature android:name="android.hardware.xr.input.hand_tracking" android:required="true" />
android.hardware.xr.input.eye_tracking
このフラグは、入力が正しく機能するためにアプリに高精度のアイトラッキングが必要であることを示します。アプリが入力用のアイトラッキングをサポートしており、アイトラッキングなしでは機能しない場合は、値を true に設定します。アプリが入力用のアイトラッキングをサポートしているが、アイトラッキングなしでも動作する場合は、false に設定します。
<uses-feature android:name="android.hardware.xr.input.eye_tracking" android:required="true" />
モバイルアプリと大画面アプリのアプリ マニフェストの互換性に関する考慮事項
XR アプリの PackageManager 機能のセクションで説明したように、アプリはアプリ マニフェストの <uses-feature>
要素で機能を宣言することで、その機能を使用することを宣言します。電話機能や GPS など、一部の機能はすべてのデバイスに対応していない場合があります。
サポートされていない機能
Google Play ストアは、次の Android 機能宣言を使用して、デバイスにインストールできるアプリをフィルタします。
カメラのハードウェア
android.hardware.camera.autofocus
android.hardware.camera.capability.manual_post_processing
android.hardware.camera.capability.manual_sensor
android.hardware.camera.capability.raw
android.hardware.camera.concurrent
android.hardware.camera.external
android.hardware.camera.level.full
接続
android.hardware.ipsec_tunnel_migration
デバイス設定
フォーム ファクタの構成
android.hardware.type.automotive
android.hardware.type.embedded
android.hardware.type.television
android.software.leanback_only
入力
android.software.input_methods
場所
近距離無線通信
セキュリティ構成とハードウェア
android.hardware.se.omapi.uicc
android.hardware.biometrics.face
android.hardware.identity_credential
android.hardware.identity_credential_direct_access
android.hardware.keystore.limited_use_key
android.hardware.keystore.single_use_key
android.hardware.strongbox_keystore
センサー
android.hardware.sensor.accelerometer_limited_axes
android.hardware.sensor.accelerometer_limited_axes_uncalibrated
android.hardware.sensor.ambient_temperature
android.hardware.sensor.barometer
android.hardware.sensor.gyroscope_limited_axes
android.hardware.sensor.gyroscope_limited_axes_uncalibrated
android.hardware.sensor.heading
android.hardware.sensor.heartrate
android.hardware.sensor.heartrate.ecg
android.hardware.sensor.hinge_angle
android.hardware.sensor.relative_humidity
android.hardware.sensor.stepcounter
android.hardware.sensor.stepdetector
ソフトウェアの構成
android.software.connectionservice
android.software.expanded_picture_in_picture
android.software.live_wallpaper
android.software.picture_in_picture
android.software.wallet_location_based_suggestions
電話
android.hardware.telephony.calling
android.hardware.telephony.cdma
android.hardware.telephony.data
android.hardware.telephony.euicc
android.hardware.telephony.euicc.mep
android.hardware.telephony.gsm
android.hardware.telephony.ims
android.hardware.telephony.mbms
android.hardware.telephony.messaging
android.hardware.telephony.radio.access
android.hardware.telephony.subscription
バーチャル リアリティ(従来版)
android.hardware.vr.headtracking
android.hardware.vr.high_performance
ウィジェット
XR の権限について
モバイル デバイスや他のフォーム ファクタのアプリと同様に、XR アプリが提供する一部の機能では、アプリの AndroidManifest ファイルで権限を宣言することが必要になる場合があります。危険な権限の場合、アプリは実行時の権限をリクエストする必要があります。詳しくは、Android での権限と権限に関するベスト プラクティスをご覧ください。
XR 機能の権限
XR アプリは、次の権限を使用できます。このセクションの権限はすべて危険な権限と見なされるため、アプリ マニフェストで宣言し、実行時にリクエストする必要があります。
android.permission.EYE_TRACKING
この権限が必要なユースケース
アバター用にユーザーの目の向きと向きを表現する
この権限が必要な Jetpack XR SDK の機能
なし
この権限を必要とする OpenXR 拡張機能
この権限が必要な Unity 機能
Android XR: AR フェイス
android.permission.EYE_TRACKING_FINE
この権限が必要なユースケース
アイトラッキングによる入力と操作
この権限が必要な Jetpack XR SDK の機能
なし
この権限を必要とする OpenXR 拡張機能
この権限が必要な Unity 機能
android.permission.FACE_TRACKING
この権限が必要なユースケース
顔の表情のトラッキングとレンダリング
この権限が必要な Jetpack XR SDK の機能
なし
この権限を必要とする OpenXR 拡張機能
この権限が必要な Unity 機能
android.permission.HAND_TRACKING
この権限が必要なユースケース
手の関節ポーズ、角速度、線速度のトラッキング。ユーザーの手のメッシュ表現を使用
この権限が必要な Jetpack XR SDK の機能
なし
この権限を必要とする OpenXR 拡張機能
この権限が必要な Unity 機能
android.permission.SCENE_UNDERSTANDING
この権限が必要なユースケース
光の推定、メッシュ サーフェスへのパススルーの投影、環境内のトラッキング可能オブジェクトに対するレイキャストの実行、平面トラッキング、オブジェクト トラッキング、オクルージョンとヒットテストのための深度処理、永続アンカー。
この権限が必要な Jetpack XR SDK の機能
飛行機の追跡
ヒットテスト
アンカーの永続性
この権限を必要とする OpenXR 拡張機能
この権限が必要な Unity 機能
Android XR アプリの品質を確保する
アプリで優れたユーザー エクスペリエンスを提供できるようにするには、Android XR アプリの品質に関するガイドラインを確認してください。
Android XR 向けにアプリをパッケージ化して配信する
Android XR では、Google Play を通じて XR ヘッドセットにさまざまなアプリとエクスペリエンスを提供できます。Android XR 向けアプリのパッケージングと配信に関するガイドでは、Google Play ストアと Google Play Console の使い方、公開トラック、Android App Bundle の準備、アプリサイズの制限について説明しています。