{"id":147020,"date":"2026-05-19T20:31:00","date_gmt":"2026-05-19T20:31:00","guid":{"rendered":"https:\/\/christiancorner.us\/index.php\/2026\/05\/19\/android-developers-blog-updates-to-the-android-xr-sdk-introducing-developer-preview-4\/"},"modified":"2026-05-19T20:32:44","modified_gmt":"2026-05-19T20:32:44","slug":"android-developers-blog-updates-to-the-android-xr-sdk-introducing-developer-preview-4","status":"publish","type":"post","link":"https:\/\/christiancorner.us\/index.php\/2026\/05\/19\/android-developers-blog-updates-to-the-android-xr-sdk-introducing-developer-preview-4\/","title":{"rendered":"Android Developers Blog: Updates to the Android XR SDK: Introducing Developer Preview 4"},"content":{"rendered":"<p>\n<\/p>\n<div>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEh2c0ihA3gGLvIsVHFAW4TuJWUOmDEuotU6v7-9Jhcx4Soff-W_ZMTF35n046dcKu2NGjwBDA4R9n08g95W3e1TMfwoRrap0Y9agKZ7nbFO2dmwHoV7cSPopjngCnVajA-bS5XsDMeqaiGg1cfvAmQsSTfvxpx-ibR5DF3rnNIlBy9vE93UjjQMpGNVjhA\/s4209\/GoogleForDevelopers-AndroidText-Blogger-4209x1253.png\" style=\"clear: left; float: left; margin-bottom: 1em; margin-right: 1em;\"><\/a><\/div>\n<p dir=\"ltr\">Today we&#8217;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. <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/blog.google\/products-and-platforms\/platforms\/android\/android-xr-io-2026\">intelligent glasses<\/a>. 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.<\/p>\n<p dir=\"ltr\">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\u2014including the XR Runtime, Jetpack SceneCore, and ARCore for Jetpack XR\u2014will officially move to beta soon!<\/p>\n<p dir=\"ltr\">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&#8217;s Project Aura \u2013 we&#8217;re announcing. <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/goo.gle\/Catalyst_IO26\">Android XR Developer Catalyst Program<\/a>. Learn more <a rel=\"nofollow\" target=\"_blank\" href=\"http:\/\/g.co\/dev\/catalyst\">Start your application<\/a> Today.<\/p>\n<h3 style=\"text-align: left;\">Creating augmented experiences for audio and display glasses<\/h3>\n<p dir=\"ltr\">Starting with our library for augmented experiences, Developer Preview 4 introduces new APIs that help you build and test your apps.<\/p>\n<p>  <b><span style=\"font-size: medium;\">Jetpack Projected: Device Availability and ProjectedTestRule API<\/span><\/b><\/p>\n<p dir=\"ltr\">Jetpack projected libraries help connect app experiences from the phone to the user&#8217;s field of view. we have added <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/developer.android.com\/develop\/xr\/jetpack-xr-sdk\/ai-glasses\/check-availability\">Device Availability API<\/a>which consolidates wear status and connectivity signals into standard Android <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/lifecycle\/Lifecycle.State\">lifecycle.state<\/a> Value. This lets you adjust your application behavior depending on when the device is malfunctioning.<\/p>\n<pre>val xrDevice = XrDevice.getCurrentDevice(projectedContext)\n\n\/\/ Observe the device lifecycle flow\nxrDevice.getLifecycle().currentStateFlow\n    .collect { state -&gt;\n        when (state) {\n            Lifecycle.State.STARTED -&gt; { \/* Device is available (worn) *\/ }\n            Lifecycle.State.CREATED -&gt; { \/* Device is unavailable (not worn) *\/ }\n            Lifecycle.State.DESTROYED -&gt; { \/* Device is DISCONNECTED *\/ }\n        }\n    }\n  <\/pre>\n<p dir=\"ltr\">To simplify testing, new <code><a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/xr\/projected\/testing\/ProjectedTestRule\">ProjectedTestRule<\/a><\/code> in api <code>projected-testing<\/code> Artifact automates the setup of the simulated test environment. It helps you write clean, reliable unit tests without boilerplate code.<\/p>\n<pre>\/\/ from the 'androidx.xr.projected:projected-testing:1.0.0-alpha07' artifact\n@get:Rule\nval projectedTestRule = ProjectedTestRule()\n\n@Test\nfun testProjectedContextInitialization() {\n    \/\/ by default, ProjectedTestRule automatically creates and connects\n    \/\/ a projected device before each test\n    val projectedContext = ProjectedContext.createProjectedDeviceContext(context)\n\n    \/\/ assert the projected context is successfully initialized\n    assertThat(projectedContext).isNotNull()\n}\n  <\/pre>\n<p>  <b><span style=\"font-size: medium;\">Jetpack Compose Glimmer: Google Sans Flex and new components<\/span><\/b><\/p>\n<p dir=\"ltr\">Our UI library for Display Glass, Jetpack Compose Glimmer, is now included <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/fonts.google.com\/specimen\/Google+Sans+Flex\">google sans flex<\/a> For better legibility on optical see-through displays. We&#8217;ve also added several interactive components:<\/p>\n<ul>\n<li><a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/developer.android.com\/develop\/xr\/jetpack-xr-sdk\/jetpack-compose-glimmer\/vertical-stacks\">heap<\/a>: Designed for touchpad-optimized groups, showing one item at a time.<\/li>\n<li><a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/developer.android.com\/develop\/xr\/jetpack-xr-sdk\/jetpack-compose-glimmer\/title-chips\">title chips<\/a>: Provides classification and context for content cards.<\/li>\n<\/ul>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><img decoding=\"async\" border=\"0\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjURjqIjRqx4w887_z6WFLsKAuBhvNmzYshrqVno0lO9-MBzLh087wOBCvYEL30LBpi62QIfDXB23X_1cz_v3VbAdQ0VvjZ-jQq48QPOs2f41WmveveW8OgndqoKg_bc4fHQVWUHfPiExBnEmCXhyphenhyphentkXDh53GBE4RqUvVvbQvtQbTRBuT2rqAVtR6y3gPs\/s16000\/glimmer.gif\"\/><\/div>\n<h3 style=\"text-align: left;\">Building immersive experiences for XR headsets and wired XR glasses<\/h3>\n<p dir=\"ltr\">If you want to create a fully immersive experience for XR headsets and wired XR glasses, we have several big updates.<\/p>\n<p>  <b><span style=\"font-size: medium;\">Beta transition and modern architecture<\/span><\/b><\/p>\n<p dir=\"ltr\">XR Runtime for Jetpack XR Perception features, Jetpack SceneCore and ARCore (<a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/developer.android.com\/develop\/xr\/jetpack-xr-sdk\/arcore\/depth\">depth maps<\/a>, <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/developer.android.com\/develop\/xr\/jetpack-xr-sdk\/arcore\/face\">eye\/hand tracking<\/a>hit test, and <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/developer.android.com\/develop\/xr\/jetpack-xr-sdk\/arcore\/anchors\">spatial anchor<\/a>) will be going into beta soon, so we&#8217;ve streamlined the Jetpack XR API. We&#8217;ve removed the old Guava and RxJava3 packages in favor of a modern, Kotlin-first architecture.<\/p>\n<p>  <b><span style=\"font-size: medium;\">Jetpack Scenecore: GLTF and Custom Mesh<\/span><\/b><\/p>\n<p dir=\"ltr\">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 <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/developer.android.com\/reference\/androidx\/xr\/scenecore\/GltfModelNode\">GltfModelNode<\/a>You can modify properties like pose, material and texture and even move <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/xr\/scenecore\/GltfAnimation\">animation<\/a> For specific nodes.<\/p>\n<pre>\/\/ Create a new PBR material\npbrMaterial = KhronosPbrMaterial.create(\n    session = xrSession,\n    alphaMode = AlphaMode.OPAQUE\n)\n\n\/\/ Load a texture.\nval texture = Texture.create(\n    session = xrSession,\n    path = Path(\"textures\/texture_name.png\")\n)\n\n\/\/ Apply the texture and configure occlusion\npbrMaterial.setOcclusionTexture(\n    texture = texture,\n    strength = 0.5f\n)\n\n\/\/ Access the hierarchy of nodes\nval entityNodes = entity.nodes\n\n\/\/ Find the specific node\nval myEntityNode = entityNodes.find { it.name == \"node_name\" }\n\n\/\/ Apply the PBR material override\nmyEntityNode?.setMaterialOverride(\n   material = newMaterial\n)\n  <\/pre>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><img decoding=\"async\" border=\"0\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhD-R-O2D-AHZ_E-_VoYSIIAaU0Jfd2UdKZO3ySh1LrfIj-TC3L0GyhkmIo0TgCatKvwB4aarmdUx5GvwXxyOTReuijHhQJlj5n0ZSZsRKxP7GRnwifuajP21FDYe5vqa-LWHW9C4cAyozx_JYFqEix4Si6-R5nZ6-qXQ5ccnZnyf7fzUJLT0aBnHkQDxU\/s16000\/custom_material.gif\"\/><\/div>\n<p>We&#8217;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!<\/p><\/div>\n<div> <\/p>\n<pre>\/\/ Create the mesh<span id=\"docs-internal-guid-36ead301-7fff-7572-d2a7-be7691750a75\"><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"color: #188038; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;\">val roadMesh =<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"color: #188038; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;\">\u00a0\u00a0\u00a0\u00a0CustomMesh.BuilderFromMeshData(session, roadVertexLayout)<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"color: #188038; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.addVertexData(ByteBufferRegion(roadDataBuffer, 0, vertexDataSize))<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"color: #188038; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.setIndexData(ByteBufferRegion(roadDataBuffer, vertexDataSize, indexDataSize))<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"color: #188038; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.setTopology(MeshSubsetTopology.TRIANGLES)<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"color: #188038; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.build()<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"color: #188038; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;\">\/\/ Define the material<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"color: #188038; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;\">val roadMaterial = KhronosPbrMaterial.create(session, AlphaMode.OPAQUE)<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"color: #188038; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;\">\/\/ Instantiate the entity using the custom mesh and material<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"color: #188038; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;\">val roadEntity =<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"color: #188038; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;\">\u00a0\u00a0\u00a0\u00a0MeshEntity.create(<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"color: #188038; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0session,<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"color: #188038; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0roadMesh,<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"color: #188038; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0listOf(roadMaterial),<\/span><\/p><p dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"><span style=\"color: #188038; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 9pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0pose = roadPose,<\/span><\/p><\/span>)<br\/><\/pre>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><img decoding=\"async\" border=\"0\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjaZ_4o2joX1mfFhSoQzrEmLPItDnayQviaz43vthTtDPe-zbCUQT-nZTvRcCca3L2XBo2iLDHA91xRty-HqClNvPQoOEZHzAnYWzZnJvhBL1-3KuJrm_3HluzazcmmNWYW_zBhMD-GGSnp039rREaJ9dH3AO9U2if1uSJ0FR8RGjKJuAW5gjaafY3R0kA\/s16000\/custom_mesh.gif\"\/><\/div>\n<p>  <b><span style=\"font-size: medium;\">Write to XR: native glTF support<\/span><\/b><\/p>\n<p dir=\"ltr\">We now have native GLTF support for XR directly in Compose <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/xr\/compose\/subspace\/SpatialGltfModel.composable\">SpatialGltfModel<\/a>. use this also along with <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/xr\/compose\/subspace\/SpatialGltfModelState#SpatialGltfModelState(androidx.xr.compose.subspace.SpatialGltfModelSource)\">SpatialGltfModelState<\/a> to use <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/xr\/compose\/subspace\/SpatialGltfModelState#nodes()\">nodes<\/a> And <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/developer.android.com\/reference\/kotlin\/androidx\/xr\/compose\/subspace\/SpatialGltfModelState#animations()\">animation<\/a> Use them to add textures and materials to glTF models, or to your 3D models.<\/p>\n<pre>   val myGltfModelState = rememberSpatialGltfModelState(\n        source = SpatialGltfModelSource.fromPath(\n            Paths.get(\"models\/my_animated_model.glb\")\n        )\n    )\n\n    val myGltfAnimation =\n        myGltfModelState.animations.find { it.name == \"animation_name\" }\n\n    DisposableEffect(myGltfAnimation) {\n        myGltfAnimation?.loop()\n\n        onDispose {\n            myGltfAnimation?.stop()\n        }\n    }\n\n    SpatialGltfModel(state = myGltfModelState, modifier = modifier)\n  <\/pre>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><img decoding=\"async\" border=\"0\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiV_PBd_vb1mDF0GbmR44I7E-2VMK2kQFhDK5_MW4dLGWyH-kXdpMKUmDf_7PzprxwMaNpUQgtMTHkJ3-CjEumK-Zd_Y4XiMqK78dxwk78eZel-wh3udnwCEtBFdgfxvX0oY-JyMK_gDAtc-4tKH5ZgXAIs4NaNT6eqZBu9n4Fl37tK8vYk8iKwPD_5VUo\/s16000\/animated_tiger.gif\"\/><\/div>\n<p>  <b><span style=\"font-size: medium;\">ARCore for Jetpack XR: Geospatial API preview for wired XR glasses<\/span><\/b><\/p>\n<p dir=\"ltr\">We&#8217;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.<\/p>\n<p dir=\"ltr\">By combining ARCore&#8217;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&#8217;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.<\/p>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><img decoding=\"async\" border=\"0\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjEwhzig0cd_Ku_6ge9WjDQLaMyKNwnSO5791yXlhEYx68mYW3joOpt8DC0juWbW13HwNP_sS-SUFENSjpW9CWpPCdFUTL8a-jBSsYtHMkouhuCWvHnJ18P0lTwmUXGFwRatXeGiTt_RVn46fbWOgCag0iEz8gApm5A6QudGKpo7xc3ieqOte-8-c0uMS8\/s16000\/Aura%20Geospatial%20Tour%20Demo%20-%20Draft%2001.gif\"\/><\/div>\n<p><\/p>\n<h3 style=\"text-align: left;\">Start building the future today<\/h3>\n<p dir=\"ltr\">It&#8217;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!<\/p>\n<p>  <b><span style=\"font-size: medium;\">Read documentation, explore samples, and check out XR experiments<\/span><\/b><\/p>\n<p dir=\"ltr\">go towards <a rel=\"nofollow noopener\" target=\"_blank\" href=\"http:\/\/developer.android.com\/xr\">Official Android Developer Site<\/a> For a full technical guide, API reference, and instructions on installing the new emulator. Get inspired by our samples and experiments. See how we&#8217;ve used these APIs to create immersive spatial layouts, load 3D models, explore spatial audio, and more!<\/p>\n<p>  <b><span style=\"font-size: medium;\">See what&#8217;s new for the game engine<\/span><\/b><\/p>\n<p dir=\"ltr\">We have added official support for <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/www.unrealengine.com\/\">unreal engine<\/a> And <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/godotengine.org\/\">Godot<\/a>And we&#8217;ve launched two new tools to accelerate Android XR development with Unity and <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/developer.android.com\/xr\/axrif\">Android XR Interaction Framework<\/a>. And, based on your feedback, we are introducing this <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/developer.android.com\/xr\/engine-hub\">Android XR Engine Hub<\/a> To allow you to run your experiences directly from your favorite engine,<\/p>\n<p>  <b><span style=\"font-size: medium;\">apply for <a rel=\"nofollow\" target=\"_blank\" href=\"http:\/\/g.co\/dev\/catalyst\">Android XR Developer Catalyst Program<\/a><\/span><\/b><\/p>\n<p dir=\"ltr\">Don&#8217;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&#8217;s Project Aura.<\/p>\n<p dir=\"ltr\">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!<\/p>\n<p dir=\"ltr\">Check out this announcement and all the Google I\/O 2026 updates <span style=\"display: none;\"\/><a rel=\"noopener nofollow noreferrer\" target=\"_blank\" href=\"https:\/\/io.google\/2026\/?utm_source=blogpost&amp;utm_medium=pr&amp;utm_campaign=devblogs&amp;utm_content=\">io.google<span style=\"display: none;\"\/><\/a>.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Today we&#8217;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<\/p>\n","protected":false},"author":1,"featured_media":147022,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[58],"tags":[1601,948,3233,4274,7293,2291,32127,3197],"class_list":["post-147020","post","type-post","status-publish","format-standard","has-post-thumbnail","category-devotionals","tag-android","tag-blog","tag-developer","tag-developers","tag-introducing","tag-preview","tag-sdk","tag-updates"],"_links":{"self":[{"href":"https:\/\/christiancorner.us\/index.php\/wp-json\/wp\/v2\/posts\/147020","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/christiancorner.us\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/christiancorner.us\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/christiancorner.us\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/christiancorner.us\/index.php\/wp-json\/wp\/v2\/comments?post=147020"}],"version-history":[{"count":1,"href":"https:\/\/christiancorner.us\/index.php\/wp-json\/wp\/v2\/posts\/147020\/revisions"}],"predecessor-version":[{"id":147023,"href":"https:\/\/christiancorner.us\/index.php\/wp-json\/wp\/v2\/posts\/147020\/revisions\/147023"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/christiancorner.us\/index.php\/wp-json\/wp\/v2\/media\/147022"}],"wp:attachment":[{"href":"https:\/\/christiancorner.us\/index.php\/wp-json\/wp\/v2\/media?parent=147020"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/christiancorner.us\/index.php\/wp-json\/wp\/v2\/categories?post=147020"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/christiancorner.us\/index.php\/wp-json\/wp\/v2\/tags?post=147020"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}