没入型エクスペリエンスの構築を始める

対象となる XR デバイス
このガイダンスは、次のようなタイプの XR デバイス向けのエクスペリエンスを構築する際に役立ちます。
XR ヘッドセット
有線 XR グラス

Android Studio をインストールして構成し、プロジェクトを作成して、Jetpack XR SDK をセットアップしたら、XR ヘッドセットや有線 XR グラスなどのデバイス向けの没入型エクスペリエンスの構築を開始できます。

さまざまなビルド方法を試す前に、以下のセクションの情報を確認し、タスクを完了して、没入型 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>

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" />

android.hardware.xr.input.face_tracking

このフラグは、アプリが正常に機能するために顔追跡ハードウェアが必要であることを示します。アプリが顔追跡をサポートしており、顔追跡なしでは機能しない場合は、値を true に設定します。アプリが顔追跡をサポートしているものの、顔追跡なしでも動作できる場合は、false に設定します。

<!-- Sets android:required to true, indicating that your app can't function on devices without face tracking. -->
<uses-feature android:name="android.hardware.xr.input.face_tracking" android:required="true" />

モバイルアプリと大画面アプリのアプリ マニフェストの互換性に関する考慮事項

XR アプリの PackageManager 機能のセクションで説明したように、アプリは、アプリ マニフェストの <uses-feature> 要素で機能を宣言することで、その機能を使用することを宣言します。電話や GPS などの一部の機能は、すべてのデバイスに対応しているとは限りません。

デバイスで有効になっている機能のリストを取得するには、adb shell pm list features を実行します。

サポートされていない機能

Google Play ストアは、次の Android 機能宣言を使用して、デバイスにインストール可能なアプリをフィルタします。

カメラのハードウェア

android.hardware.camera.ar

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.flash

android.hardware.camera.level.full

接続

android.hardware.ethernet

android.hardware.uwb

android.hardware.ipsec_tunnel_migration

デバイス設定

android.hardware.ram.low

フォーム ファクタの構成

android.hardware.type.automotive

android.hardware.type.embedded

android.hardware.type.pc

android.hardware.type.television

android.hardware.type.watch

android.software.leanback

android.software.leanback_only

android.software.live_tv

入力

android.hardware.consumerir

android.software.input_methods

ロケーション

android.hardware.location.gps

近距離無線通信

android.hardware.nfc

android.hardware.nfc.ese

android.hardware.nfc.hce

android.hardware.nfc.hcef

android.hardware.nfc.uicc

android.hardware.nfc.beam

セキュリティ構成とハードウェア

android.hardware.se.omapi.ese

android.hardware.se.omapi.sd

android.hardware.se.omapi.uicc

android.hardware.biometrics.face

android.hardware.fingerprint

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.light

android.hardware.sensor.relative_humidity

android.hardware.sensor.stepcounter

android.hardware.sensor.stepdetector

ソフトウェア構成

android.software.backup

android.software.connectionservice

android.software.expanded_picture_in_picture

android.software.live_wallpaper

android.software.picture_in_picture

android.software.telecom

android.software.wallet_location_based_suggestions

電話

android.hardware.telephony

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.software.sip

android.software.sip.voip

バーチャル リアリティ(以前のバージョン)

android.hardware.vr.headtracking

android.hardware.vr.high_performance

android.software.vr.mode

ウィジェット

android.software.app_widgets

次のステップ

アプリのマニフェストの設定と重要な情報の確認が完了したら、没入型エクスペリエンスを構築する方法を確認します。