Android XR 向け OpenXR のスタートガイド

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

サポートされている OpenXR 拡張機能またはサポートされているエンジンを使用してビルドを開始する前に、次のセクションの情報を確認し、タスクを完了して、アプリが没入型 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_FULL_SPACE_UNMANAGED(OpenXR のみ)

XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED

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>

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 ライブラリの使用を宣言する必要があります。この宣言がないと、ランタイムの読み込みに失敗します。

<manifest ... >

    <application ... >

    <uses-native-library android: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.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" />

次のステップ

アプリのマニフェストの構成と重要な情報の確認が完了したので、OpenXR を使用してビルドする方法について説明します。