Jetpack Compose for XR

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

依存関係の宣言

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

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

Groovy

dependencies {
    implementation "androidx.xr.compose:compose:1.0.0-alpha05"

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

Kotlin

dependencies {
    implementation("androidx.xr.compose:compose:1.0.0-alpha05")

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

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

フィードバック

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

新しい問題を報告する

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

バージョン 1.0

バージョン 1.0.0-alpha05

2025 年 7 月 30 日

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

新機能

  • SubspaceComposable アノテーション クラスを公開にしました。(Ic2a34b/399432430
  • 180 度と 360 度の球体を表す 2 つの新しい SpatialExternalSurface コンポーザブル。(I40ef2b/391705799
  • SubspaceModifier.aspectRatio を追加しました(Ide5abb/399729509b/414762147
  • SceneCore と XR 用 Compose の相互運用性を改善するために、SceneCoreEntity API を追加しました。(I50bb3b/423020989
  • スケーリングされていない GravityAligned 機能をサポートする GravityAlignedsubspace API を提供しました(I07359

API の変更

  • SpatialDialog()SpatialDialogProperties.dismissOnBack の押下設定に従います。(Ib453bb/416797132
  • メートル単位で表されるため、minimumPanelDimension を新しいデフォルトのディメンション サイズ Dimensions(0.1f, 0.1f, 0.1f) に更新します。(Ib852a
  • サブスペースとオービターは、ホームスペースとアプリがバックグラウンドにあるときに内部状態を保持するようになります。ホームスペース モードでは、Subspace はフルスペース モードへの切り替えに備えてシーンをセットアップします。(I40317b/416037751
  • アプリがバックグラウンドで動作しているとき、SpatialDialogs は状態を保持するようになりました。(I6aa56
  • ApplicationSubspace は、推奨されるスケールと位置をシステムから継承するようになりました。(I4565fb/418834194
  • SubspaceComposable 以外のコンテキストで SubspaceComposable が使用された場合のエラー メッセージを改善し、エラーを早期にトリガーするようにしました。(Iee2aeb/416484684
  • 構成可能な API を誤って使用した場合、警告が見落とされることが多いため、ExperimentalSubspaceVolumeApi を Warning から Error に更新しました。(I427aab/424864286
  • サブスペースと ApplicationSubspacerecommendedContentBoxInFullSpace によって制約されるようになりました。以前は SpatialUser の視野によって制約されていました。(I41015b/423074142
  • SpatialElevation を更新し、最小サイズを使用することで、ハードコードされたサイズを使用しないようにしました(I2dbe6b/427785338
  • キー変数が変更されたときに更新されるように、SpatialAcitivityPanel をスクリムする方法を更新します。(I0f64db/427999029
  • デフォルトの制約値を同等の値に設定するために、VolumeConstraints.Unbounded を削除します。(Ie24ecb/407938414
  • SpatialFeatheringSize が公開されなくなりました(I1c15bb/399432430
  • Compose の Placeable と区別するために、XR の Placeable の名前を SubspacePlaceable に変更しました。(I74874
  • Orbiter の設定を削除し、新しいパラメータとして shouldRenderInNonSpatial を追加します。また、クラス EdgeOffset を削除し、Orbiter() 関数を統合する新しいパラメータとして orbiterOffsetType を追加します。また、OrbiterEdge の名前を ContentEdge に変更します。(Iebf3d
  • Compose の Measurable 型と区別するため、Measurable の名前を SubspaceMeasurable に変更しました。(I9726c
  • MeasureResult の名前を SubspaceMeasureResult に変更しました。(I9f34d
  • Compose の Subspace コンポーザブルで setContent を使用するように変更し、setSubspaceContent API を削除しました。(Ifff4cb/421427391b/421427391
  • MeasurePolicy の名前が SubspaceMeasurePolicy に変更されました。(I37a9bb/422553904
  • デフォルトなしではメンバーを追加できないため、SubspaceSemanticsInfo をシール済みインターフェースにします。(I372f9b/423704068
  • SpatialExternalSurface のドキュメントを更新し、ContentSecurityLevel の名前を SurfaceProtection に変更しました(I3c460b/420982808
  • アンカー設定を可能にする、移動可能な修飾子のオーバーロードされたコンストラクタを提供しました。(Ic0c70
  • ツールチップの追加の位置プロバイダにより、ツールチップをアンカーの上、下、左、右のいずれに配置するかをデベロッパーが制御できるようになりました。カレットの Shape を受け取る API を追加し、より多くのカスタムシェイプを提供できるようにしました。(Ie513cb/374766087b/418854637
  • PublishedApi としての CoreEntity を削除しました(Ifee05

バグの修正

  • レンダリング時に SpatialDialog が点滅する問題を修正しました。(Ife73cb/401619909
  • SpatialDialog がアクティビティ パネルをスクリムできない問題を修正しました。(I8ca6c b/367442109
  • XR ダイアログで一部のコンテンツが表示されない問題を修正しました(I17cd5b/418062437
  • コンテンツの内部をクリックすると SpatialPopup が閉じられる問題を修正しました。(If262cb/417245722
  • resizable().movable() をチェーンすると SpatialPanel が新しいサイズに正しくリサイズされない問題を修正しました。(I02ee3b/422264230
  • SpatialComposeVideoPlayertopBar がメニューと重なる問題を修正しました(Id33bcb/427168167
  • 角の丸みがレンダリングされない問題を修正しました(I975feb/428261830

バージョン 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 ベースと View ベースの SpatialPanel は、コンテンツに基づいてサイズを調整できるようになりました。
  • デベロッパーは、独自のカスタム SpatialElevationLevel 値を設定できるようになり、事前定義されたレベルに制限されなくなりました。
  • elevation パラメータを使用して、オービターの高度レベルをカスタマイズできるようになりました。
  • サブスペースは、デフォルトで SpatialUser の視野の幅と高さで制限できるようになりました。視野を特定できない場合は、デフォルトの視野の幅と高さの値が使用されます。
  • Movable 修飾子に新しいコールバック onMoveStartonMoveEnd を追加しました。onMoveStart コールバックと onMoveEnd コールバックは、ユーザーが移動可能な修飾子でサブスペース コンポーザブルの移動を開始または終了したときに呼び出されます。
  • SpatialRowSpatialPanel などの空間 API から name パラメータが削除されました。空間コンポーズ ツリーのデバッグには、代わりに 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 計算など)中にいずれかのディメンションがゼロに設定された場合に発生するクラッシュを修正しました。代わりに、パネルが非表示になります。この修正はレイアウト フェーズでのクラッシュに特に対処するものであり、ユーザー操作によるパネルのサイズ変更は別途処理されます。非表示のパネルには 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 コンテキストで使用できるようになり、Orbiters が最も近い SubspaceLayout ベースのコンポーザブルな親にアタッチされるようになりました。
  • カスタムの配置ベースの修飾子を許可する LayoutCoordinatesAwareModifierNode を導入しました。
  • アタッチ/デタッチ ライフサイクル メソッドを SubspaceModifier.Node に追加しました。
  • 移動可能な修飾子に scaleWithDistance を追加しました。scaleWithDistance が有効になっている場合、移動されたサブスペース要素は拡大または縮小します。また、移動前の明示的なスケールも維持されます。

API の変更

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

その他の変更

  • minSDK を 24 に削減しました。すべての Jetpack XR API は、実行時に引き続き API 34 を必要とします。
  • Orbiter EdgeOffset.innerEdgeOffset.outerEdgeOffset.overlap のコンストラクタが @Composable メソッドではなくなり、コンポーザブルでないコンテキストで使用できるようになりました。
  • 最新の UX 仕様に沿うように空間の高度レベルを更新しました。
  • MeasurableLayoutSubspaceSemanticsInfo インターフェースを実装します。
  • 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 または Views ベースの UI を空間レイアウトに配置できます。Volume サブスペース コンポーザブルが導入され、UI を基準にして 3D モデルなどの SceneCore エンティティを配置できるようになりました。詳しくは、デベロッパー ガイドをご覧ください。

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

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

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

    • Volume: UI を基準にして 3D モデルなどの SceneCore エンティティを配置します。

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