Jetpack Compose for XR
最新の更新 | 安定版リリース | リリース候補版 | ベータ版リリース | アルファ版リリース |
---|---|---|---|---|
2025 年 5 月 7 日 | - | - | - | 1.0.0-alpha04 |
依存関係の宣言
XR Compose への依存関係を追加するには、Google Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。
アプリまたはモジュールの build.gradle
ファイルに、必要なアーティファクトの依存関係を追加します。
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-alpha04
と androidx.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
修飾子に新しいコールバックonMoveStart
とonMoveEnd
を追加しました。onMoveStart
コールバックとonMoveEnd
コールバックは、ユーザーが移動可能修飾子を使用してサブスペース コンポーザブルの移動を開始または終了したときに呼び出されます。name
パラメータが、SpatialRow
やSpatialPanel
などの空間 API から削除されました。空間コンポーズ ツリーをデバッグする場合は、代わりにSubspaceModifier.testTag
を使用します。spatialElevationLevel
とcontent
のみを持つ、サポートされていないSpatialPopup
のオーバーロードを削除しました。onDimissRequest
をサポートするインターフェースを使用してください。- Movable 修飾子から
onPoseChange
コールバックを削除しました。代わりにonMove
を使用してください SubspaceModifiers
は、デタッチされているか、現在デタッチ中の場合、効果を適用しなくなります。- 既存の
SpatialRow
API はSpatialRow
とSpatialCurvedRow
に分割されました。以前にSpatialRow
のcurveRadius
パラメータを使用していた場合は、代わりにSpatialCurvedRow
を使用してください。これは同じ動作をします。 MainPanel
とActivityPanel
は、同様の最新のシステム イメージで実行してもタイトルバーが表示されなくなりました。- アルファ修飾子とスケール修飾子をスタックできるようになり、値が乗算されて最終的に適用されるアルファ値またはスケール値が算出されます。
- 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-alpha03
と androidx.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-alpha02
と androidx.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.inner
、EdgeOffset.outer
、EdgeOffset.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 に対して配置します。
空間レイアウト:
SpatialRow
、SpatialColumn
、SpatialBox
、SpatialLayoutSpacer
を使用して、複数の空間パネルを作成し、空間レイアウト内に配置できます。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 を使用すると、コンテンツが間違った方向に移動します。