Jetpack Compose for XR

Android XR の空間機能を活用する空間 UI レイアウトを宣言的に構築します。
最新の更新 安定版リリース リリース候補版 ベータ版リリース アルファ版リリース
2025 年 5 月 7 日 - - - 1.0.0-alpha04

依存関係の宣言

XR Compose への依存関係を追加するには、Google Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。

アプリまたはモジュールの build.gradle ファイルに、必要なアーティファクトの依存関係を追加します。

GroovyKotlin
dependencies {
    implementation "androidx.xr.compose:compose:1.0.0-alpha04"

    // Use to write unit tests
    testImplementation "androidx.xr.compose:compose-testing:1.0.0-alpha04"
}
dependencies {
    implementation("androidx.xr.compose:compose:1.0.0-alpha04")

    // Use to write unit tests
    testImplementation("androidx.xr.compose:compose-testing:1.0.0-alpha04")
}

依存関係について詳しくは、ビルド依存関係の追加をご覧ください。

フィードバック

お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。

新しい問題を報告する

詳細については、Issue Tracker のドキュメントをご覧ください。

バージョン 1.0

バージョン 1.0.0-alpha04

2025 年 5 月 7 日

androidx.xr.compose:compose:1.0.0-alpha04androidx.xr.compose:compose-testing:1.0.0-alpha04 がリリースされました。バージョン 1.0.0-alpha04 に含まれる commit はこちらをご覧ください。

新機能

  • カスタム SubspaceModifier 型がコンポジションのローカル値にアクセスできるようにする CompositionLocalConsumerSubspaceModifierNode インターフェースを追加しました。
  • Compose AndroidView の実装スタイルに従う新しい SpatialPanel API を追加し、以前の ViewBased SpatialPanel を非推奨にしました。
  • 無制限の制約を表す VolumeConstraints.Unbounded コンパニオン オブジェクトを追加しました。
  • 空間オーディオ ソースを許可する SubspaceModifier.onPointSourceParams を追加しました。
  • 公開 ApplicationSubspace が追加され、アプリが空間コンテンツをレンダリングできる 3D 領域を定義するためのオプションの VolumeConstraints が提供されました。デフォルトでは、制約が指定されていない場合、サブスペースは SpatialUser の現在の視野の幅と高さで制限されます。視野を特定できない場合に使用する制約を指定できます。それ以外の場合は、デフォルトのフィールド オブ ビューの幅と高さの値が使用されます。
  • 立体コンテンツのレンダリングに使用できる SpatialExternalSurface を追加しました。SpatialExternalSurface は、修飾子(アルファを除く)とエッジ フェザリング エフェクトでカスタマイズできます。
  • 空間ポインタのアイコンを設定できる新しいサブスペース修飾子 pointerHoverIcon を追加しました。

API の変更

  • すべての Jetpack XR パッケージに対する RequiresApi(34) の制限を削除しました。Jetpack XR は現在、API レベル 34 以上のデバイスでのみ使用できるため、この制限は不要でした。(Iae0f8
  • Kotlin 2.0 でリリースされたプロジェクトでは、KGP 2.0.0 以降を使用する必要があります。(Idb6b5
  • アクティビティが埋め込まれていない空間パネルでも、戻る処理が機能するようになりました。戻る処理を機能させるには、Android マニフェストで android:enableOnBackInvokedCallback="true" を指定する必要があります。
  • 空間的なダイアログでバックハンドリングが機能するようになりました。バックハンドリングを機能させるには、Android マニフェストで android:enableOnBackInvokedCallback="true" を指定する必要があります。
  • Compose ベースとビューベースの SpatialPanel は、コンテンツに基づいてサイズを調整できるようになりました。
  • デベロッパーは、事前定義されたレベルに制限されることなく、独自のカスタム SpatialElevationLevel 値を設定できるようになりました。
  • オルビター仰角を elevation パラメータでカスタマイズできるようになりました。
  • サブスペースをデフォルトで SpatialUser の視野の幅と高さで制限できるようになりました。画角を特定できない場合は、デフォルトの画角の幅と高さの値が使用されます。
  • Movable 修飾子に新しいコールバック onMoveStartonMoveEnd を追加しました。onMoveStart コールバックと onMoveEnd コールバックは、ユーザーが移動可能修飾子を使用してサブスペース コンポーザブルの移動を開始または終了したときに呼び出されます。
  • name パラメータが、SpatialRowSpatialPanel などの空間 API から削除されました。空間コンポーズ ツリーをデバッグする場合は、代わりに SubspaceModifier.testTag を使用します。
  • spatialElevationLevelcontent のみを持つ、サポートされていない SpatialPopup のオーバーロードを削除しました。onDimissRequest をサポートするインターフェースを使用してください。
  • Movable 修飾子から onPoseChange コールバックを削除しました。代わりに onMove を使用してください
  • SubspaceModifiers は、デタッチされているか、現在デタッチ中の場合、効果を適用しなくなります。
  • 既存の SpatialRow API は SpatialRowSpatialCurvedRow に分割されました。以前に SpatialRowcurveRadius パラメータを使用していた場合は、代わりに SpatialCurvedRow を使用してください。これは同じ動作をします。
  • MainPanelActivityPanel は、同様の最新のシステム イメージで実行してもタイトルバーが表示されなくなりました。
  • アルファ修飾子とスケール修飾子をスタックできるようになり、値が乗算されて最終的に適用されるアルファ値またはスケール値が算出されます。
  • Movable 修飾子の onPoseChange コールバックが最適化され、ポーズの動きがスムーズになりました。
  • 移動可能およびサイズ変更可能な修飾子は、メインスレッドでコールバックを実行するようになり、状態の変化が再コンポジションをトリガーするようになりました。
  • レイアウトと測定フェーズに状態の監視を追加し、SubspaceLayout の状態変化が再レイアウトをトリガーするようにしました。
  • 修飾子チェーンの更新を最適化し、既存の修飾子をより適切に再利用できるようにしました。

バグの修正

  • SpatialDialog が表示されたときにスクロールを停止しました。(Ic4594
  • 修飾子ノードが切断されている間に行われた再レイアウト リクエストが無視されるようになりました。
  • Movable 修飾子と Resizable 修飾子によってトリガーされる再レイアウト フェーズを削除しました。
  • MainPanel() コンポーザブルで、いずれかのディメンションが直接、またはレイアウト計算(SpatialRow/SpatialColumn 計算など)中にゼロに設定されたときに発生するクラッシュを修正しました。代わりに、パネルが非表示になります。この修正は、レイアウト フェーズ中のクラッシュに特化しています。ユーザー操作によるパネルのサイズを 0 に変更することは、別途処理されます。非表示パネルに UI アフォーダンスがない。
  • サイズ変更可能修飾子からの maintainAspectRatio に関する問題を修正しました。これで、アスペクト比が維持されるようになります。
  • ネストされたサブスペースが 1 つのフレームで正しく配置されない問題を修正しました。
  • 角丸が適用されるべきときに適用されないことがある問題を修正しました。
  • NestedSubspaces が 1 フレームだけ間違った位置に表示されなくなります。

バージョン 1.0.0-alpha03

2025 年 2 月 26 日

androidx.xr.compose:compose:1.0.0-alpha03androidx.xr.compose:compose-testing:1.0.0-alpha03 がリリースされました。前回のアルファ版からの変更はありません。バージョン 1.0.0-alpha03 に含まれる commit

バージョン 1.0.0-alpha02

2025 年 2 月 12 日

androidx.xr.compose:compose:1.0.0-alpha02androidx.xr.compose:compose-testing:1.0.0-alpha02 がリリースされました。バージョン 1.0.0-alpha02 には、これらの commit が含まれています。

新機能

  • アクティビティ パネルで、空間型ダイアログが有効になっているときにコンテンツをスクリーミングできるようになりました。
  • Orbiter API を SubspaceComposable コンテキストで使用できるようになりました。Orbiter は、最も近い SubspaceLayout ベースの composable 親に接続されます。
  • LayoutCoordinatesAwareModifierNode を導入し、カスタム配置ベースの修飾子を許可しました。
  • SubspaceModifier.Node に接続/切断のライフサイクル メソッドを追加しました。
  • 移動可能修飾子に scaleWithDistance を追加しました。scaleWithDistance が有効になっている場合、移動されたサブスペース要素は拡大または縮小されます。また、移動前に設定されていた明示的なスケールも維持されます。

API の変更

  • SessionCallbackProvider を削除し、SpatialCapabilities に置き換えました。

その他の変更

  • minSDK を 24 に減らしました。すべての Jetpack XR API は、引き続きランタイムで API 34 を必要とします。
  • Orbiter EdgeOffset.innerEdgeOffset.outerEdgeOffset.overlap のコンストラクタは @Composable メソッドではなくなったため、コンポーザブル以外のコンテキストで使用できるようになりました。
  • 最新の UX 仕様に沿って空間標高レベルを更新しました。
  • SubspaceSemanticsInfo インターフェースを MeasurableLayout に実装します。
  • SubspaceModifierElement の名前を SubspaceModifierNodeElement に変更しました。

バグの修正

  • SubspaceModifier の順序付けを安定させるための修正。SubspaceModifier の動作がより安定するようになりました。オフセット、回転、スケール、移動可能、サイズ変更可能の修飾子は、任意の順序で使用できるようになりました。

バージョン 1.0.0-alpha01

2024 年 12 月 12 日

androidx.xr.compose:compose-*1.0.0-alpha01 がリリースされました。

初回リリースの機能

  • Jetpack Compose for XR の最初のデベロッパー リリース。既存の 2D アプリを XR に移植する場合でも、新しい XR アプリをゼロから作成する場合でも、行や列などの使い慣れた Compose のコンセプトを使用して、XR で空間 UI レイアウトを作成できます。このライブラリには、空間パネルやオービターなどのサブスペースと空間コンポーザブルが用意されており、既存の 2D Compose またはビューベースの UI を空間レイアウトに配置できます。Volume サブスペース コンポーザブルが導入され、3D モデルなどの SceneCore エンティティを UI を基準として配置できるようになりました。詳しくは、デベロッパー ガイドをご覧ください。

    • Subspace: このコンポーザブルはアプリの UI 階層内の任意の場所に配置できるため、ファイル間のコンテキストを失うことなく、2D と空間 UI のレイアウトを維持できます。これにより、UI ツリー全体で状態をホイスティングしたり、アプリを再設計したりすることなく、XR と他のフォーム ファクタ間で既存のアプリ アーキテクチャを簡単に共有できます。

    • SpatialPanel: 空間パネルは、アプリのコンテンツを表示できるサブスペース コンポーザブルです。たとえば、動画の再生、静止画像、その他のコンテンツを空間パネルに表示できます。

    • Orbiter: Orbiter は空間 UI コンポーネントです。対応する空間パネルに接続するように設計されており、その空間パネルに関連するナビゲーション アイテムとコンテキスト アクション アイテムが含まれています。たとえば、動画コンテンツを表示する空間パネルを作成した場合は、オービター内に動画再生コントロールを追加できます。

    • ボリューム: 3D モデルなどの SceneCore エンティティを UI に対して配置します。

  • 空間レイアウト: SpatialRowSpatialColumnSpatialBoxSpatialLayoutSpacer を使用して、複数の空間パネルを作成し、空間レイアウト内に配置できます。SubspaceModifier を使用してレイアウトをカスタマイズします。

  • 空間 UI コンポーネント: これらの要素は 2D UI で再利用できます。空間属性は、空間機能が有効になっている場合にのみ表示されます。

    • SpatialDialog: パネルが Z 深度で少し後退し、エレベートされたダイアログが表示されます。
    • SpatialPopUp: パネルが Z 深度で少し後方に移動し、エレベートされたポップアップが表示される
    • SpatialElevation: SpatialElevationLevel を設定すると、標高を追加できます。
  • SpatialCapabilities: 空間機能は、ユーザーがアプリやシステムを操作するときに変更される場合があります。また、アプリ自体によって変更される場合もあります(ホーム空間やフルスペースに移動するなど)。問題を回避するには、アプリで LocalSpatialCapabilities.current をチェックし、現在の環境でサポートされている API を特定する必要があります。isSpatialUiEnabled: 空間 UI 要素(SpatialPanel など) isContent3dEnabled: 3D オブジェクト isAppEnvironmentEnabled: 環境 isPassthroughControlEnabled: アプリがパススルー状態を制御できるかどうか isSpatialAudioEnabled: 空間オーディオ

既知の問題

  • 現在、XR 向けの Jetpack Compose を使用するには、minSDK 30 が必要です。回避策として、次のマニフェスト エントリ <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/> を追加して、minSDK 23 でビルドして実行できるようにします。
  • 現在、Jetpack XR アプリでは、AndroidManifest で android.permission.SCENE_UNDERSTANDING 権限をリクエストする必要があります。
  • マニフェストの PROPERTY_XR_ACTIVITY_START_MODE プロパティを使用してアプリがフルスペースに直接起動する場合、アクティビティ/アプリは最初はホームスペースで開かれ、その後フルスペースに移行します。
  • Volume コンポーザブルの glTF が、最初は間違った場所でちらつくことがあります。
  • 大幅に移動されたパネルで SpatialDialog を使用すると、コンテンツが間違った方向に移動します。