Google Play (Android)Kotlin

How to Publish a Kotlin App on Google Play

Kotlin is Google's preferred language for Android development, so publishing a Kotlin app on Google Play is as straightforward as it gets. Whether you're using Jetpack Compose or traditional XML layouts, the build and submission process leverages Android's mature toolchain. This guide covers the complete workflow from generating a signed release build to going live on the Play Store.

Prerequisites

  • Android Studio Hedgehog (2023.1) or later
  • A Google Play Developer account ($25 one-time fee)
  • JDK 17 installed
  • Your app targeting API 34+ (compileSdk and targetSdk)
  • Your app tested on physical devices and emulators

Step-by-Step Build Process

1

Configure version in build.gradle.kts

Set `versionCode` (integer, must increment for each upload) and `versionName` (user-facing string like "1.0.0") in your app-level build.gradle.kts. Use a version catalog (libs.versions.toml) for dependency management.

2

Generate a signing keystore

Use Android Studio: Build > Generate Signed Bundle. It walks you through creating a new keystore with a key alias and passwords. Alternatively, use keytool from the command line. Store the keystore file and credentials securely.

3

Build a signed App Bundle

In Android Studio, go to Build > Generate Signed Bundle/APK > Android App Bundle. Select the keystore, enter credentials, choose the 'release' build variant. The AAB is generated at app/build/outputs/bundle/release/.

4

Test the release build

Before uploading, install the release APK on a device: `./gradlew installRelease`. Test all features, deep links, and push notifications in release mode. ProGuard/R8 might strip code that's needed at runtime.

Code Signing & Certificates

App Signing by Google Play

Enroll in Play App Signing when creating your app. Google manages the app signing key securely. You upload with a separate upload key. This provides recovery options if you lose your upload keystore.

Configure signing in Gradle

For CI/CD, configure signing in build.gradle.kts using environment variables: `signingConfigs { create("release") { storeFile = file(System.getenv("KEYSTORE_PATH")) ... } }`. Never hardcode keystore credentials.

Store Submission Steps

1

Create the app in Play Console

Go to 'All apps' > 'Create app'. Fill in the app name, default language, app type, and pricing. Kotlin apps should use 'Application' unless using a game engine.

2

Complete the store listing

Write a short description (80 chars) and full description (4000 chars). Upload hi-res icon (512x512), feature graphic (1024x500), and at least 2 phone screenshots. Use Jetpack Compose previews to quickly capture clean screenshots.

3

Fill in all policy declarations

Complete the content rating questionnaire, target audience declaration, news app declaration (if applicable), COVID-19 declaration (if applicable), data safety form, and government apps declaration.

4

Upload AAB and roll out

Create a production release, upload the AAB, add release notes, and roll out. For new apps, use internal testing first, then closed testing, then open testing, then production for a safer launch.

Common Rejection Reasons & Fixes

Target SDK too old

Google requires new apps to target the latest API level. Update compileSdk and targetSdk to 34 or later in build.gradle.kts. Test your app with the new API level — behavior changes may break existing functionality.

Data Safety Form discrepancies

Google audits data safety declarations against actual app behavior. Use Android Studio's dependency analyzer to identify all libraries that collect data. Common culprits: Firebase Analytics, Crashlytics, advertising SDKs.

Background location access without justification

If using ACCESS_BACKGROUND_LOCATION, you must demonstrate why your app needs it with a video. Most apps only need ACCESS_FINE_LOCATION with foreground service. Remove background location if not essential.

Accessibility issues

Ensure all interactive elements have content descriptions. Use Jetpack Compose's semantics API: `Modifier.semantics { contentDescription = "..." }`. Run the Accessibility Scanner tool before submitting.

Pro Tips

  • Use Baseline Profiles to optimize app startup time — this significantly improves Android Vitals metrics
  • Enable R8 full mode in gradle.properties for maximum code shrinking: `android.enableR8.fullMode=true`
  • Use Android Studio's App Quality Insights to monitor crashes directly from the IDE
  • Implement Material Design 3 (Material You) for dynamic theming on Android 12+
  • Set up pre-launch reports in Play Console — Google runs your app on real devices and reports crashes automatically

Skip the hassle. Let us handle it.

Publishing a Kotlin app on the Google Play (Android) involves dozens of steps, certificates, and potential rejection pitfalls. Our team handles the entire process for you — from build configuration to store approval.

Related Guides