App Bundle & Play Store

TrailLog now has a signing identity from the previous lesson — but signing alone doesn't get an app in front of real users. Google Play requires the actual uploaded file to be an Android App Bundle (.aab), not the .apk format used for installing straight onto a device or emulator during development. This lesson covers what that format actually buys you, how to build one for TrailLog, and what happens after it's built.

App Bundle vs. APK: What Actually Changes

An .apk is a complete, ready-to-install package containing everything TrailLog needs for every device it might run on — every screen density's images, every supported CPU architecture. An .aab contains that same content but organized so Google Play itself can do something an APK can't: at install time, Play generates a smaller optimized APK containing only what that specific device actually needs — the right screen density's images, the right CPU architecture's native code — rather than shipping every variant to every device. The practical result is a meaningfully smaller download and install size for the end user, without TrailLog's own code changing at all.

Building a Signed Release Bundle

With the signingConfig wired into the release build type as shown in App Signing & Keystore, building a signed .aab is one Gradle command:

./gradlew bundleRelease

Gradle compiles TrailLog's release build type, runs R8 shrinking as configured in Gradle Kotlin DSL, signs the result with the release keystore, and produces app/build/outputs/bundle/release/app-release.aab — the exact file uploaded to the Play Console.

Play Console: Developer Account & App Listing

Uploading that .aab happens through the Play Console, Google's publishing dashboard, which requires a one-time developer account and, for each app, a new app listing created before any bundle can be uploaded to it.

Store Listing Essentials

FieldWhat it needs
Title & descriptionTrailLog's name and a short/long description of what it does for hikers
ScreenshotsActual screens — the trail list, trail detail, add-trail form
Feature graphicA banner image shown at the top of the Play Store listing page
Privacy policy URLA hosted page explaining what data TrailLog collects and why

The privacy policy URL deserves special attention: it's not optional for TrailLog. Play requires a privacy policy for any app that requests sensitive permissions, and TrailLog requests both location (see Fused Location Provider) and camera (see CameraX) access to log a trail's GPS position and photos — without a valid privacy policy URL in place, Play will reject the listing outright.

Staged Rollout: Testing Tracks

Rather than releasing straight to everyone, Play Console offers staged testing tracks to catch problems before a wide release: internal testing for a small, immediately-available group like TrailLog's own development team; closed testing for a larger, invite-only group of real outside testers; and open testing, publicly joinable but still opt-in, before a full production release. Moving through these tracks in order gives real usage data and crash reports from progressively wider audiences before TrailLog reaches every user on the Play Store.

The Pre-Launch Report

Once a bundle is uploaded to any track, Play Console also generates a pre-launch report — TrailLog installed and exercised automatically on a range of real physical devices in Google's test lab, surfacing crashes, rendering issues on unusual screen sizes, or accessibility problems before a single real user ever installs that build.

Note: Every command and configuration detail described here reflects the real Play Console publishing flow — but this website's own project doesn't run a live Android Studio build or an actual Play Console account, so nothing here executes on the page itself.
Up next: Optimization & Performance looks at shrinking TrailLog's install size further and keeping it running smoothly once real users have it installed.