android-scaffold
Scaffold a new Android app with SDLC and Play-safe defaults — Kotlin/Compose Gradle project with version catalog, convention plugins, module layout, a targetSdk that meets the Play mandate, R8 on rele
SKILL.mdskills/android-scaffold/SKILL.md
GitHubAndroid Scaffold
Create a new Android app project that is Play-safe and build-fast from the first commit — so it
doesn't hit the submission/build issues android-play-release and the pre-flight checker exist to
catch. Belongs to the sdlc-team-android plugin; pairs with jetpack-compose-architect (UI),
android-app-architect (structure), gradle-build-specialist (build), and language-kotlin-expert.
Arguments
app-name— the app / applicationId (defaults to asking).
Steps
1. Project shape
- Kotlin + Jetpack Compose app module + a unit-test source set + optional instrumented tests.
- A multi-module layout if non-trivial (
app+feature:*+core:*+data:*; features depend on core/data, never other features) — seeandroid-app-architect. .gitignorecovering/build,.gradle,local.properties,*.jks/*.keystore,keystore.properties,.idea(except shared),*.iml.
2. Build setup (the point of the skill)
- Kotlin DSL (
build.gradle.kts), a version catalog (gradle/libs.versions.toml) as the single source of truth, and convention plugins in abuild-logicincluded build for sharedandroid {}config (à la Now in Android). Seegradle-build-specialist. namespace+applicationIdset;compileSdk= latest stable;targetSdk= the current Play minimum (the pre-flight checker's--play-min-target) so the app isn't hidden on new devices; a sensibleminSdk.- Version numbers:
versionNamefixed pre-1.0;versionCodestamped fromgit rev-list --count HEAD(unique & monotonic — every upload needs this) in a Gradle snippet. - Enable the configuration cache + build cache + KSP (not kapt) in
gradle.properties.
3. Release-safe defaults
- Release build type:
isMinifyEnabled = true+isShrinkResources = true(R8) with aproguard-rules.pro; a releasesigningConfigreading secrets from a git-ignoredkeystore.properties/ CI (never the debug keystore, never committed secrets) — seeandroid-signing-setup. - Gate debug menus, verbose logging, and staging endpoints behind a build type /
BuildConfigflag that is off in release.
4. Manifest hygiene
- Request only permissions you use; keep exported components guarded (permission or intent-filter, or
android:exported=false); avoidusesCleartextTraffic(use a network-security-config allowlist if genuinely needed).
5. CI + lint
- Offer to run
android-cito generate the GitHub Actions workflow (gates on the pre-flight checker +./gradlew lint).
6. Verify
./gradlew assembleDebugonce; run the unit-test source set; and run the pre-flight checker (python -m android_preflight.cli <project>) — it should be clean (or only INFO) on a fresh scaffold.
7. Report
Summarise what was generated, the module layout, the versionCode policy, and confirm the pre-flight checker is clean. Note anything the user must fill in (real keystore, Data Safety, privacy policy).
Notes
- The goal is a project that passes
android-play-releasepre-flight on day one — don't leave targetSdk, R8, or signing "for later". - For UI structure hand off to
jetpack-compose-architect; for app architecture toandroid-app-architect; for idiomatic Kotlin tolanguage-kotlin-expert.