24 Oct 2025

feedAndroid 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

android.software.xr.api.spatial

OpenXR or Unity

android.software.xr.api.openxr

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

feedAndroid 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

Posted by Luke Hopkins - 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.




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

Unity build profiles are project assets that store your platform-specific settings and configurations. So instead of needing to manually set up 15-20 different settings across multiple menus, you can use a build profile to do this automatically.
You can create your own build profiles, but for now we recommend using the dedicated Android XR build profile we created.
You can select your build profile by selecting File > Build Profile from your Unity project. For full instructions, see the Develop for Android XR workflow page.
If you make any changes of your own, you can then create a new build profile to share with your team. This way you ensure consistent build experience across the board.


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

To add a new package, with your project open in Unity, select 'Window' > 'Package Management' > 'Package Manager'.

From here you can install these packages from the 'Unity Registry' tab:

You can install the Android XR for unity package via Github by selecting the ➕ icon, selecting 'Install package from git URL', then entering 'https://github.com/android/android-xr-unity-package.git'

Required OpenXR features

Now you have the packages you need installed, let's enable some core features in order to get our project working.

You can enable OpenXR setting for Android: 'Edit' -> 'Project Settings' -> 'XR Plugin Management' -> Click the Android and enable OpenXR


Next we need to enable support for: 'Android XR support', we will cover other OpenXR features as we need them. For now we just need Android XR support to be enabled.

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.

Once the XR Hands and XR Interactive toolkit are both installed, I recommend importing the Starter Assets and Hands Interaction Demo. Then you need to enable the Hand Interaction and Khronos Simple Controller profiles, and turn on the Hand Tracking Subsystem and Meta Hand Tracking Aim features.

You can edit these settings by going to 'Edit' > 'Project Settings' > XR Plug-in Management' > 'OpenXR'

We'd also recommend Unity's prefab, XR Origin, that represents the user's position and orientation in XR space. This contains the camera rig and tracking components needed to render your XR experience from the correct viewpoint.

The simplest way to add this prefab is to import it from the hands integration demo we imported earlier which can be found here 'Hands Integration Toolkit' > 'Hand Interaction' > 'Prefabs' > 'XR Origin'

I recommend using this Prefab over the 'XR Origin' option in your game objects as it uses the XR Input Modality Manager which automatically switches between users hands and controllers. This will give you the best success for switching between hands and controllers.

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.

These capabilities provide deeper personal information than traditional desktop or mobile apps, so the runtime permissions ensure your users have full control over what data they choose to share. So, to keep with Android's security and privacy policies, Android XR has permissions for each of these features.

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;

Note: For a full list of extensions that require permissions, check out information on the XR developer website.

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.

For example, if you're displaying text, the standard Unity rendering is more likely to have blurry text, soft edges, and visual artifacts. Whereas with composition layers, the text will be clearer, the outlines will be sharper, and the experience will be better overall.

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.
To turn on Composition Layers, open Package Manager, select 'Unity Register', then install 'XR Composition 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:

Essential resources for continued learning:

Sample projects to explore:

23 Oct 2025 4:00pm GMT