$30 off During Our Annual Pro Sale. View Details »

Jetpack XR SDKから紐解くAndroid XR開発と技術選定のヒント / abou...

Jetpack XR SDKから紐解くAndroid XR開発と技術選定のヒント / about-androidxr-and-jetpack-xr-sdk

XR Kaigi 2025で登壇したスライド資料です

Avatar for にー兄さん

にー兄さん

December 04, 2025
Tweet

More Decks by にー兄さん

Other Decks in Programming

Transcript

  1. にー兄さん ソフトウェアエンジニア@HoloLab inc. Babylon.js勉強会運営 Iwaken Lab. Microsoft MVP for Developer

    Technologies (2024~) 好きな技術 Babylon.js / WebXR Device API / Android XR / 3D Gaussian Splatting @ninisan_drumath @drumath2237
  2. 本日のお話 「Jetpack XR SDK」がメイン Android XRを取り巻く状況やSDKの概要 特にSDKが(現状)どのような機能を持っており、 どんな目的で使えるものなのか XR SDKの得意・苦手、使い分けについて

    ゴール Android XRに興味のあるエンジニアがJetpack XR SDKについて知る Android XRアプリ開発時の技術選定について解像度を高める 例えばUnityとどっちを使うか、など
  3. 本セッションにおける検証環境 Windows 11 Home Android Studio Otter 3 Feature Drop

    | 2025.2.3 Canary 2 Android Emulator 36.4.1 Google Play XR Intel x86_64 Atom System Image Revision 7 Jetpack XR SDK Jetpack Compose for XR 1.0.0-alpha08 Material Design for XR 1.0.0-alpha12 Jetpack SceneCore 1.0.0-alpha09 ARCore for Jetpack XR 1.0.0-alpha08
  4. アジェンダ 1. Android XRに関する背景 2. Jetpack XR SDKを使ったアプリ開発 3. Deep

    Dive into XR SDK 4. XR SDKから考察するAndroid XRアプリ開発 5. おわりに
  5. Android XRのこれまでの流れ 2024/12/12 Android XR発表 Introducing Android XR SDK Developer

    Preview 2025/05/20-21 Google I/O 2025 KeynoteではARグラスを使ったライブデモもあった 2025/10/22 SamsungからGalaxy XR発表 初のAndroid XR OS搭載デバイス https://blog.google/products/android/android-xr/ https://news.samsung.com/global/unlock-the-infinite-possibilities-of-xr-with-galaxy-ai
  6. Google I/O 2025 1年に1回のGoogle公式技術カンファレンス KeynoteにてARグラスを使ったライブデモ その他にも2,3本 Android XR関連のセッションがあった https://youtu.be/o8NiE3XMPrM Galaxy

    Event October 2025 Samsung社のイベント Project Moohanという名前だったものが 正式にGalaxy XRとして発表 https://youtu.be/ITXJquX9FqM
  7. Android XRで動作するアプリ アプリには2種類の状態がある Home Space Full Space 一般的にスマホで使えるアプリは Home Spaceで動作可能

    Android XR向けにcapabilityの設定や Spatial UIが構築されていれば Full Spaceで動作 2つの状態は相互に遷移可能 UnityだとFull Spaceしか使えないなどの制約も (手元のシミュレータで動作させた様子→)
  8. 開発環境 アプリ開発の選択肢は次のとおり Jetpack XR SDK Kotlin/Composeを使うネイティブSDK(詳細はこれから) Unity XRIやARFoundation、OpenXR Pluginなどを使って開発 Android

    XR Extentions for Unityをインポートして使う OpenXR OpenXR 1.0, 1.1の規格に従っている WebXR Chrome for Android XRなどのブラウザで動作するWebXRアプリ開発 WebXR Device APIを使う
  9. Android Studioとエミュレータの利用 モバイルアプリ開発などと同様に、 Android Studioなどのツールを活用可能 ビルド、テスト、デバッグなど Home SpaceでのUIはAndroid Studio内で プレビューしながら作れる

    Android XR emulatorが用意されており、 Compose for XRやSceneCoreを使った 機能の動作を確認できる エミュレータの仕組みで 2D UIはホットリロードも可能
  10. Jetpack Compose for XR namaspace: androidx.xr.compose latest: 1.0.0-alpha8 (2025/10/22) Jetpack

    Composeを使って空間UIを実装するためのラ イブラリ Android XRで空間パネルに表示するUIに必要な部品を 提供 Subspace コンポーザブルの定義 Subspace Composables Spatialized Component Subspace Modifier Full SpaceでSpatialPanelとOrbiterがレンダリングされている https://developer.android.com/develop/xr/jetpack-xr-sdk/develop-ui
  11. Material Design for XR namespace: androidx.xr.compose.material3 latest: 1.0.0-alpha12 (2025/10/22) Googleが提供するMaterial

    Designを 空間UIで扱うするためのライブラリ 分けて取り上げられがちだが、 実態としてはCompose for XRの一部 Material Designでは 様々な画面サイズのデバイスに対応すべく Adoptive Layoutという仕組みが用意されている https://developer.android.com/develop/xr/jetpack-xr-sdk/material-design
  12. Material Design for XR Material Designでは 様々な画面サイズのデバイスに対応すべく Adoptive Layoutという仕組みが用意されている EnableXrComponentOverrides

    というコンポーザブルの子にすると Material3のコンポーネントはSpatial UIに対応するよ うに Material Design Guidelineには 「XR」の項目が盛り込まれている(すごい) https://m3.material.io/components/navigation- bar/xr
  13. Jetpack SceneCore namespace: androidx.xr.scenecore latest: 1.0.0-alpha9 (2025/11/19) 3Dシーン上のオブジェクトを扱うための低レベルな機 能を提供するライブラリ 空間UIのパネルや3Dモデル、3D環境といったものを

    Entityとして管理する 空間音響や空間ビデオの再生などの機能も Entity-Component Systemを採用 エミュレータ内で3Dモデルをロードして表示する様子
  14. ARCore for Jetpack XR namespace: androidx.xr.arcore latest: 1.0.0-alpha08 (2025/11/19) AR機能を扱うためのライブラリ

    従来からモバイルで使われている ARCore SDK for Androidとは別物だけど 内部的にそれに依存している 現在エミュレータでは動かない https://developer.android.com/develop/xr/jetpack-xr-sdk/arcore/hands
  15. @Composable fun Example2DComposable() { var label by remember { mutableStateOf("")

    } Surface { Column( modifier = Modifier.padding(48.dp), horizontalAlignment = Alignment.CenterHorizontally ) { Text(label) Row( modifier = Modifier.fillMaxSize(), horizontalArrangement = Arrangement.Center ) { Button( onClick = { label = "button 1" }, modifier = Modifier.padding(5.dp) ) { Text("Button 1") } Button( onClick = { label = "button 2" }, modifier = Modifier.padding(5.dp) ) { Text("Button 2") } } } } }
  16. Full SpaceモードのUI Full Spaceで動作するコンポーザブルは Subspace コンポーザブルの子である必要がある Subspaceコンポーザブルで囲むことで Full Spaceでも動作するように @Composable

    fun SpatialExample() { // Full Spaceで動作する特殊なコンポーザブル Subspace { SpatialPanel( modifier = SubspaceModifier.width(400.dp) ) { Example2DComposable() } } }
  17. Spatial Component Spatial Popupのようなコンポーネントは elevation をModifierで指定して 高さを出せる SpatialPopup( alignment =

    Alignment.TopCenter, elevation = 78.dp // 任意の値 ) { Button({}) { Text("Spatial Popup") } }
  18. SceneCoreによる3D空間体験の実装 Jetpack SceneCoreは空間UIのパネルなどを含む、 あらゆる3D表現を扱う低レベルなAPIを提供 Entity-Component Systemを採用 空間パネルや3Dモデルだけでなく、 環境マップや空間ビデオ、空間音響に関する機能も含 まれる 3Dモデルの表示

    val session = LocalSession.current LaunchedEffect(null) { if (session != null) { val gltfModel = GltfModel.create(session, Paths.get("models", "Fox.glb")) val entity = GltfModelEntity.create(session, gltfModel) entity.setScale(0.005f) } }
  19. ARCoreによるAR機能の実装 例えばDepth estimation Depthの動作モードを設定 比較的シンプルなAPIでDepth値の取得 Depth estimationの結果 https://developer.android.com/develop/xr/jetpack-xr- sdk/arcore/depth val

    newConfig = session.config.copy( depthEstimation = Config.DepthEstimationMode.SMOOTH_ONLY, ) // Depth Map取得 val depthMap = DepthMap.left(session) ?: return // 深度値の取得 val result = depthMap.smoothDepthMap?.get(index)
  20. ARCoreによるAR機能の実装 例えばPlane detection 検知委平面の設定 State Flowとして検知平面の取得 val newConfig = session.config.copy(

    planeTracking = Config.PlaneTrackingMode.HORIZONTAL_AND_VERTICAL, ) Plane.subscribe(session).collect { planes -> plane.type // HORIZONTAL_DOWNWARD_FACING, VERTICAL, ... plane.label // CEILING, FLOOR, TABLE, ... }
  21. ARCoreでサポートされる機能 ドキュメント曰く Plane (Hit-Test) Anchors Hand tracking Head tracking Face

    tracking Depth estimation 実際のコードを見ると、 Eye trackingやGeospatial APIなども 見受けられる
  22. まとめ Android XRアプリのネイティブSDKであるJetpack XR SDK Kotlin / Composeによるアプリ開発ができるため、 宣言的UIやリアクティブプログラミングの良さを生かしたUI開発ができる 高度な3Dデータの操作はまだできないため

    複雑なゲームなどはUnityでやるのが良い UI主体ならネイティブ、ゲームのようなものはゲームエンジン → これって普通の考え方なのでは? いままで「XRと言えばUnity」だった世界から 要件によって適切な技術選定が必要になってきている
  23. 関連・参考 Android XR (Android Developer) https://developer.android.com/develop/xr Develop with the Jetpack

    XR SDK https://developer.android.com/develop/xr/jetpack-xr-sdk Android Studio tools for XR https://developer.android.com/develop/xr/jetpack-xr-sdk/studio-tools android/xr-samples (GitHub) https://github.com/android/xr-samples The future is now, with Compose and AI on Android XR (Google I/O 2025) https://io.google/2025/explore/technical-session-2 『Jetpack XR SDKによるAndroid XRアプリ開発の現状整理』 https://techbookfest.org/product/3Ttz8QVn4A5uXRYyRm34Xr? productVariantID=fArCdYsZCt0d8ez5nsFNj9