{"slug":"android-builds","title":"Android builds","summary":"Build a signed APK to install on phones, or a signed App Bundle for Google Play. Install an APK with a QR code, or send an App Bundle straight to Play's internal testing track.","body":"Click **Build** in the project bar and choose **Android**.\n\n## APK or App Bundle?\n\n| | Installable APK | Play Store AAB |\n| --- | --- | --- |\n| Install directly on a phone | Yes | No |\n| Upload to Google Play | No | Yes, required |\n| Delivery from FluxNative | QR code or download | **Send to Play** or download |\n| Typical use | Your own testing, quick demos | Internal testing, then production |\n\nBuild an APK while you iterate. Build an App Bundle when the app is going to Google Play.\n\n## Step by step\n\n1. Open **Build**, choose **Android**, and pick the output.\n2. Check the **Signing key** section. If the app has no key yet, click **Create signing key now**, or let the first build create one. If the app is already on Google Play with your own key, register that keystore first. See [Android signing keys](/docs/android-signing).\n3. Start the build and wait for **Ready**.\n4. For an APK, scan the QR code with the phone or download the file. For an App Bundle, click **Send to Play** or download it.\n\n## Send to Play\n\n**Send to Play** uploads the App Bundle to the **internal testing** track of the Play app whose package name matches this project. It needs the organization's Google Play account connected in Publish. See [Connect store accounts](/docs/connect-store-accounts).\n\nThe upload creates an internal release named after the version and build number, for example `1.2.0 (14)`. The same file is never uploaded twice. Clicking again returns the existing upload.\n\n> [!NOTE]\n> Google sometimes requires the very first bundle of a new Play app to be uploaded by hand. If **Send to Play** fails for a brand-new app, download the AAB and upload it once in Play Console. Later builds can use **Send to Play**. See [Google Play testing](/docs/google-play-testing).\n\n## Package name\n\nThe Android package name (for example `com.example.habits`) identifies the app on Google Play and on devices. It is set in the project and is not changed from the app name dialog, because changing it makes a different app. Ask the assistant if you need to set it before the first release.\n\n## Versions\n\nThe version customers see comes from the project. FluxNative assigns the Play `versionCode` for each build and never reuses a number. See [Versions and build numbers](/docs/versions-and-build-numbers).\n\n## If it fails\n\nThe build stays in the Android history with its reason. Use **Fix with AI**, then **Retry build**. See [Fix a failed build](/docs/build-failures).","sectionSlug":"native-builds","sectionTitle":"Build for devices","updatedAt":"2026-09-23T22:51:25.250Z","previous":{"slug":"builds-overview","title":"Native builds overview"},"next":{"slug":"android-signing","title":"Android signing keys"}}