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 開発に精通している場合は、このオプションから始めてください。
詳しくは、Android XR 用 Unity での開発をご覧ください。
OpenXR
OpenXR は、高性能のマルチプラットフォーム XR エクスペリエンスの構築に使用できる、ロイヤリティフリーのオープン スタンダードです。Android XR は OpenXR 1.0 と 1.1 をサポートしています。Google は、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 アプリも動作できます。
<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>
<uses-native-library> OpenXR
(OpenXR でビルドされたアプリのみ)
OpenXR アプリは、ネイティブ OpenXR ライブラリの使用を宣言して、ランタイムを正常に読み込む必要があります。この宣言がないと、ランタイムは読み込まれません。
<manifest ... >
<application ... >
<uses-native-library android:name="libopenxr.google.so" android:required="true" />
<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.api.spatial
Jetpack XR SDK を使用してビルドされたアプリは、この機能をアプリ マニフェストに含める必要があります。android:required
属性に設定する値は、アプリのリリース トラックによって異なります。
アプリが XR で差別化された機能やコンテンツを既存のモバイル APK にバンドルし、モバイル向けリリース トラックで公開されている場合は、android:required
属性を false
に設定する必要があります。アプリが XR 対応デバイス用に特別にビルドされ、Android XR 専用のリリース トラックに公開されている場合は、android:required
属性を true
に設定する必要があります。
<uses-feature android:name="android.software.xr.api.spatial" android:required="true" />
android.software.xr.api.openxr
Android XR プラットフォームをターゲットとし、OpenXR または Unity でビルドされたアプリは、android:required
属性を true
に設定して、アプリ マニフェストにこの機能を含める必要があります。
Android XR Extensions Package for Unity バージョン 1.0.0 以降または Unity OpenXR: Android XR Package バージョン 0.5.0-exp.1 以降を使用するアプリでは、この要素をアプリ マニフェストに手動で追加する必要はありません。これらの 2 つのパッケージにより、この要素がアプリ マニフェストに挿入されます。
デバイスは、この機能のバージョンを指定できます。これは、デバイスでサポートされている OpenXR の最高バージョンを示します。上位 16 ビットはメジャー番号を表し、下位 16 ビットはマイナー番号を表します。たとえば、OpenXR バージョン 1.1 を指定するには、値を「0x00010001」に設定します。
アプリは機能バージョンを使用して、アプリが必要とする OpenXR の最小バージョンを指定できます。たとえば、アプリが OpenXR バージョン 1.1 のサポートを必要とする場合は、次の機能を宣言します。
<uses-feature android:name="android.software.xr.api.openxr"
android:version="0x00010001"
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 アプリは、次の権限を使用できます。このセクションの権限はすべて危険な権限と見なされるため、アプリ マニフェストで宣言し、実行時にリクエストする必要があります。
android.permission.EYE_TRACKING_COARSE
アバターなどで使用するユーザーの目の向き、ステータス、向きを表現します。精度の低いアイトラッキング データが必要な場合に、この権限を使用します。
Jetpack XR SDK
×
OpenXR 拡張機能
Unity の機能
android.permission.EYE_TRACKING_FINE
選択、入力、操作のためのアイトラッキング。
Jetpack XR SDK
×
OpenXR 拡張機能
Unity の機能
android.permission.FACE_TRACKING
顔の表情のトラッキングとレンダリング。
android.permission.HAND_TRACKING
手の関節の姿勢、角速度、線速度をトラッキングする。ユーザーの手のメッシュ表現を使用する。
Jetpack XR SDK
OpenXR 拡張機能
Unity の機能
android.permission.SCENE_UNDERSTANDING_COARSE
光の推定、メッシュ サーフェスへのパススルーの投影、環境内のトラッキング可能オブジェクトに対するレイキャストの実行、平面トラッキング、オブジェクト トラッキング、永続アンカー。
Jetpack XR SDK
OpenXR 拡張機能
Unity の機能
android.permission.SCENE_UNDERSTANDING_FINE
深度テクスチャ。
Android XR アプリの品質を確保する
アプリで優れたユーザー エクスペリエンスを提供できるように、Android XR アプリの品質ガイドラインを確認してください。
Android XR 向けにアプリをパッケージ化して配信する
Android XR では、Google Play を通じてさまざまなアプリやエクスペリエンスを XR ヘッドセットに提供できます。Android XR 向けアプリのパッケージングと配信に関するガイドでは、Google Play ストアと Google Play Console の使い方、公開トラック、Android App Bundle の準備、アプリサイズの制限について説明しています。