App Publishing

Ship your Android app to the Google Play Store — from signed builds to optimized store listings

Signed APK App Bundle Play Console ASO

Table of Contents

Publishing Overview

Publishing an Android app means building a signed release, uploading it to Google Play Console, completing store metadata, and submitting for review. Google Play is the primary distribution channel for Android apps worldwide.

Develop & Test ↓ Generate Signed AAB/APK ↓ Google Play Console → Upload → Review ↓ Published on Play Store → Users Download
FormatExtensionPlay Store
App Bundle (AAB).aabRequired for new apps (recommended)
Signed APK.apkLegacy; sideloading, some stores

1Generating Signed APK

Release builds must be signed with a keystore. Google Play uses your signing key to verify app updates — losing the keystore means you cannot update the app ever again.

Create a keystore

Bash — keytool commandkeytool -genkey -v -keystore my-release-key.jks -keyalg RSA \ -keysize 2048 -validity 10000 -alias my-key-alias

You will be prompted for a keystore password, key password, and certificate details (name, organization). Store the .jks file and passwords securely — never commit them to Git.

Configure signing in Gradle

Kotlin — app/build.gradle.ktsandroid { signingConfigs { create("release") { storeFile = file("../keystore/my-release-key.jks") storePassword = System.getenv("KEYSTORE_PASSWORD") keyAlias = "my-key-alias" keyPassword = System.getenv("KEY_PASSWORD") } } buildTypes { release { isMinifyEnabled = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) signingConfig = signingConfigs.getByName("release") } } }

Generate signed APK in Android Studio

  1. Build → Generate Signed App Bundle / APK
  2. Select APK (or App Bundle — preferred)
  3. Choose existing keystore or create new
  4. Select release build variant
  5. Click Create — output in app/release/

Build from command line

Bash — Gradle release build# Generate signed App Bundle (recommended) ./gradlew bundleRelease # Generate signed APK ./gradlew assembleRelease # Output locations: # AAB: app/build/outputs/bundle/release/app-release.aab # APK: app/build/outputs/apk/release/app-release.apk

2App Bundle

An Android App Bundle (AAB) is the publishing format required by Google Play. Play generates optimized APKs per device — smaller downloads, only the resources and CPU architecture the device needs.

AAB vs APK

FeatureAPKApp Bundle (AAB)
Upload to Play StoreLegacy (not for new apps)Required
Download sizeFull APK for all devicesOptimized per device
Split by ABIManual (APK splits)Automatic
Dynamic featuresNot supportedSupported
Play App SigningOptionalRecommended

Enable App Bundle in Gradle

Kotlin — app/build.gradle.ktsandroid { bundle { language { enableSplit = true // separate APK per language } density { enableSplit = true // separate APK per screen density } abi { enableSplit = true // separate APK per CPU architecture } } }

Test App Bundle locally

Bash — bundletool commands# Download bundletool from GitHub releases # Generate APK set from AAB java -jar bundletool.jar build-apks \ --bundle=app-release.aab \ --output=app-release.apks \ --ks=my-release-key.jks \ --ks-key-alias=my-key-alias # Install on connected device java -jar bundletool.jar install-apks --apks=app-release.apks

Play App Signing

Enroll in Play App Signing when uploading your first release. Google manages your app signing key; you upload with an upload key. If you lose your upload key, Google can reset it — but the app signing key stays safe with Google.

3Play Console Setup

Google Play Console is the developer dashboard for publishing and managing apps. A one-time $25 registration fee gives lifetime access to publish unlimited apps.

Account setup steps

  1. Go to play.google.com/console
  2. Sign in with Google account → pay $25 registration fee
  3. Complete developer profile (name, email, website)
  4. Verify identity if prompted
  5. Create a new app → enter app name and default language

Required Play Console sections

SectionWhat to Complete
App contentPrivacy policy, ads declaration, target audience, content rating
Store listingTitle, description, screenshots, icon, feature graphic
ReleaseUpload AAB, release notes, rollout track
PolicyData safety form, permissions justification
PricingFree or paid, countries, in-app products

versionCode and versionName

Kotlin — app/build.gradle.ktsandroid { defaultConfig { applicationId = "com.example.myapp" minSdk = 24 targetSdk = 34 versionCode = 1 // integer — must increase each release versionName = "1.0.0" // user-visible version string } }

Release tracks

Internal testing → Closed testing → Open testing → Production (100 testers max) (email list) (public beta) (all users) Start with Internal → fix bugs → promote to Production

4Uploading App

Upload your signed AAB to a release track, add release notes, complete all policy requirements, and submit for Google review. Review typically takes a few hours to a few days.

Upload workflow

  1. Play Console → Your App → Release → Production (or Testing track)
  2. Click Create new release
  3. Upload app-release.aab
  4. Enter release name and release notes (what's new)
  5. Review warnings — fix any errors before proceeding
  6. Click Review releaseStart rollout to Production

Pre-launch checklist

Checklist — Before uploading✓ versionCode incremented from previous release ✓ targetSdk meets Play Store minimum requirement ✓ App tested on multiple devices / API levels ✓ ProGuard/R8 rules verified — no crashes in release build ✓ Privacy policy URL added (required if app collects data) ✓ Content rating questionnaire completed ✓ Data safety form filled out ✓ All permissions justified in store listing

Release notes example

Text — Release notes v1.1.0What's new in version 1.1.0: • Added dark mode support • Improved app performance and stability • Fixed crash when loading large images • New task reminder notifications

Staged rollout

Use staged rollout to release to a percentage of users first (e.g. 10% → 50% → 100%). Monitor crash reports in Play Console Vitals before full rollout.

Common rejection reasons

IssueFix
Missing privacy policyAdd URL in App content section
Permissions not justifiedExplain why each permission is needed
Broken functionalityTest release build thoroughly
Misleading store listingEnsure screenshots match actual app
Target API too lowUpdate targetSdk to required minimum

5Store Listing Optimization

App Store Optimization (ASO) improves your app's visibility and conversion rate on Google Play. A compelling listing with the right keywords, visuals, and descriptions drives more installs.

Store listing assets

AssetSizeTips
App icon512 × 512 pxSimple, recognizable, no text
Feature graphic1024 × 500 pxBanner shown at top of listing
Phone screenshotsMin 2, max 8Show key features, add captions
Short description80 characters maxHook users — main benefit in one line
Full description4000 characters maxFeatures, keywords, call to action

Writing effective descriptions

Text — Store listing exampleShort description (80 chars): Organize tasks, set reminders, and boost productivity every day. Full description: TaskMaster helps you stay organized with a clean, intuitive task manager. KEY FEATURES: • Create and organize tasks with categories • Set due dates and reminder notifications • Dark mode for comfortable night use • Sync across devices with cloud backup • Widget for quick access from home screen Perfect for students, professionals, and anyone who wants to get things done. Download TaskMaster today — it's free!

ASO keyword strategy

  • Research keywords users search for in your category
  • Place primary keywords in title and short description
  • Repeat important keywords naturally in full description
  • Use Google Play's Custom store listing for A/B testing titles/descriptions
  • Localize listing for major markets (Hindi, Spanish, etc.)

Screenshot best practices

  • First screenshot is most important — show core value immediately
  • Add text overlays explaining each feature
  • Use device frames for a polished look
  • Show the app in action, not empty states
  • Include a screenshot with social proof (ratings, user count) if available

Metrics to track post-launch

MetricWhere to FindGoal
Install conversion ratePlay Console → Store listing> 25% is good
Crash-free usersVitals → Crashes> 99%
ANR rateVitals → ANRs< 0.5%
Average ratingPlay Console → Ratings> 4.0 stars
Retention (Day 1 / Day 7)Statistics → RetentionImprove with updates

6Hands-On Exercises

1

Generate a release keystore with keytool. Configure signing in build.gradle.kts using environment variables.

2

Build a signed App Bundle with ./gradlew bundleRelease. Locate the output AAB file.

3

Create a Google Play Console account. Set up a new app and complete the content rating questionnaire.

4

Upload your AAB to the Internal testing track. Add yourself as a tester and install via the test link.

5

Write a complete store listing — short description, full description, and plan 4 screenshots with captions.

6

Increment versionCode, add release notes, and promote from Internal testing to Production with staged rollout.

7

Bonus: Research 5 competitor apps in your category. Note their keywords, screenshots, and ratings for ASO ideas.

App Publishing MCQ Practice

10 Basic MCQs 10 Advanced MCQs

10 Basic App Publishing MCQs

1

Google Play requires upload format?

AUnsigned APK only
BAndroid App Bundle (AAB)
CZIP source
DDEX only
Explanation: AAB mandatory for new apps — Play generates optimized APKs.
2

Play Console is?

AEmulator
BIDE plugin
CDeveloper portal to publish and manage apps
DAd network
Explanation: Store listing, releases, analytics, policy.
3

Release signing uses?

AADB
BDebug keystore
CNo signing
DUpload key / app signing by Google
Explanation: Play App Signing recommended — Google manages app signing key.
4

versionCode?

AInteger incremented each release
BUser visible version name
CPackage name
DAd unit ID
Explanation: Must increase for each Play upload.
5

versionName?

AInternal only integer
BUser-visible version string like 1.2.0
CSHA-1
DAPI level
Explanation: Display version for users in store and about screen.
6

Internal testing track?

ABanned
BPublic only
CFast distribution to testers before production
DNo testing
Explanation: Closed testing tracks: internal, closed, open, production.
7

Store listing includes?

AADB logs
BSource code
CKeystore password
DTitle, description, screenshots, icon
Explanation: ASO assets for Play Store discovery.
8

Generate signed bundle in Studio?

ABuild → Generate Signed Bundle/APK
BRun button
CSDK Manager
DLogcat
Explanation: Wizard selects keystore and builds release AAB.
9

applicationId?

AActivity name
BUnique Play Store package identifier
CLayout name
DGradle task
Explanation: Cannot change easily after publish — choose carefully.
10

Content rating questionnaire?

AOnly games
BOptional always
CRequired IARC rating for store
DAutomatic
Explanation: Complete questionnaire for age rating label.

10 Advanced App Publishing MCQs

11

Staged rollout?

AAll users instantly always
BRelease to percentage of users first
CBeta only dev
DDeprecated
Explanation: Monitor crashes then increase rollout percentage.
12

Data safety form?

AOnly EU
BOptional
CDeclare data collection and sharing to users
DLint report
Explanation: Required Play Console disclosure.
13

Play Integrity API?

ACamera
BReplace Auth
CLayout test
DVerify genuine device and unmodified app
Explanation: Anti-fraud and anti-tamper for sensitive apps.
14

App bundle splits?

ALanguage, density, ABI splits reduce download size
BOne fat APK always
CNo benefit
DDebug only
Explanation: Dynamic delivery serves device-specific APK.
15

Deobfuscation file upload?

ASource zip
Bmapping.txt for readable crash reports
CKeystore
DManifest
Explanation: Upload ProGuard/R8 mapping with each release.
16

Target API requirement?

ANo requirement
BAPI 1 forever
CPlay mandates recent targetSdk deadline
DEmulator only
Explanation: Must target recent API per Play policy schedule.
17

Country distribution?

AADB
BAll always automatic
COne country only ever
DSelect countries where app available
Explanation: Pricing and availability per country.
18

Pre-launch report?

AAutomated testing on Firebase Test Lab devices
BManual only
CLint
DGradle
Explanation: Play runs tests on real devices before release.
19

Subscription vs one-time?

AAdMob only
BPlay Billing subscriptions for recurring revenue
CNo IAP on Android
DPayPal only in app
Explanation: Use Google Play Billing Library for IAP.
20

Reject common policy reasons?

AKotlin code
BDark theme
CPermissions misuse, misleading metadata, broken functionality
DToo many colors
Explanation: Policy center explains violations and appeals.
Click an option to select, then check answers.

App Publishing Interview Q&A

15 topic-focused questions for interviews and revision.

1Steps to publish first app.medium
Answer: Create Play Console account, prepare AAB, store listing, content rating, data safety, upload internal track, test, production.
2Create upload keystore.medium
Answer: keytool -genkey -v -keystore upload.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
3AAB vs APK for Play.easy
Answer: AAB required; Google generates optimized APK splits; smaller downloads.
4versionCode vs versionName.easy
Answer: versionCode int must increase each release; versionName string shown to users.
5Internal testing benefits.easy
Answer: Up to 100 testers quickly; no review wait like production first time nuances.
6Store listing ASO tips.medium
Answer: Clear title, keyword-rich description, quality screenshots, feature graphic, localized listings.
7Play App Signing benefit.medium
Answer: Google holds signing key; you use upload key; key recovery if lost upload key.
8Data safety section.medium
Answer: Declare location, contacts collected; privacy policy URL required.
9Handle rejection.medium
Answer: Read policy email, fix issue, increment versionCode, resubmit with explanation.
10Staged rollout strategy.medium
Answer: Start 5-10%, monitor vitals, expand to 50%, then 100% if stable.
11Privacy policy requirement.easy
Answer: Required if collecting user data; link in store listing and in-app.
12Testing before production.medium
Answer: Internal → closed beta → open beta → production staged rollout.
13Upload mapping file.hard
Answer: Build release with R8; upload mapping.txt in Play Console for crash deobfuscation.
14Target API compliance.hard
Answer: Update targetSdk in Gradle; test behavior changes; meet Play deadline.
15Post-publish monitoring.easy
Answer: Android vitals crashes, ANRs, reviews, Firebase Crashlytics, release dashboard.