---
title: 20260916_AndroidXR-JetpackXRSDK
tags:  #xrmtg #xr #androidxr  
author: [Miyaura](https://image.docswell.com/user/m-taka596)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/2JVVQKVPJQ.jpg?width=480
description: 【大阪-オンライン開催】XRミーティング 2026/09/16 #Xグラス #XRMTG ( https://osaka-driven-dev.connpass.com/event/404335/ )登壇資料。 Anddoid XR用のコンテンツ開発方法の１つであるJetpack XR SDKを使うための環境、簡単な最初のアプリの開発について調査した内容を共有しました。
published: September 16, 26
canonical: https://image.docswell.com/s/m-taka596/KY8LLD-XRMTG-JetpackXRSDK-20260916
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/2JVVQKVPJQ.jpg)

Jetpack XR SDK で Android XR アプリを作ってみた
Unity
なしで空間パネルを出すまで — 環境構築 / 実装
/ エミュレータ確認
@takabrz1
Takahiro Miyaura


# Page. 2

![Page Image](https://bcdn.docswell.com/page/5EGLWQLQJL.jpg)

宮浦 恭弘
(Miyaura Takahiro)
Microsoft MVP
for M365,Microsoft Foundry
大阪駆動開発コミュニティに生息
HoloLens 日本販売してからxR 系技術に取組む( 過去Mixed Reality
領域でMicrosoft MVP
新しい技術や、XR関連の技術を調べたり、体験して日々技術を満喫
技術Tips :
https://qiita.com/miyaura
https://zenn.dev/miyaura
最近興味があって取り組んでいるもの
○ AndroidXR
○ 新しいガジェット(Even G2,MiRZA,Galaxy
○ Microsoft Foundry
などのAI 技術
@takabrz1
※よかったらこれを機にお知り合いになってください
XR,etc …)
受賞)


# Page. 3

![Page Image](https://bcdn.docswell.com/page/4JQY3KYW7P.jpg)

今日話すこと
Jetpack XR 1.0.0
- beta02 / Compose for XR 1.0.0
※ Jetpack XR
- alpha17
を触ってみた記録
とは何か — SDK の構成と Home / Full
Space
※ Unity と何が違うのか — 書き方・資産・3D の自由度
※ 環境構築 — バージョンの罠と Gradle まわり
※ 最初の空間パネル — Subspace ＋ SpatialPanel
※ エミュレータでどこまで確認できるか
2026/09/16
© 2026 Takahiro Miyaura
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/K74W1PW1E1.jpg)

なぜ、この話になったのか
あれですよあれ
2026/09/16
© 2026 Takahiro Miyaura
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/LJ1YG9Y5EG.jpg)

もうすぐ AURA が来るのでAndroid XRの話
XREAL AURA がもうすぐ来る。
（きますよね秋って言ってたし）
だから Galaxy XR
で素振りしていた
2026/09/16
© 2026 Takahiro Miyaura
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/GJWGKQGW72.jpg)

1. Jetpack XR とは何か
2D の Compose が、そのまま空間に浮く
2026/09/16
© 2026 Takahiro Miyaura
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/4EZLZWL273.jpg)

Android XR アプリの作り方は 3 つ
① Jetpack XR SDK
② WebXR
③ ゲームエンジン
Kotlin / Compose
TypeScript / Chrome
Unity / Unreal / Godot
※ インストール不要で動く
※ hit - test ・平面検知が
※ ゼロから空間表現を作れる
※ 既存の 3D 資産が効く
※ Unreal と Godot は
※ 2D の Compose UI
が
そのまま空間パネルに
※ 3D は glTF を「置く」
※ 今日の話はここ
OpenXR
効く
※ 描画は Web の範囲
②③ の土台。Android XR
は 1.0 / 1.1
2026 - 05 に公式対応
とベンダ拡張に対応
「UI を空間に出す」なら ① ／ 「空間そのものを作る」なら ③
2026/09/16
© 2026 Takahiro Miyaura
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/Y76WZGM67V.jpg)

前提：Jetpack Compose とは
Android
の宣言的 UI ツールキット
最小の Compose 画面
※ UI を Kotlin で書く（XML の後継）
※ @Composable 関数がそのまま画面になる
※ 状態が変われば、その部分だけ描き直される
※ 継承ではなく、関数の組合せで画面を作る
Unity
2026/09/16
でいう uGUI / UI Toolkit
@Composable
fun Counter() {
var n by remember {
mutableIntStateOf(0) }
Column {
Text(&quot; タップ回数: $n&quot;)
Button(onClick = { n++ }) {
Text(&quot; タップ&quot;)
}
}
}
にあたる。この関数がそのまま空間パネルの中身になる
© 2026 Takahiro Miyaura
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/G75MWVZ574.jpg)

Jetpack XR SDK の全体像
androidx.xr.compose
androidx.xr.scenecore
androidx.xr.arcore
Compose を空間に置く
3D シーンを直接さわる
現実世界を認識する
※ Subspace
※ SpatialPanel
※ Orbiter
※ SubspaceModifier
※ GltfModelEntity
※ MeshEntity
※ SpatialEnvironment
※ SurfaceEntity
※ Plane / Anchor
※ Hand / Depth
※ hitTest()
androidx.xr.runtime
Session
UI を空間に出すだけなら compose ＋ runtime
2026/09/16
と Config
を持つ土台
の 2 つで足りる
© 2026 Takahiro Miyaura
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/9J29Q3RGER.jpg)

Home Space と Full Space
Home Space
Full Space
※ 2D ウィンドウが 1 枚浮く
※ アプリが空間を占有する
※ 普通の Android
※ パネルを複数枚、3D も自由に配置
アプリの姿
※ 空間 UI は使えない
※ 空間 UI が使えるのはこのモードだけ
※ 起動時の既定はこちら
※ Manifest
実行中の切替は requestFullSpace() / requestHomeSpace()
2026/09/16
© 2026 Takahiro Miyaura
で起動モードを指定
（suspend
関数）
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/DEY4W1DGJM.jpg)

2. Unity と何が違うのか
同じ Galaxy XR
2026/09/16
でも、前提がまるごと違う
© 2026 Takahiro Miyaura
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/VJNY926878.jpg)

Unity と Jetpack XR — 同じ端末、別の作り方
Jetpack XR SDK
＋ Compose
書き方 C#
画面をそのまま空間へ
資産 3D
を置く（合成は SDK ）
3D
書き方 Kotlin
資産 2D
3D
glTF
Unity / OpenXR
ビルド gradlew
と adb で完結
2026/09/16
描画の自由度は最大
苦手 OS
。入口が「Android
エディタ
アセット・シェーダ
ビルド Extension
苦手 描画の作り込み
出す先は同じ Galaxy XR
＋ Unity
のタグ固定が要る
標準の部品・IME
アプリ」か「3D 体験」かで分かれる
© 2026 Takahiro Miyaura
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/YE9P21LXJ3.jpg)

どちらを選ぶか
既存アプリの延長か、体験そのものを作るか
既存の Android / Compose
アプリを空間に出したい
空間そのものの体験・3D 表現をゼロから作りたい
Unity
実機が無い。まず触って感触をつかみたい
迷ったらパネルから始めて、足りなくなったら Unity
2026/09/16
Jetpack XR
Jetpack XR
へ移る
© 2026 Takahiro Miyaura
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/GE8D54X9ED.jpg)

3. 環境構築
詰まるのはコードより手前、バージョンと JDK
2026/09/16
© 2026 Takahiro Miyaura
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/LELMY68M7R.jpg)

必要なもの（2026-09 時点）
そろえるもの
先に踏む地雷
Android Studio
Quail 4
（2026.1.4
）で確認
JDK 17
compileSdk / minSdk
AGP 9.2.0
※ 同梱 JBR
は 21 。JDK 17
別に用意する
37 / 34
＝ Android Gradle Plugin
Gradle
9.4.1
Kotlin
2.4.10
AVD XR Headset
は対応版より新しい
AGP のプロジェクトを開けない
※ Studio
を
に kotlin.android
は不要（足すと失敗）
※ AGP 9
以上
＋ google - xr API 34
※ sdk.dir
はスラッシュ区切り
ここを踏むと「コードを書く前」で半日溶ける
2026/09/16
© 2026 Takahiro Miyaura
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/4JMYN566JW.jpg)

バージョンの罠 — compose だけ遅れている
最新版はこうなっている
ところが compose の POM は
runtime / scenecore / arcore →
&lt;artifactId&gt;runtime&lt;/artifactId&gt;
&lt;version&gt;1.0.0
- beta02&lt;/version&gt;
&lt;artifactId&gt;scenecore&lt;/artifactId&gt;
&lt;version&gt;1.0.0
- beta02&lt;/version&gt;
1.0.0 - rc01
compose / material3 →
1.0.0 -
alpha17
※ Compose for XR
を使う限り、素の状態では beta02 が入る
※ この検証は runtime / scenecore / arcore = beta02
、compose = alpha17
※ カタログを xrCore と xrCompose の 2 系統に分け、切替を 1 行で済むようにする
2026/09/16
© 2026 Takahiro Miyaura
で固定
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/PJR9D3PN79.jpg)

バージョンカタログと build.gradle.kts
AGP は Android Studio
の対応版に合わせる（Studio
gradle/libs.versions.toml
[versions]
agp
= &quot;9.2.0&quot;
kotlin = &quot;2.4.10&quot;
xrCore = &quot;1.0.0
- beta02&quot;
xrCompose = &quot;1.0.0
- alpha17&quot;
[libraries]
xr - runtime = { module =
&quot;androidx.xr.runtime:runtime&quot;,
version.ref = &quot;xrCore&quot; }
xr - compose = { module =
&quot;androidx.xr.
compose: compose&quot;,
version.ref = &quot;xrCompose&quot; }
2026/09/16
より新しい AGP は開けない）
hello - panel/build.gradle.kts
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.compose)
}
android {
compileSdk = 37
defaultConfig { minSdk = 34 }
}
java { toolchain {
languageVersion =
JavaLanguageVersion.of(17) } }
dependencies {
implementation(libs.xr.runtime)
implementation(libs.xr.compose) }
© 2026 Takahiro Miyaura
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/PEXQ1438JX.jpg)

AndroidManifest — 起動モードを決める
HOME_SPACE
AndroidManifest.xml
2D ウィンドウで起動（既定）
&lt;uses - feature
android:name=&quot;android.software.xr.api.spatial&quot;
android:required=&quot;false&quot; /&gt;
FULL_SPACE_MANAGED
Full Space
&lt;property
android:name=&quot;android.window.
PROPERTY_XR_ACTIVITY_START_MODE&quot;
android:value=&quot;XR_ACTIVITY_START_MODE_
FULL_SPACE_MANAGED&quot; /&gt;
既定は HOME_SPACE。Full Space
required=&quot;false&quot;
2026/09/16
。配置は SDK 任せ
FULL_SPACE_UNMANAGED
Full Space
。配置も自分で
で出したいなら MANAGED を明示する
にしておけばスマホ・タブレットにも入り、普通の 2D アプリとして動く
© 2026 Takahiro Miyaura
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/3EK92ZYLED.jpg)

XR エミュレータを用意する
AVD を 1 つ作るだけ
※ Device Manager →
Headset ）
config.ini
カテゴリ XR （XR
※ システムイメージは google - xr
の API 34
$ANDROID_HOME/emulator/emulator
XR_Headset
- no - snapshot - load
- avd
- gpu auto
（抜粋）
tag.id=android
- xr
image.sysdir.1=system
- images ¥
android - 34 ¥google - xr ¥x86_64 ¥
hw.lcd.width=2560
hw.lcd.height=2558
hw.lcd.density=320
hw.ramSize=4096
正方形に近い 2560 ×2558 ＝ ヘッドセットの合成画面（片目分）がそのまま 1 枚の画面に
ポインタ役はマウスカーソル。ただしエミュレータに「手」も「深度」も無い（実機のみ）
2026/09/16
© 2026 Takahiro Miyaura
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/L73W4D9675.jpg)

4. 最初の空間パネル
XR 固有のコードは、実はごくわずか
2026/09/16
© 2026 Takahiro Miyaura
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/87DKQPGMJG.jpg)

空間パネル 1 枚の骨格
MainActivity.kt
（要点のみ・全体でも 150 行ほど）
fun HelloSpatialPanelApp() {
val spatialUiEnabled =
LocalSpatialCapabilities.current.isSpatialUiEnabled
if (!spatialUiEnabled) {
Surface(Modifier.fillMaxSize()) { PanelContent() }
}
Subspace {
SpatialPanel(
SubspaceModifier.width(720.dp).height(480.dp)
.movable().resizable()
) { PanelContent() }
}
}
XR 固有なのは Subspace / SpatialPanel / SubspaceModifier
2026/09/16
© 2026 Takahiro Miyaura
の 3 つだけ
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/VJPKLN3QE8.jpg)

押さえるのは 3 つ ＋ 空間モード切替
Subspace
SpatialPanel
Orbiter
※ ここから先は 3D 空間
※ Modifier ではなく
※ 中身は普通の Compose
※ 既存の 2D 画面をそのまま
※ movable /
※ パネルの縁の外に浮く
※ ツールバーや戻るを外へ
※ Full Space
のときだけ
SubspaceModifier
※ offset / rotate /
scale
resizable
も使える
で動かせる
現れる
空間モードの切替： requestFullSpace() / requestHomeSpace()
ComponentActivity
2026/09/16
の suspend
拡張。rememberCoroutineScope
© 2026 Takahiro Miyaura
から呼ぶ
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/2EVVQK4PEQ.jpg)

エミュレータでどこまで確認できるか
動かして、絵を回収する
./gradlew :hello
adb shell am start
adb shell screencap
ここは実機でしか見えない
- panel:installDebug
- n PKG/.MainActivity
- p /sdcard/shot.png
※ Full Space
で起動し、パネルが 1 枚浮く
※ 掴んで移動、角をつまんでリサイズできる
※ Home Space に落としてもタップ回数は保持される
screencap
2026/09/16
は合成画面（片目分）をそのまま返す ／ takeScreenshot()
© 2026 Takahiro Miyaura
※ 手（ハンドトラッキング）
※ 深度センサー
※ 空間オーディオの定位
※ 立体視・奥行き感
はダミー画像
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/57GLWQ1QEL.jpg)

まとめ
※ 空間 UI は Subspace
中身は普通の Compose
＋ SpatialPanel
※ 空間 UI が効くのは Full Space
＋ SubspaceModifier
だけ。起動は Manifest
の 3 つ。
、切替は
requestFullSpace()
※ 2026 - 09 時点は compose=alpha17
固定。2 系統で管理
※ Subspace
は出し入れしない／AGP 9
が runtime/scenecore
に kotlin.android
を beta02
に
を足さない／JDK は
17
※ エミュレータだけでパネルまで確認できる。手・深度・音・立体感は実機
Android
2026/09/16
アプリが書けるなら、Android XR
の入口はもう開いている
© 2026 Takahiro Miyaura
24


# Page. 25

![Page Image](https://bcdn.docswell.com/page/4EQY3KDWJP.jpg)

大阪駆動開発
関西を中心に、IT系のおもしろそうなことを
楽しんでやるコミュニティ


