Today we’re excited to launch Developer Preview 4 of the Android XR SDK, increasing our focus on unifying cross-device development for headsets, wired XR Glasses, and more. intelligent glasses. To keep our platform intuitive, we are adopting more descriptive nomenclature for our form factors, where AI Glasses are now Audio Glasses and Display AI Glasses are now Display Glasses, these changes are reflected in our documentation starting today.
This release is packed with updates that help you create incredible experiences for XR devices, enable deeper immersive experiences on XR headsets, and streamline the path to creating augmented experiences on audio and display glasses. Additionally, our core libraries—including the XR Runtime, Jetpack SceneCore, and ARCore for Jetpack XR—will officially move to beta soon!
To give you early access to the hardware and resources to build immersive and augmented experiences on upcoming devices like displays and audio glasses and XREAL’s Project Aura – we’re announcing. Android XR Developer Catalyst Program. Learn more Start your application Today.
Creating augmented experiences for audio and display glasses
Starting with our library for augmented experiences, Developer Preview 4 introduces new APIs that help you build and test your apps.
Jetpack Projected: Device Availability and ProjectedTestRule API
Jetpack projected libraries help connect app experiences from the phone to the user’s field of view. we have added Device Availability APIwhich consolidates wear status and connectivity signals into standard Android lifecycle.state Value. This lets you adjust your application behavior depending on when the device is malfunctioning.
val xrDevice = XrDevice.getCurrentDevice(projectedContext)
// Observe the device lifecycle flow
xrDevice.getLifecycle().currentStateFlow
.collect { state ->
when (state) {
Lifecycle.State.STARTED -> { /* Device is available (worn) */ }
Lifecycle.State.CREATED -> { /* Device is unavailable (not worn) */ }
Lifecycle.State.DESTROYED -> { /* Device is DISCONNECTED */ }
}
}
To simplify testing, new ProjectedTestRule in api projected-testing Artifact automates the setup of the simulated test environment. It helps you write clean, reliable unit tests without boilerplate code.
// from the 'androidx.xr.projected:projected-testing:1.0.0-alpha07' artifact
@get:Rule
val projectedTestRule = ProjectedTestRule()
@Test
fun testProjectedContextInitialization() {
// by default, ProjectedTestRule automatically creates and connects
// a projected device before each test
val projectedContext = ProjectedContext.createProjectedDeviceContext(context)
// assert the projected context is successfully initialized
assertThat(projectedContext).isNotNull()
}
Jetpack Compose Glimmer: Google Sans Flex and new components
Our UI library for Display Glass, Jetpack Compose Glimmer, is now included google sans flex For better legibility on optical see-through displays. We’ve also added several interactive components:
- heap: Designed for touchpad-optimized groups, showing one item at a time.
- title chips: Provides classification and context for content cards.

Building immersive experiences for XR headsets and wired XR glasses
If you want to create a fully immersive experience for XR headsets and wired XR glasses, we have several big updates.
Beta transition and modern architecture
XR Runtime for Jetpack XR Perception features, Jetpack SceneCore and ARCore (depth maps, eye/hand trackinghit test, and spatial anchor) will be going into beta soon, so we’ve streamlined the Jetpack XR API. We’ve removed the old Guava and RxJava3 packages in favor of a modern, Kotlin-first architecture.
Jetpack Scenecore: GLTF and Custom Mesh
We are expanding 3D model capabilities by improving the 3D model and adding the ability to access specific nodes with the 3D model. using the GltfModelNodeYou can modify properties like pose, material and texture and even move animation For specific nodes.
// Create a new PBR material
pbrMaterial = KhronosPbrMaterial.create(
session = xrSession,
alphaMode = AlphaMode.OPAQUE
)
// Load a texture.
val texture = Texture.create(
session = xrSession,
path = Path("textures/texture_name.png")
)
// Apply the texture and configure occlusion
pbrMaterial.setOcclusionTexture(
texture = texture,
strength = 0.5f
)
// Access the hierarchy of nodes
val entityNodes = entity.nodes
// Find the specific node
val myEntityNode = entityNodes.find { it.name == "node_name" }
// Apply the PBR material override
myEntityNode?.setMaterialOverride(
material = newMaterial
)

We’re also bringing custom meshes to Scenecor. Custom meshes let you programmatically create geometry on the fly, which is ideal for creating custom 3D models. This feature will launch experimentally, so give it a try and let us know what you think!
// Create the meshval roadMesh =
    CustomMesh.BuilderFromMeshData(session, roadVertexLayout)
        .addVertexData(ByteBufferRegion(roadDataBuffer, 0, vertexDataSize))
        .setIndexData(ByteBufferRegion(roadDataBuffer, vertexDataSize, indexDataSize))
        .setTopology(MeshSubsetTopology.TRIANGLES)
        .build()
// Define the material
val roadMaterial = KhronosPbrMaterial.create(session, AlphaMode.OPAQUE)
// Instantiate the entity using the custom mesh and material
val roadEntity =
    MeshEntity.create(
        session,
        roadMesh,
        listOf(roadMaterial),
        pose = roadPose,
)

Write to XR: native glTF support
We now have native GLTF support for XR directly in Compose SpatialGltfModel. use this also along with SpatialGltfModelState to use nodes And animation Use them to add textures and materials to glTF models, or to your 3D models.
val myGltfModelState = rememberSpatialGltfModelState(
source = SpatialGltfModelSource.fromPath(
Paths.get("models/my_animated_model.glb")
)
)
val myGltfAnimation =
myGltfModelState.animations.find { it.name == "animation_name" }
DisposableEffect(myGltfAnimation) {
myGltfAnimation?.loop()
onDispose {
myGltfAnimation?.stop()
}
}
SpatialGltfModel(state = myGltfModelState, modifier = modifier)

ARCore for Jetpack XR: Geospatial API preview for wired XR glasses
We’re also providing an early preview of the geospatial API for wired XR glasses in ARCore for Jetpack XR. The update enables high-precision anchoring of digital content tied to real-world locations in more than 87 countries.
By combining ARCore’s Visual Positioning System (VPS) with the logic and audio capabilities of the Gemini Live API, you can create contextually aware experiences that understand both your user’s location and situation. Imagine building an immersive, AI-guided walking tour that provides real-time audio descriptions of nearby places, seamlessly blending digital information with the physical environment.

Start building the future today
It’s a wonderful time to be developing Android XR. The Jetpack XR SDK is coming to beta soon and has a robust set of new tools at your fingertips, explore each of the following areas to get your app experiences ready for XR!
Read documentation, explore samples, and check out XR experiments
go towards Official Android Developer Site For a full technical guide, API reference, and instructions on installing the new emulator. Get inspired by our samples and experiments. See how we’ve used these APIs to create immersive spatial layouts, load 3D models, explore spatial audio, and more!
See what’s new for the game engine
We have added official support for unreal engine And GodotAnd we’ve launched two new tools to accelerate Android XR development with Unity and Android XR Interaction Framework. And, based on your feedback, we are introducing this Android XR Engine Hub To allow you to run your experiences directly from your favorite engine,
apply for Android XR Developer Catalyst Program
Don’t miss your chance to own the latest Android XR hardware. Apply today for the opportunity to gain access to our audio and display glass prototypes and pre-release hardware, including XREAL’s Project Aura.
We look forward to seeing the amazing XR experiences you create as we move toward the launch of more Android XR devices later this year!
Check out this announcement and all the Google I/O 2026 updates io.google.
