24 Oct 2025
Android Developers Blog
5 things you need to know about publishing and distributing your app for Android XR

Posted by Jan Kleinert, Android Developer Relations Engineer
Samsung Galaxy XR is here, powered by Android XR! This blog post is part of our Android XR Spotlight Week, where we provide resources-blog posts, videos, sample code, and more-all designed to help you learn, build, and prepare your apps for Android XR.

Today, we're focusing on one of the last steps in your development journey, ensuring these experiences successfully reach your users. Publishing correctly ensures your app is packaged efficiently, discovered by the right devices, and presented in the best possible light.
Here are 5 things you need to know about publishing and distributing your app for Android XR on Google Play.
1. Uphold quality with the Android XR app quality guidelines
One of the most important steps before publishing is ensuring your app delivers a safe, comfortable, and performant user experience.
Following the Android XR App Quality Guidelines helps ensure that your app provides users with a great experience on devices like the Galaxy XR.
Why quality matters
These guidelines build upon the large screen app quality guidelines, and focus on critical XR-specific criteria including:
-
Safety and comfort: This is paramount. These guidelines help you avoid causing motion sickness by setting standards for camera movement and frame rates, and by limiting visual elements like strobing.
-
Performance: Your app must hit performance metrics, such as target frame rates, to prevent lag and ensure a fluid, comfortable experience.
-
Interaction: The guidelines specify recommended minimum sizes for interactive targets (e.g., 48dp minimum, 56dp recommended) to work well with eye-tracking and hand-tracking inputs.
2. Configure your app manifest correctly
The AndroidManifest.xml file describes important information about your app. The Android build tools, Android system, and Google Play use this information to know what kind of experience you've built and which hardware features it requires. Proper configuration is vital for correct device targeting and app launch.
Specify which Android XR SDK your app uses
In your app manifest, include android.software.xr.api.spatial or android.software.xr.api.openxr to indicate whether you're building with the Jetpack XR SDK or building with OpenXR or Unity.
|
SDK used |
Manifest declaration |
|
Jetpack XR SDK |
|
|
OpenXR or Unity |
If your app is built using OpenXR or Unity, you must set the android:required attribute to true. For apps built with the Jetpack XR SDK, set android:required attribute to true if your app is published to the Android XR dedicated release track and set android:required attribute to false if your app is published to the mobile release track.
Set the activity start mode
Use the android.window.PROPERTY_XR_ACTIVITY_START_MODE property on your main activity to define the default user environment:
|
Start mode |
Purpose |
SDK |
|
XR_ACTIVITY_START_MODE_HOME_SPACE |
Launches your app in Home Space, the shared multitasking environment. |
Jetpack XR SDK |
|
XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED |
Launches in Full Space, a full-immersion, single-app environment. |
Jetpack XR SDK |
|
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED |
Launches in Full Space, a full-immersion, single-app environment. Note that apps built with OpenXR or Unity always run in Full Space. |
OpenXR or Unity |
Check for optional hardware features at runtime
Avoid setting optional XR features (like hand tracking or controllers) to android:required="true" unless they are truly required for your app. If a device doesn't support a required feature, Google Play will hide your app from that device. If you have features set as required but your app could operate without them, then you could unnecessarily limit your audience.
Instead, check for advanced features dynamically at runtime using the PackageManager class with hasSystemFeature():
Kotlin
val hasHandTracking = packageManager.hasSystemFeature("android.hardware.xr.input.hand_tracking")
if (hasHandTracking) {
// Enable high-fidelity hand tracking features
} else {
// Provide a fallback experience
}
This ensures your app is broadly compatible and leverages advanced features when they're available.
3. Use Play Asset Delivery (PAD) to deliver large assets
Immersive apps and games often contain large assets that might exceed the standard size limits. Use Play Asset Delivery (PAD) to manage large, high-fidelity assets. PAD offers flexible delivery modes: install-time, fast follow, and on demand for progressive download of content. Apps that are built for Android XR are allowed to deliver additional asset packs: instead of a cumulative total of 4 GB for asset packs delivered on demand or fast follow, these apps are afforded a higher cumulative total of 30 GB.
For developers building with Unity, use Unity Addressables along with Play Asset Delivery to manage asset packs.
4. Showcase your app with spatial video previews
To capture the attention of users browsing the Play Store on their XR headsets, you can provide an immersive preview of your app using a spatial video asset. This must be a 180°, 360°, or stereoscopic video. On Android XR devices, the Play Store will automatically display this as an immersive 3D preview, allowing users to experience the depth and scale of your content before they install the app.
5. Choose your Google Play release track
Google Play provides two pathways for publishing your Android XR app, both using the same Play Console account:
Option A: Continue on the mobile release track (for spatialized mobile apps)
If you are adding spatial XR features to an existing mobile app, you can often bundle the XR features or content into your existing Android App Bundle (AAB).
This approach is ideal if your app maintains most of its core functionality across both mobile and XR devices, and you can continue publishing the same AAB to the mobile track. Review this guidance to be sure you are properly configuring your app's manifest file to support this use case.
Option B: Publish to the dedicated Android XR release track
If you are building a brand-new app for XR or if the XR version is functionally too different for a single AAB, you should publish to the Android XR dedicated release track.
Apps published to the Android XR dedicated release track are only visible to Android XR devices that support the android.software.xr.api.spatial feature or the android.software.xr.api.openxr feature, giving you control over distribution.
By following this guidance, you can help ensure your innovative Android XR apps provide a quality user experience, are packaged efficiently, are delivered smoothly using PAD, and are targeted to the devices that can run them. Happy publishing!
24 Oct 2025 4:00pm GMT
23 Oct 2025
Android Developers Blog
Set a reminder: Tune in on October 30 for our Fall episode of The Android Show, live from Droidcon London
Posted by The Android Team
In just a few days, on Thursday, October 30th at 10AM PT, we'll be dropping our Fall episode of The Android Show, on YouTube and on developer.android.com! This time, we'll be live from Droidcon London, where we'll be unpacking some of the latest agentic experiences for Gemini in Android Studio designed to help you be more productive, plus doing live demos of Jetpack Compose and more. And with the recent launch of Galaxy XR, we'll be diving into the world of Android XR plus how building adaptive lets you easily extend to XR devices as well as foldables, tablets and large screens.
Get your #AskAndroid questions answered live!
We've assembled a team of experts from across Android to answer your #AskAndroid questions live from London on building excellent apps, across devices; you can start sharing your questions now using #AskAndroid, and tune in to see if they are answered live on the show!
The Android Show is your conversation with the Android developer community, and this episode will be co-hosted by Rebecca Gutteridge and Adetunji Dahunsi. You'll hear the latest from the developers and engineers who build Android. Don't forget to tune in live on October 30 at 10AM PT, live on YouTube and on developer.android.com/events/show!
23 Oct 2025 6:50pm GMT
Getting started with Unity and Android XR

Samsung Galaxy XR is here, powered by Android XR! This blog post is part of our Android XR Spotlight Week, where we provide resources-blog posts, videos, sample code, and more-all designed to help you learn, build, and prepare your apps for Android XR.
There's never been a better time to get into XR development. Last December, we announced Android XR, Google's new Android platform built on open standards such as OpenXR and Vulkan, which makes XR development more accessible than it's ever been.
And when combined with Unity's existing XR tools, you get a powerful and mature development stack. This makes it possible to create and deploy XR apps that work across multiple devices.
No matter whether you've done XR development before or not, we want to help you get started.
This blog will get you up and running with Android XR and Unity development. We'll focus on the practical steps to configure your environment, understand the package ecosystem, and start building.
By the end of this blog, you'll have a good understanding of:
-
The package ecosystem
-
Essential setup steps
-
Input methods
-
Privacy and permissions
-
Composition layers
Unity for Android XR development
You might choose Unity for its cross-platform compatibility, allowing you to build once and deploy to Android XR and other XR devices.
When using Unity, you benefit from its mature XR ecosystem and tooling. It already has established packages such as XR Interaction Toolkit, OpenXR plugin, XR composition layers, XR Hands, an extensive asset store full of XR-ready components and templates, and XR simulation and testing tools. And since Unity 6 was released last November, you'll also benefit from its improved Universal Render Pipeline (URP) performance, better Vulkan graphics support, and enhanced build profiles.
Here are some sample projects to get an idea of what can be done:
Essential setup: your development foundation
Unity 6 requirements and installation
You'll need Unity 6 to create your app, as earlier versions don't support Android XR. Install Unity Hub first, then Unity 6 with the Android Build Support module, following these steps.Android XR build profiles: simplifying configuration
You can create your own build profiles, but for now we recommend using the dedicated Android XR build profile we created.
After these steps you can build and run your APK for Android XR devices.
Graphics API: why Vulkan matters
Once you have your Unity project set up with an Android XR build profile, we first recommend making sure you have Vulkan set as your graphics API. Android XR is built as a Vulkan-first platform. In March 2025, Google announced that Vulkan is now the official graphics API for Android. It's a modern, low-level graphics API that helps developers maximize the performance of modern GPUs and unlocks advanced features like ray-tracing and multithreading for realistic and immersive gaming visuals.
These standards provide the best compatibility for your existing applications and ease the issues and costs of porting. And it makes it possible to enable advanced Android XR features such as URP Application Space Warp and foveated rendering.
Unity 6 handles Vulkan automatically, so when you use the Android XR build profile, Unity will configure Vulkan as your graphics API. This ensures you get access to all the advanced Android XR features without any manual configuration.
You can verify your graphics API settings by going to 'Edit' >' Project Settings' > 'Player' > 'Android tab' > 'Other settings' > 'Graphics APIs'.
Understanding the package ecosystem
There are two different packages you can use for Android XR in Unity. One is by using the Android XR Extensions for Unity, and the other is using the Unity OpenXR: Android XR package.
These may sound like the same thing, but bear with me.
The Unity OpenXR: Android XR package is the official Unity package for Android XR support. It provides the majority of Android XR features, made available through OpenXR standards. It also enables AR Foundation integration for mixed reality features. The primary benefit of using the Unity OpenXR: Android XR package is that it offers a unified API for supporting XR devices.Whereas the Android XR Extensions for Unity is Google's XR package, designed specifically for developing for Android XR devices. It supplements the Unity OpenXR package with additional features such as environment blend modes, scene meshing, image tracking, and body tracking. The tradeoff is that you can only develop for Android XR devices.
Which one you choose will depend on your specific needs, but we generally recommend going with the Unity OpenXR: Android XR, as it gives you far more flexibility for the devices your app will be compatible with, and then based on your application requirements you can then add Android XR Extensions for Unity.
How to install packages
From here you can install these packages from the 'Unity Registry' tab:
Required OpenXR features
Now you have the packages you need installed, let's enable some core features in order to get our project working.Input
Android XR supports input for Hands, Voice, Eye tracking, Keyboard and Controllers. We recommend installing the XR Interaction Toolkit and XR Hands as these contain the best prefabs for getting started. By using these prefabs, you'll have everything you need to support Hands and Controllers in your app.Privacy and permissions: building user trust
Whatever you build, you'll need to capture runtime permissions from the users. That's because scene understanding, eye tracking, face tracking and hand tracking provide access to data that may be more sensitive to the user.For example, if you use the XR Hands package for custom hand gestures, you will need to request the hand tracking permission (see below) as this package needs to track a lot of information about the user's hands. This includes things like tracking hand joint poses and angular and linear velocities;
|
const string k_Permission = "android.permission.HAND_TRACKING"; #if UNITY_ANDROID void Start() { if (!Permission.HasUserAuthorizedPermission(k_Permission)) { var callbacks = new PermissionCallbacks(); callbacks.PermissionDenied += OnPermissionDenied; callbacks.PermissionGranted += OnPermissionGranted; Permission.RequestUserPermission(k_Permission, callbacks); } } void OnPermissionDenied(string permission) { // handle denied permission } void OnPermissionGranted(string permission) { // handle granted permission } #endif // UNITY_ANDROID |
Enhancing visual quality with composition layers
A Composition Layer is the recommended way to render UI elements. They make it possible to display elements at a much higher quality compared to Unity's standard rendering pipeline as everything is directly rendered to the platform's compositor.As well as text, it also renders video, images, and UI elements at a much higher quality. It does this by utilising native support for the runtime's compositor layers.
Build and Run
Now that you have your OpenXR packages installed and features enabled, a prefab setup for hand and head movement you can now build your scene and deploy directly to your headset for testing.What's next: expanding your skills
Now that you've got your Android XR development environment set up and understand the key concepts, here are the next steps to continue your XR development journey:-
Android XR developer documentation - comprehensive guides for all Android XR features
-
Unity XR development manual - Unity's official XR development resources
-
Android XR Unity samples - Google's official sample projects showcasing different Android XR features
-
Unity XR Interaction Toolkit examples - comprehensive examples of XR interactions and gameplay mechanics
-
Unity VR Template - a complete starting point for VR projects
-
VR Multiplayer Template - explore social XR experiences
23 Oct 2025 4:00pm GMT

