Jetpack Compose for XR
最新の更新 | 安定版リリース | リリース候補版 | ベータ版リリース | アルファ版リリース |
---|---|---|---|---|
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-alpha05
と androidx.xr.compose:compose-testing:1.0.0-alpha05
がリリースされました。バージョン 1.0.0-alpha05 には、これらの commit が含まれています。
新機能
SubspaceComposable
アノテーション クラスを公開にしました。(Ic2a34、b/399432430)- 180 度と 360 度の球体を表す 2 つの新しい
SpatialExternalSurface
コンポーザブル。(I40ef2、b/391705799) SubspaceModifier.aspectRatio
を追加しました(Ide5ab、b/399729509、b/414762147)SceneCore
と XR 用 Compose の相互運用性を改善するために、SceneCoreEntity
API を追加しました。(I50bb3、b/423020989)- スケーリングされていない
GravityAligned
機能をサポートするGravityAlignedsubspace
API を提供しました(I07359)
API の変更
SpatialDialog()
はSpatialDialogProperties.dismissOnBack
の押下設定に従います。(Ib453b、b/416797132)- メートル単位で表されるため、
minimumPanelDimension
を新しいデフォルトのディメンション サイズDimensions(0.1f, 0.1f, 0.1f)
に更新します。(Ib852a) - サブスペースとオービターは、ホームスペースとアプリがバックグラウンドにあるときに内部状態を保持するようになります。ホームスペース モードでは、Subspace はフルスペース モードへの切り替えに備えてシーンをセットアップします。(I40317、b/416037751)
- アプリがバックグラウンドで動作しているとき、
SpatialDialogs
は状態を保持するようになりました。(I6aa56) ApplicationSubspace
は、推奨されるスケールと位置をシステムから継承するようになりました。(I4565f、b/418834194)SubspaceComposable
以外のコンテキストでSubspaceComposable
が使用された場合のエラー メッセージを改善し、エラーを早期にトリガーするようにしました。(Iee2ae、b/416484684)- 構成可能な API を誤って使用した場合、警告が見落とされることが多いため、
ExperimentalSubspaceVolumeApi
を Warning から Error に更新しました。(I427aa、b/424864286) - サブスペースと
ApplicationSubspace
はrecommendedContentBoxInFullSpace
によって制約されるようになりました。以前はSpatialUser
の視野によって制約されていました。(I41015、b/423074142) SpatialElevation
を更新し、最小サイズを使用することで、ハードコードされたサイズを使用しないようにしました(I2dbe6、b/427785338)- キー変数が変更されたときに更新されるように、
SpatialAcitivityPanel
をスクリムする方法を更新します。(I0f64d、b/427999029) - デフォルトの制約値を同等の値に設定するために、
VolumeConstraints.Unbounded
を削除します。(Ie24ec、b/407938414) SpatialFeatheringSize
が公開されなくなりました(I1c15b、b/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 を削除しました。(Ifff4c、b/421427391、b/421427391) MeasurePolicy
の名前がSubspaceMeasurePolicy
に変更されました。(I37a9b、b/422553904)- デフォルトなしではメンバーを追加できないため、
SubspaceSemanticsInfo
をシール済みインターフェースにします。(I372f9、b/423704068) SpatialExternalSurface
のドキュメントを更新し、ContentSecurityLevel
の名前をSurfaceProtection
に変更しました(I3c460、b/420982808)- アンカー設定を可能にする、移動可能な修飾子のオーバーロードされたコンストラクタを提供しました。(Ic0c70)
- ツールチップの追加の位置プロバイダにより、ツールチップをアンカーの上、下、左、右のいずれに配置するかをデベロッパーが制御できるようになりました。カレットの Shape を受け取る API を追加し、より多くのカスタムシェイプを提供できるようにしました。(Ie513c、b/374766087、b/418854637)
PublishedApi
としてのCoreEntity
を削除しました(Ifee05)
バグの修正
- レンダリング時に
SpatialDialog
が点滅する問題を修正しました。(Ife73c、b/401619909) SpatialDialog
がアクティビティ パネルをスクリムできない問題を修正しました。(I8ca6c、 b/367442109)- XR ダイアログで一部のコンテンツが表示されない問題を修正しました(I17cd5、b/418062437)
- コンテンツの内部をクリックすると
SpatialPopup
が閉じられる問題を修正しました。(If262c、b/417245722) resizable().movable()
をチェーンすると SpatialPanel が新しいサイズに正しくリサイズされない問題を修正しました。(I02ee3、b/422264230)SpatialComposeVideoPlayer
でtopBar
がメニューと重なる問題を修正しました(Id33bc、b/427168167)- 角の丸みがレンダリングされない問題を修正しました(I975fe、b/428261830)
バージョン 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 ベースと View ベースの
SpatialPanel
は、コンテンツに基づいてサイズを調整できるようになりました。 - デベロッパーは、独自のカスタム
SpatialElevationLevel
値を設定できるようになり、事前定義されたレベルに制限されなくなりました。 elevation
パラメータを使用して、オービターの高度レベルをカスタマイズできるようになりました。- サブスペースは、デフォルトで
SpatialUser
の視野の幅と高さで制限できるようになりました。視野を特定できない場合は、デフォルトの視野の幅と高さの値が使用されます。 Movable
修飾子に新しいコールバックonMoveStart
とonMoveEnd
を追加しました。onMoveStart
コールバックとonMoveEnd
コールバックは、ユーザーが移動可能な修飾子でサブスペース コンポーザブルの移動を開始または終了したときに呼び出されます。SpatialRow
やSpatialPanel
などの空間 API からname
パラメータが削除されました。空間コンポーズ ツリーのデバッグには、代わりに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
計算など)中にいずれかのディメンションがゼロに設定された場合に発生するクラッシュを修正しました。代わりに、パネルが非表示になります。この修正はレイアウト フェーズでのクラッシュに特に対処するものであり、ユーザー操作によるパネルのサイズ変更は別途処理されます。非表示のパネルには 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
コンテキストで使用できるようになり、Orbiters が最も近いSubspaceLayout
ベースのコンポーザブルな親にアタッチされるようになりました。- カスタムの配置ベースの修飾子を許可する
LayoutCoordinatesAwareModifierNode
を導入しました。 - アタッチ/デタッチ ライフサイクル メソッドを
SubspaceModifier.Node
に追加しました。 - 移動可能な修飾子に
scaleWithDistance
を追加しました。scaleWithDistance
が有効になっている場合、移動されたサブスペース要素は拡大または縮小します。また、移動前の明示的なスケールも維持されます。
API の変更
SessionCallbackProvider
を削除し、SpatialCapabilities
に置き換えました。
その他の変更
minSDK
を 24 に削減しました。すべての Jetpack XR API は、実行時に引き続き API 34 を必要とします。Orbiter
EdgeOffset.inner
、EdgeOffset.outer
、EdgeOffset.overlap
のコンストラクタが@Composable
メソッドではなくなり、コンポーザブルでないコンテキストで使用できるようになりました。- 最新の UX 仕様に沿うように空間の高度レベルを更新しました。
MeasurableLayout
にSubspaceSemanticsInfo
インターフェースを実装します。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 エンティティを配置します。
空間レイアウト:
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 である必要があります。回避策として、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 を使用すると、コンテンツが誤った方向に移動します。