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 エクスペリエンスを構築できます。
詳しくは、Jetpack XR SDK を使った開発をご覧ください。
Unity
Unity Engine は、アーティスト、デザイナー、デベロッパーが協力して没入型でインタラクティブなエクスペリエンスを作成できるリアルタイム 3D 開発エンジンです。Unity の Android XR サポートにより、開発する 3D エクスペリエンスを高度に制御しながら、Unity の確立された OpenXR サポートとデベロッパー エコシステムのメリットを享受できます。
Unity で構築された XR エクスペリエンスがすでに存在する場合や、Unity 開発に精通している場合は、このオプションから始めます。
詳しくは、Android XR 用 Unity の開発をご覧ください。
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_XR_ACTIVITY_START_MODE プロパティ
android:name="android.window.PROPERTY_XR_ACTIVITY_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>
PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED プロパティ
android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
プロパティは、特定のタイプの境界でアプリを起動する必要があることを示します。ユーザーが物理空間内を移動できるように設計されているアプリは、XR_BOUNDARY_TYPE_LARGE
を指定する必要があります。XR_BOUNDARY_TYPE_NO_RECOMMENDATION
を指定すると、安全性境界のタイプに関する推奨事項は提供されないため、システムはすでに使用されているタイプを使用します。
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
android:value="XR_BOUNDARY_TYPE_LARGE" />
</application>
</manifest>
<uses-native-library> OpenXR
(OpenXR で構築されたアプリのみ)
OpenXR アプリケーションは、ランタイムを正常に読み込むために、ネイティブ OpenXR ライブラリの使用を宣言する必要があります。この宣言がないと、ランタイムの読み込みに失敗します。
<manifest ... >
<application ... >
<uses-native-library andro id:name="libopenxr.google.so" android:required="false" />
<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
に設定します。
<!-- If you are publishing an existing mobile APK using the mobile release track, set android:required to false.-->
<uses-feature android:name="android.software.xr.api.spatial" android:required="false" />
アプリが XR 対応デバイス専用にビルドされ、Android XR 専用のリリース トラックに公開されている場合は、android:required
属性を true
に設定します。
<!-- If you are publishing a separate APK for XR using the dedicated Android XR release track, set android:required to 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
に設定します。
<!-- Sets android:required to true, indicating that your app can't function on devices without controllers. -->
<uses-feature android:name="android.hardware.xr.input.controller" android:required="true" />
android.hardware.xr.input.hand_tracking
このフラグは、アプリが正しく機能するために、ユーザーの手の関節の位置、向き、速度など、高忠実度のハンド トラッキングを必要とすることを示します。アプリがハンド トラッキングをサポートしており、ハンド トラッキングなしでは機能しない場合は、値を true
に設定します。アプリがハンド トラッキングをサポートしているが、ハンド トラッキングなしでも動作する場合は、false
に設定します。
<!-- Sets android:required to true, indicating that your app can't function on devices without hand tracking. -->
<uses-feature android:name="android.hardware.xr.input.hand_tracking" android:required="true" />
android.hardware.xr.input.eye_tracking
このフラグは、アプリが正しく機能するために、入力に高精度のアイ トラッキングが必要であることを示します。アプリが入力用のアイトラッキングをサポートしており、アイトラッキングなしでは機能しない場合は、値を true
に設定します。アプリが入力にアイトラッキングをサポートしているが、アイトラッキングなしでも動作する場合は、false
に設定します。
<!-- Sets android:required to true, indicating that your app can't function on devices without eye tracking. -->
<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 の準備、アプリのサイズ制限について説明しています。
OpenXR™ および OpenXR のロゴは、Khronos Group Inc. が所有する商標であり、中国、欧州連合、日本、英国で商標として登録されています。