Google Play closed testing for Unity games
Unity doesn't change Google's rule. If your Play Console account is a personal account created after November 13, 2023, you must run a closed test with at least 12 testers opted in for 14 continuous days before you can apply for production access (Play Console Help).
What Unity changes is the build. Your Editor version decides whether you can target API 36 at all, 64-bit needs IL2CPP, the debug keystore gets your upload refused, and big games hit size limits. This page covers those points. For the rule and every Play Console screen, start with the Google Play closed testing guide.
Step 1: Use a Unity version that can target API 36
Since August 31, 2026, new apps and app updates must target Android 16 (API level 36) or higher. Wear OS and Android Automotive OS apps need API 35, Android TV and Android XR apps API 34 (Play Console Help).
Unity lists which versions can target which API levels. Checked on November 9, 2026:
| Unity version | API 36 |
|---|---|
| Unity 6.6 (default manual on docs.unity3d.com) and Unity 6.3 | Supported (Unity docs) |
| Unity 6.0 LTS | From 6000.0.46f1 (Unity 6.0 docs) |
| Unity 2022.3 LTS | From 2022.3.62f1 (Unity 2022.3 docs) |
On an older patch release, update the Editor first. Unity 6.6 supports Android 8.0 (API level 26) and later, so the minimum also moves when you upgrade.
Step 2: Set the target API level
Unity's steps (Unity docs):
- Open File > Build Profiles and select Android.
- Select Player Settings.
- In Other Settings > Identification, set Target API Level to at least the level Google Play requires.
The same section holds Minimum API Level and Bundle Version Code (step 6). The target API 36 guide lists the Android 16 behavior changes worth testing after the bump.
Step 3: IL2CPP and ARM64
Google Play requires 64-bit support. In Unity, open Player Settings, then Other Settings > Configuration, and enable ARM64. Unity only allows it when the scripting backend is IL2CPP, so switch from Mono first (Unity docs).
A second native-code requirement is coming. Google says apps targeting API 35 or higher must support 16 KB memory page sizes on 64-bit devices, and that from February 1, 2027, updates that don't support them can't be released (Android Developers). Unity supports 16 KB page sizes. Its advice: update the Editor to the latest patch, update native plug-ins and packages with native libraries such as Burst, then rebuild (Unity docs).
Step 4: Build an Android App Bundle
Google Play requires new apps to be AABs. Unity's steps (Unity docs):
- In Player Settings > Publishing Settings, enable Split Application Binary.
- In the Build Profiles window, under Platform Settings, enable Build App Bundle (Google Play). It only shows when Export Project is off.
- Turn Development Build off. Unity warns that the upload might fail otherwise.
If you export to Android Studio instead, enable Export Project, then Export for App Bundle.
Step 5: Sign with your own keystore
Without a custom keystore, Unity signs with a debug keystore. Unity's docs say "the app store will decline apps signed in this way" (Unity docs).
- In Player Settings > Publishing Settings, open the Keystore Manager.
- Create a new keystore and add a key with an alias. Unity's password fields accept ASCII characters only (Unity docs).
- Back in Publishing Settings, enable Custom Keystore, select it and choose the key alias.
Unity doesn't save your keystore or key passwords, so you enter them again in each session. Keep the keystore out of your repository and back it up with both passwords.
With Play App Signing, Google holds the app signing key and you hold the upload key. Google can reset a lost upload key, but an app signing key you manage yourself can't be reset if you lose it (Play Console Help).
Step 6: Bump Bundle Version Code every release
Bundle Version Code is an integer that must be higher for each new version. Version is the string players see, shared with iOS (Unity docs). Google Play's maximum is 2,100,000,000 (Play Console Help).
You'll ship fixes during the 14 days. Raise the number by one each time. Unity's note about adding 100000 or 200000 per architecture only applies when Split APKs by target architecture is enabled.
Step 7: Size limits and Play Asset Delivery
Unity's docs say the base module inside an AAB must be smaller than 200 MB (Unity docs). Google's own size page, checked on November 9, 2026, lists 500 MB for the base module, 1.5 GB per asset pack, 4 GB for all modules and install-time asset packs, and 30 GB for on-demand and fast-follow packs (Play Console Help). Plan for Unity's lower number.
Past that, use Play Asset Delivery. Google hosts and serves the asset packs, so you don't need your own CDN. Every Unity version from 2021.3 supports it, but Unity doesn't support Play Feature Delivery (Unity docs).
Texture compression targeting helps too. It enables split binaries and moves first-scene assets into an install-time asset pack called UnityTextureCompressionsAssetPack, which shrinks the base module (Unity docs).
Step 8: Check the permissions Unity and plug-ins add
Unity adds permissions based on the APIs your C# code calls (Unity docs):
- Location APIs such as
LocationServiceaddACCESS_FINE_LOCATION. WebCamTextureaddsCAMERA, theMicrophoneclass addsRECORD_AUDIO,Handheld.VibrateaddsVIBRATE.UnityWebRequest, sockets, and the Analytics and Cloud Diagnostics packages addINTERNET.
Plug-ins merge the permissions from their own manifests during the Gradle step. An ads SDK can bring com.google.android.gms.permission.AD_ID: the Google Mobile Ads SDK declares it and it gets merged even if you never wrote it (Play Console Help). Declare that data in your Data safety form.
Google evaluates high-risk permissions such as SMS or Call Log on test tracks too. An active closed release that needs an undeclared Permissions Declaration blocks you from publishing any changes (Play Console Help).
Internet Access. Unity sets it to Require by default for development builds. With Auto, Unity adds the permission only if you use a networking API (Unity docs). If your release build can't reach your backend, set it to Require.
Step 9: Test the minified release build on a phone
Under Publishing Settings > Minify, Unity can shrink the Java code of release builds. Code referenced through reflection gets stripped, so a plug-in can work in development and crash in release. Add keep rules with Custom Proguard File (Unity docs).
Test on real phones: Unity doesn't support Android emulators (Unity docs).
Report Dependencies in App Bundle, in Publishing Settings, lets Google Play check your Package Manager and Asset Store packages for known certification failures right after upload (Unity docs).
Step 10: Release on the closed testing track
In Play Console, go to Test and release > Testing > Closed testing, then Manage track. Create a release, upload the .aab, add testers in the Testers tab, pick countries, and send the changes for review.
The opt-in link only shows once the app status is Published, and the first time it can take several hours to work (Play Console Help). If it's missing, see where to find the opt-in link. Keep your 12 closed testers off the internal track: Google says a user who opts into your internal test can't receive your closed test (Play Console Help).
How long it really takes
- First signed AAB from a working Unity project: plan a day, more if you need an Editor patch upgrade and a switch to IL2CPP first.
- First closed release: Google can take up to seven days, longer in exceptional cases, for some accounts (Play Console Help).
- The test: 14 continuous days with at least 12 testers opted in.
- Production access review: usually seven days or less (Play Console Help).
Count on three to four weeks between your first closed upload and a production release.
Frequently asked questions
Does a Unity game need 12 testers for 14 days on Google Play?
Yes, if your Play Console account is a personal account created after November 13, 2023. Games follow the same rule as apps: a closed test with at least 12 testers opted in for 14 continuous days, then a production access application.
Which Unity versions can target API level 36?
Unity's manuals, checked on November 9, 2026, say Unity 6.3 and 6.6 can target API 36, Unity 6.0 from 6000.0.46f1, and Unity 2022.3 from 2022.3.62f1. Older patch releases can't.
Where do I set the target API level in Unity?
Open File > Build Profiles, select Android, then Player Settings > Other Settings > Identification > Target API Level. Set it to 36 or higher for a phone game.
Why is ARM64 greyed out in Unity?
Unity only enables the ARM64 target architecture when the scripting backend is IL2CPP. Switch from Mono to IL2CPP in Other Settings > Configuration, then enable ARM64, which Google Play requires.
My Unity build is too big for Google Play. What now?
Use Play Asset Delivery. Unity's docs say it lets you go past the base module limit by moving assets into asset packs that Google Play hosts and serves.
Sources
- support.google.com/googleplay/android-developer/answer/14151465
- support.google.com/googleplay/android-developer/answer/11926878
- support.google.com/googleplay/android-developer/answer/9845334
- support.google.com/googleplay/android-developer/answer/9842756
- support.google.com/googleplay/android-developer/answer/17367361
- support.google.com/googleplay/android-developer/answer/9859372
- support.google.com/googleplay/android-developer/answer/9214102
- support.google.com/googleplay/android-developer/answer/6048248
- support.google.com/googleplay/android-developer/answer/9859751
- developer.android.com/guide/practices/page-sizes
- docs.unity3d.com/Manual/android-requirements-and-compatibility.html
- docs.unity3d.com/6000.0/Documentation/Manual/android-requirements-and-compatibility.html
- docs.unity3d.com/2022.3/Documentation/Manual/android-requirements-and-compatibility.html
- docs.unity3d.com/Manual/android-distribution-google-play.html
- docs.unity3d.com/Manual/class-PlayerSettingsAndroid.html
- docs.unity3d.com/Manual/android-keystore-manager.html
- docs.unity3d.com/Manual/play-asset-delivery.html
- docs.unity3d.com/Manual/android-manifest.html