XR 向け Jetpack Compose

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

依存関係の宣言

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

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

Groovy

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

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

Kotlin

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

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

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

フィードバック

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

新しい問題を報告する

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

バージョン 1.0

バージョン 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 ベースのコンポーザブル 親に接続されます。
  • 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 がリリースされました。

初回リリースの機能

  • XR 向け Jetpack Compose の最初のデベロッパー リリース。既存の 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 を使用すると、コンテンツが間違った方向に移動します。