Export an Android App Bundle
Point Godot at Java and the Android SDK
Install a JDK (OpenJDK 17 is recommended) and the Android SDK, then set Java SDK Path and Android SDK Path in the Android section of Editor Settings. Recent versions can download both for you.
Download export templates
Open Editor → Manage Export Templates and install the templates for your exact editor version.
Install the Android build template
Choose Project → Install Android Build Template (called Setup Android Build… in newer versions). Godot creates the Gradle project in
res://android/build.Create the preset
In Project → Export, add an Android preset. Under Gradle Build, enable Use Gradle Build and set Export Format to AAB.
Export
Click Export Project, untick Export With Debug and save the
.aab.
AAB export only works with a Gradle build. The default prebuilt template exports APKs, and Google Play has required App Bundles for new apps since August 2021.
On a build server, the same preset can be exported headless:
godot --headless --export-release "Android" builds/mygame.aabRelease keystore and Play App Signing
Google Play needs a non-debug signature. Create a release keystore with keytool:
keytool -v -genkey -keystore mygame.keystore -alias mygame -keyalg RSA -validity 10000In the Android preset, under Keystore, fill in Release (the file path), Release User (the alias) and Release Password. Godot currently needs the keystore password and the key password to be the same, and it's safest to use only letters and numbers.
This keystore is your upload key. On the first upload, Play App Signing is set up and Google keeps the app signing key. In CI, keep the secrets out of export_presets.cfg and pass them as environment variables instead:
GODOT_ANDROID_KEYSTORE_RELEASE_PATH=/secrets/mygame.keystore
GODOT_ANDROID_KEYSTORE_RELEASE_USER=mygame
GODOT_ANDROID_KEYSTORE_RELEASE_PASSWORD=*****Version code and target SDK
In the preset, Version → Code is the integer Google compares; increase it for every upload, because Play Console rejects reused codes. Version → Name is what players see.
Since 31 August 2026, new apps and updates must target Android 16 (API level 36). Under Gradle Build, Target SDK sets targetSdkVersion; left empty, the template's default applies. If your Godot version's default is lower than 36, set it explicitly or upgrade Godot, then test the export on a recent device.
Godot pitfalls
- Mismatched templates. Export templates and the Android build template must match the editor version. After upgrading Godot, reinstall both.
- Export With Debug left on. The bundle is then signed with the debug keystore, and Play Console rejects it.
- Missing arm64-v8a. Under Architectures, keep arm64-v8a enabled; Google Play requires 64-bit native code.
- Folders starting with an underscore. In Gradle builds, assets inside a folder whose name begins with
_aren't included. Testers then hit missing textures or scenes. - Special characters in passwords. They can make the export fail with unclear errors. Use letters and numbers.
- C# projects. Android export for C# has been available since Godot 4.2 but is still experimental. Test the release bundle on real devices early.
Debug crashes and errors from testers
A Godot export runs your scripts on top of a precompiled engine library, so most tester reports turn out to be script errors, missing resources or device-specific rendering problems rather than engine crashes. The fastest way to see them is on a phone of your own, with the editor attached.
Deploy in one click
Enable developer mode and USB debugging on a phone, connect it and make sure your Android preset is marked Runnable. An Android button then appears in the top-right corner of the editor and exports and installs in one click.
Turn on remote debugging
With Debug → Deploy with Remote Debug enabled, the game on the phone connects back to your computer, so the editor's debugger, breakpoints and error output work as they do on desktop.
Go wireless if USB is unreliable
Enable wireless debugging on the phone, pair it with
adb pairand the code it shows, and confirm withadb devices. Ifadb devicesdoesn't list the phone, Godot won't see it either.Check Play Console after every upload
Engine crashes appear under Monitor and improve → Android vitals → Crashes & ANRs. The pre-launch report also installs each uploaded build on test devices automatically and flags crashes and compatibility problems.
# Wireless debugging: pair once with the code shown on the phone
adb pair <ip address>:<port>
adb devices
# Watch the device log while you reproduce a tester's report
adb logcatA build exported without Export With Debug doesn't connect to the editor. To see why the release build fails on a specific phone, install it there and watch adb logcat while you reproduce the tester's steps.
Play Console in short: from closed test to production
Once your Godot bundle is built and signed, the rest happens in Play Console and works the same for every framework. This is the checklist; the full Play Console walkthrough covers every menu and screen.
- Finish app setup on the Dashboard: privacy policy, app access, ads, content rating, target audience, data safety and store listing.
- Create a closed testing release under Test and release → Testing → Closed testing: choose your testers' countries, upload the
.aaband send it for review. - Add testers with a Google Group on the Testers tab and share the opt-in link. It works once the track shows Published.
- Keep at least 12 testers opted in for 14 days in a row. Internal testing doesn't count, and someone who leaves and rejoins starts their 14 days again.
- Ship at least one update during the test and write down what testers found and what you changed.
- Apply for production from the Dashboard and answer the three sections about your test, your app and your readiness. The decision is Google's; nobody can guarantee approval.
Plan for drop-outs: recruit more than 12 testers so one person leaving doesn't push back your timeline. See the full Play Console steps.
The full Play Console walkthrough
Closed track, Google Group and opt-in link, the 12 testers / 14 days rule and the production application, step by step on one page.
Ship updates quickly during the test
Increase Version → Code in the preset, export the .aab again and upload it to the same closed track.
For your own test runs, Debug → Small Deploy with Network Filesystem deploys a minimal executable over USB and streams project files from the editor over the network, which saves a lot of time with large games. It's strictly a development feature: testers always need a full exported .aab on the closed track.
- Edge to edge. The preset's Screen → Edge to Edge option lets the game draw behind translucent system bars. If you enable it, keep important UI inside the area returned by
DisplayServer.get_display_safe_area()so nothing hides under a bar or camera cutout. - Keep native libraries uncompressed. Gradle Build → Compress Native Libraries makes the bundle smaller but slows startup, because libraries must be extracted before use. For Google Play, the Godot docs recommend leaving it off.
- Script the export. A headless export with the keystore in environment variables, as in the signing section, produces the same bundle every time and makes the version code bump part of the routine.
- Don't upgrade Godot mid-test. A new editor version means new export templates, a new Android build template and a new engine library for testers. Upgrade before the test or after production access.
Frequently asked questions
Do I need the Gradle build for Google Play?
Yes. Google Play needs an .aab, and Godot exports one only with Use Gradle Build enabled. The prebuilt template only exports APKs, which you can still sideload to your own devices.
Can I export from the Android editor?
Since Godot 4.6, Gradle builds also work from the Android editor, if you install the Godot Android Build Environment (GABE) app on the same device. It isn't needed for prebuilt APK exports.
Does my game need the INTERNET permission?
Only if it uses the network. Enable Permissions → Internet in the preset for online features, leaderboards or ads; without it, the app can't open network sockets in the release build testers get.
Which architectures should I export?
Keep arm64-v8a enabled: Google Play requires 64-bit native code, and most current phones use it. armeabi-v7a adds support for older 32-bit phones if your audience still has them.
Sources
Technical details were checked against the official documentation below. Menus and defaults change between versions; when in doubt, the official page wins.
- Godot Docs: Exporting for Android
- Godot Docs: Gradle builds for Android
- Godot Docs: EditorExportPlatformAndroid
- Android Developers: Target API level requirements
- Godot Docs: One-click deploy
- Godot Docs: Overview of debugging tools
- Play Console Help: Pre-launch reports
- Play Console Help: App testing requirements for new personal developer accounts
- Play Console Help: Set up an open, closed, or internal test
- Play Console Help: Deobfuscate or symbolicate crash stack traces
New to the 12 testers rule?
The general guide explains Google's requirement, how a TestBunny campaign runs day by day and what we can and can't guarantee.
Read the general guide