Open61

AndroidXRのキャッチアップログ(2025/04~)

にー兄さんにー兄さん

Jetpack for XRのdocsは4/30・5/1に更新されているものが多いので確認する
特にARCoreの部分はPlaneとAnchorのページが増えている
3d in volumeのコードが欠損している

androidx.xr系のパッケージは5/7に全体的に大きなアプデの波が来ていてリリースノートがにぎわっている

にー兄さんにー兄さん

Emulatorのアプデなどをして、自分の手元で最新のcodelabsのコードが動いた
これでSceneCore alpha04の環境が動いたので嬉しい

にー兄さんにー兄さん

あ、なんかもともとオンになってたな
たぶんdockerか何かの設定をしたんだろう

にー兄さんにー兄さん

Gemini in Android Studioを使ってみた結果、SpatialPanelじゃなくて副作用を使えとアドバイス
なるほどね

    var avocadoEntity by remember { mutableStateOf<GltfModelEntity?>(null) }

    LaunchedEffect(session) {
        try {
            val model = GltfModel.create(session, "Avocado.glb").await()
            avocadoEntity = GltfModelEntity.create(session, model)
        } catch (e: Exception) {
            // エラー処理
        }
    }

    Subspace {
        if (avocadoEntity != null) {
            // avocadoEntity を使用して表示
            // 例: 特定の位置に配置
            Entity(entity = avocadoEntity!!, modifier = SubspaceModifier.translate(x = 0.dp, y = 0.dp, z = -100.dp))
        }
    }
にー兄さんにー兄さん

2025/06/12追記

SDKアプデはalpha04以降動きなし
docs更新は5/23以降更新なし
codelabsもPart2から動きなし

にー兄さんにー兄さん

ということで、API Referenceを見てみたら想像以上に前には見つけられていなかったものを見つけたのだった
それを雑多に目盛っていく

にー兄さんにー兄さん

ARCoreのリリースノートを見ればわかるけど、
-guava-rxjavaという名前のパッケージが追加されている

https://developer.android.com/jetpack/androidx/releases/xr-arcore

にー兄さんにー兄さん

ちなみに他のパッケージも、guavaやrxjavaに依存している部分は別パケに切り出しているみたいだ

dependencies {
    implementation("androidx.xr.scenecore:scenecore:1.0.0-alpha07")

    // Optional dependencies for asynchronous conversions
    implementation("androidx.xr.scenecore:scenecore-guava:1.0.0-alpha07")

    // Use to write unit tests
    testImplementation("androidx.xr.scenecore:scenecore-testing:1.0.0-alpha07")
}
にー兄さんにー兄さん

API Refを見てみると、確かに名前空間増えてるんだよな
前見た時は絶対こんなになかった

にー兄さんにー兄さん

JetpackXRSDKのリポジトリを見てみると、実際に中にはもっとたくさんある

にー兄さんにー兄さん

ARCoreのクラスを見ると、だいたいの機能がわかりやすくていいね

にー兄さんにー兄さん

といてもやっぱり、こんなにあったっけ?になる
FaceとかDepthMapとか。。。

にー兄さんにー兄さん

Faceはやっぱり顔認識っぽい

にー兄さんにー兄さん

AnchorもArDeviceもDepthMapもFaceもHandもPlaneも、.Stateというネステッドクラスがあり、-rxjavaパッケージでそのStateFlowが拡張関数として提供されている
ドキュメントには載っていないけど、Earthも同じく

にー兄さんにー兄さん

guava系のパッケージはListenableFutureを返す拡張関数を提供

にー兄さんにー兄さん
Earth.createAnchorOnSurfaceAsync(
    session: Session,
    latitude: Double,
    longitude: Double,
    altitudeAboveSurface: Double,
    eastUpSouthQuaternion: Quaternion,
    surface: Earth.Surface
) : ListenableFuture<AnchorCreateResult>

この関数定義がアツい
どうやらROOFTOPとTERRAINアンカーに関してはドキュメンテッドな関数が存在するらしい

にー兄さんにー兄さん

とはいえWGS84のほうも普通に用意されていそう
API Refには載っていないけど

にー兄さんにー兄さん

他にもguava系で行くと、scenecore-guavaではgltfModelの作成でListenableFutureが使える

にー兄さんにー兄さん

全然docsに載っていないけど実装されている機能がたくさんあった

Guide Docs < Release note < API Reference < 実際のコード

という風に情報量が多くなってくるので、公式docsだけ見てても知らないことたくさんだな

にー兄さんにー兄さん

そういえば公式のガイドに載っていたのだけど
android.extensions.xrなるパッケージがあって、ProGuardをするためには必要らしい

https://developer.android.com/develop/xr/jetpack-xr-sdk/getting-started#enable-minification