What you'll learn
You can build a complete, tested app — the final step is getting it into people's hands. This module covers the last professional essentials: asking for runtime permissionsrespectfully, preparing a signed release build, and publishing through the Google Play Console.
By the end you'll be able to:
- Request runtime permissions in Compose
- Understand app signing and build types
- Prepare a shrunk, signed release bundle
- Navigate the Play Console and ship a quality listing
Runtime permissions
Sensitive capabilities — camera, location, contacts — require the user's explicit consent at runtime, not just a manifest entry. You declare the permission in the manifest, then ask for it when the feature is used:
<!-- AndroidManifest.xml — declare what the app needs -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />In Compose, request it with rememberLauncherForActivityResult and the RequestPermission contract, which shows the system dialog and gives you the result:
@Composable
fun CameraButton(onGranted: () -> Unit) {
val launcher = rememberLauncherForActivityResult(
ActivityResultContracts.RequestPermission(),
) { granted ->
if (granted) onGranted()
// else: show a rationale and guide them to settings
}
Button(onClick = { launcher.launch(Manifest.permission.CAMERA) }) {
Text("Take photo")
}
}Tip
accompanist-permissions library smooths this further.App signing & build types
Every Android app is digitally signed — the signature proves updates come from the same developer. Projects have two build types: debug (auto-signed, used while developing) and release (the optimized build you ship). For publishing, Google recommends Play App Signing: you upload with your own key, and Google manages the final signing key securely.
Watch out
Preparing a release
The release build enables R8, which shrinks and obfuscates your code and strips unused resources — a smaller, faster, harder-to-reverse-engineer app. Then you build an Android App Bundle (.aab), the format Play requires (Google generates optimized APKs per device from it):
// build.gradle (app) — the release build type
android {
buildTypes {
release {
isMinifyEnabled = true // shrink & obfuscate with R8
isShrinkResources = true // drop unused resources
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro",
)
}
}
}
// Build the upload artifact: ./gradlew bundleRelease → app-release.aabNote
The Play Console
The Google Play Console is where you manage your app. A one-time developer account registration is required. The path to live:
- Create the app and complete the content questionnaires (privacy policy, data safety, content rating, target audience).
- Upload your
.aabto a testing track first — internal, then closed/open testing — to catch issues with real users. - Fill in the store listing (below).
- Roll out to production — optionally a staged rollout to a percentage of users first.
Quality & store listing
Your store listing is your storefront: a clear title and description, a compelling icon, screenshots (and ideally a short video), and a feature graphic. First impressions decide installs. Beyond the listing, aim for genuine quality — follow Material guidelines, support dark mode and different screen sizes, handle errors and offline states, respect the user's data, and keep the app fast. That's everything this course has been building toward.
Recap & quick check
Key takeaways
- Sensitive features need runtime permissions: declare in the manifest, then request via rememberLauncherForActivityResult.
- Ask for permissions in context, explain why, and handle denial gracefully — never crash.
- Apps are digitally signed; use Play App Signing and never lose your key, or you can't update the app.
- Release builds enable R8 (shrink/obfuscate); ship an Android App Bundle (.aab), and test the release build.
- Publish via the Play Console: complete the questionnaires, test on tracks, craft a strong store listing, then roll out.
Quick check
1. When should you request a runtime permission like camera?
2. Declaring a permission in the manifest alone is enough for the camera. True or false?
3. Why must you protect your signing key?
4. What artifact do you upload to Google Play?
5. Before production, you should…
That completes Phase 6 — you can build, test, and ship professional apps! 🎉 In the final phase, you'll put it all together with real, portfolio-ready capstone projects.