How to Generate a React Native Release Build for Android

React Native developers eventually need a signed Android release build. For Google Play, the normal production artifact is an Android App Bundle (.aab). APKs are still useful for local testing, sideloading, and some distribution workflows, but Google Play release planning should start with the app bundle.
This guide explains the modern release build flow for React Native Android apps.
Build a native mobile app in minutes with AI. Try an AI React Native / Expo app generator that scaffolds complete projects from prompts.
Try AI FreeQuick Answer
For a React Native Android release:
- Make sure the debug app runs.
- Configure a unique
applicationId. - Generate and protect an upload keystore.
- Configure Gradle release signing without committing passwords.
- Build an Android App Bundle with
./gradlew bundleRelease. - Install or test a release APK locally with
./gradlew assembleReleasewhen needed. - Upload the
.aabto Google Play Console.
Use this article together with the React Native App Release Checklist before submission.
AAB vs APK
Use the right artifact:
| Artifact | Use |
|---|---|
.aab | Google Play production, internal testing, closed testing, open testing. |
.apk | Local install, manual QA, sideloading, device testing outside Google Play. |
The React Native docs still explain signed Android builds, and Android Developers documents Android App Bundles as the publishing format for Google Play. In practice, build both when needed, but treat the .aab as the release artifact.
Prerequisites
Before generating a release build:
yarn androidornpx react-native run-androidworks in debug mode.- Android Studio and the Android SDK are installed.
- Java and Gradle are compatible with your React Native version.
android/app/build.gradlehas the correctnamespaceandapplicationId.- Demo app names, icons, Firebase files, and package IDs are replaced.
- You reviewed the current Google Play target API level requirement.
If you are using an Instamobile app, start with Getting Started with React Native and configure Firebase before release.
Step 1. Generate an Upload Keystore
Create a keystore for Android release signing:
keytool -genkeypair -v \
-storetype JKS \
-keystore my-upload-key.keystore \
-alias my-key-alias \
-keyalg RSA \
-keysize 2048 \
-validity 10000
Back up:
- keystore file;
- store password;
- key alias;
- key password.
Do not commit the keystore or passwords to Git.
Step 2. Move the Keystore
Move the keystore into the Android app folder or another secure path used by your build system:
mv my-upload-key.keystore android/app/my-upload-key.keystore
Add keystore files to .gitignore if they are not already ignored:
*.keystore
*.jks
For team projects, store signing credentials in a password manager or CI secret store.
Step 3. Store Signing Values Outside Gradle Code
Use android/gradle.properties for local development values or CI environment variables for automated builds.
Example local values:
MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=replace_me
MYAPP_UPLOAD_KEY_PASSWORD=replace_me
Keep private values out of committed source control. For CI, inject these as secrets.
Step 4. Configure Release Signing
In android/app/build.gradle, configure the release signing config:
android {
signingConfigs {
release {
if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
storeFile file(MYAPP_UPLOAD_STORE_FILE)
storePassword MYAPP_UPLOAD_STORE_PASSWORD
keyAlias MYAPP_UPLOAD_KEY_ALIAS
keyPassword MYAPP_UPLOAD_KEY_PASSWORD
}
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
}
}
React Native templates may already include a release signing block. If so, adapt the existing pattern instead of duplicating it.
Mega Bundle Sale is ON! Get ALL of our React Native codebases at 90% OFF discount 🔥
Get the Mega BundleStep 5. Build an Android App Bundle
From the project root:
cd android
./gradlew bundleRelease
The output is usually:
android/app/build/outputs/bundle/release/app-release.aab
Upload this .aab to Google Play Console.
Step 6. Build a Release APK for Local Testing
For a local installable APK:
cd android
./gradlew assembleRelease
The output is usually:
android/app/build/outputs/apk/release/app-release.apk
Install it on a device:
adb install android/app/build/outputs/apk/release/app-release.apk
Test the release build from a clean install. Debug builds can hide issues that only appear in release mode.
Step 7. Test Before Uploading
Before uploading to Google Play:
- install the release APK on a real Android device;
- sign in with a real production Firebase project;
- test the main user flow;
- test media upload if the app uses storage;
- test push notification registration if included;
- verify app icon, app name, splash screen, and package name;
- check network calls point to production-ready services;
- verify no demo credentials remain;
- review privacy policy and Google Play Data Safety answers.
For a full release gate, use React Native App Release Checklist.
Build a native mobile app in minutes with AI. Try an AI React Native / Expo app generator that scaffolds complete projects from prompts.
Try AI FreeCommon Build Problems
Keystore credentials are missing
If Gradle cannot find signing properties, check android/gradle.properties, CI secrets, and storeFile paths.
Release build crashes but debug works
Check minification and ProGuard/R8 rules. Temporarily disable minification to confirm whether the crash is caused by shrinking, then add the correct keep rules.
Duplicate resources or stale generated assets
Clean Android build output:
cd android
./gradlew clean
Then rebuild.
Google Play rejects the upload
Check:
- app bundle format;
- package name;
- version code;
- signing key;
- target API requirement;
- permissions and Data Safety form;
- 64-bit/native library requirements;
- store listing assets.
Google Play requirements change over time, so use the official Play Console and Android Developers docs as the source of truth before submission.
Android Studio Alternative
You can also create a signed build from Android Studio:
- Open the
androidfolder. - Select
Build > Generate Signed Bundle / APK. - Choose Android App Bundle for Google Play.
- Select or create the upload key.
- Choose the
releasevariant. - Generate the signed artifact.
Command-line builds are easier to document and automate, but Android Studio is useful when debugging Gradle, SDK, or signing setup.
Useful Official References
- React Native: Publishing to Google Play Store
- Android Developers: Android App Bundles
- Android Developers: Prepare and roll out a release
- Google Play target API level requirements
- Instamobile React Native App Release Checklist
Bottom Line
For Google Play, build and upload a signed Android App Bundle. Keep APK builds for local release testing, protect your signing keys, verify the app on a real device, and do not submit until branding, Firebase, privacy, and core user flows are production-ready.
Looking for a custom mobile application?
Our team of expert mobile developers can help you build a custom mobile app that meets your specific needs.
Get in Touch