Android Studio をインストールして構成し、プロジェクトを作成して、Jetpack XR SDK をセットアップしたら、没入型エクスペリエンスの構築を開始できます。
構築方法をすべて確認する前に、以下のセクションの情報をご確認いただき、没入型 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" プロパティは、アクティビティが開始されたときに特定モードで起動されることをシステムに通知します。
このプロパティには次の値があります。
XR_ACTIVITY_START_MODE_HOME_SPACE(Jetpack XR SDK のみ)XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED(Jetpack XR SDK のみ)
XR_ACTIVITY_START_MODE_HOME_SPACE
この起動モードを使用して、ホームスペースでアプリを起動します。ホームスペースでは、複数のアプリを並べて実行できるので、マルチタスクが可能です。モバイルまたは大画面の 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
この起動モードを使用して、フルスペースでアプリを起動します。フルスペースでは、同時に動作するアプリは 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>
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>
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.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 などの一部の機能は、すべてのデバイスと互換性がない可能性があります。
デバイスで有効になっている機能のリストを取得するには、adb
shell pm list features を実行します。
サポートされていない機能
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 で Android アプリを 3D にする
- Jetpack Compose for XR で空間 UI を開発する
- 空間 UI にマテリアル デザインを実装する
- アプリに空間環境を追加する
- エンティティの作成、制御、管理