Android XR 向けのビルドの概要

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 サポートにより、Unity の確立された OpenXR サポートとデベロッパー エコシステムを活用しながら、開発する 3D エクスペリエンスを高度に制御できます。

Unity で XR エクスペリエンスをすでに作成している場合や、Unity 開発に精通している場合は、このオプションから始めてください。

詳しくは、Unity for Android XR を使用した開発をご覧ください。

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 でも機能します。

WebXR でウェブアプリを作成する方法の詳細

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 アプリと同様に、Home Space で動作できます。

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

XR アプリ向けの PackageManager 機能

Google Play ストアでアプリを配信する場合は、アプリ マニフェストで必要なハードウェア機能またはソフトウェア機能を指定できます。uses-feature 要素を使用すると、Google Play ストアでユーザーに表示されるアプリを適切にフィルタできます。

次の機能は XR アプリに固有のものです。

android.software.xr.immersive

アプリが Android XR プラットフォームをターゲットとし、XR をサポートするプラットフォームでのみ実行される場合は、値を true に設定します。アプリに XR 向けに最適化された機能が含まれているが、XR 以外のデバイスでも実行できる場合は、値を false に設定します。

OpenXR または Unity でビルドされたアプリでは、この値を true に設定することが必須です。

<uses-feature android:name="android.software.xr.immersive" 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.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

XR の権限について

モバイル デバイスや他のフォーム ファクタのアプリと同様に、XR アプリが提供する一部の機能では、アプリの AndroidManifest ファイルで権限を宣言することが必要になる場合があります。危険な権限の場合、アプリは実行時の権限をリクエストする必要があります。詳しくは、Android での権限権限に関するベスト プラクティスをご覧ください。

XR 機能の権限

XR アプリは、次の権限を使用できます。このセクションの権限はすべて危険な権限と見なされるため、アプリ マニフェストで宣言し、実行時にリクエストする必要があります。

android.permission.EYE_TRACKING

この権限が必要なユースケース

アバター用にユーザーの目の向きと向きを表現する

この権限が必要な Jetpack XR SDK の機能

なし

この権限を必要とする OpenXR 拡張機能

XR_ANDROID_avatar_eyes

この権限が必要な Unity 機能

Android XR: AR フェイス

android.permission.EYE_TRACKING_FINE

この権限が必要なユースケース

アイトラッキングによる入力と操作

この権限が必要な Jetpack XR SDK の機能

なし

この権限を必要とする OpenXR 拡張機能

XR_EXT_eye_gaze_interaction

この権限が必要な Unity 機能

Eye Gaze Interaction

android.permission.FACE_TRACKING

この権限が必要なユースケース

顔の表情のトラッキングとレンダリング

この権限が必要な Jetpack XR SDK の機能

なし

この権限を必要とする OpenXR 拡張機能

XR_ANDROID_face_tracking

この権限が必要な Unity 機能

XRFaceTrackingFeature

android.permission.HAND_TRACKING

この権限が必要なユースケース

手の関節ポーズ、角速度、線速度のトラッキング。ユーザーの手のメッシュ表現を使用

この権限が必要な Jetpack XR SDK の機能

なし

この権限を必要とする OpenXR 拡張機能

XR_ANDROID_hand_mesh

XR_EXT_hand_tracking

この権限が必要な Unity 機能

XR Hands

XRHandMeshFeature

android.permission.SCENE_UNDERSTANDING

この権限が必要なユースケース

光の推定、メッシュ サーフェスへのパススルーの投影、環境内のトラッキング可能オブジェクトに対するレイキャストの実行、平面トラッキング、オブジェクト トラッキング、オクルージョンとヒットテストのための深度処理、永続アンカー。

この権限が必要な Jetpack XR SDK の機能

飛行機の追跡

ヒットテスト

アンカーの永続性

この権限を必要とする OpenXR 拡張機能

XR_ANDROID_anchor_persistence

XR_ANDROID_depth_texture

XR_ANDROID_light_estimation

XR_ANDROID_composition_layer_passthrough_mesh

XR_ANDROID_raycast

XR_ANDROID_trackables

XR_ANDROID_trackables_object

この権限が必要な Unity 機能

XRAnchorFeature

XRDepthTextureFeature

XRLightEstimationFeature

XRPassthroughFeature

XRTrackableFeature

XRObjectTrackingFeature

Android XR アプリの品質を確保する

アプリで優れたユーザー エクスペリエンスを提供できるようにするには、Android XR アプリの品質に関するガイドラインを確認してください。

Android XR 向けにアプリをパッケージ化して配信する

Android XR では、Google Play を通じて XR ヘッドセットにさまざまなアプリとエクスペリエンスを提供できます。Android XR 向けアプリのパッケージングと配信に関するガイドでは、Google Play ストアと Google Play Console の使い方、公開トラック、Android App Bundle の準備、アプリサイズの制限について説明しています。