Install
$ agentstack add skill-mcgrass-ops-android-studio-pipeline-android-polish ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Android Polish & Ship Gate
This is the final stage of the Android app pipeline. The app exists and builds; this pass closes the gap between "functionally complete" and "passes Google Play review and feels finished." It is the last gate, so it carries the strictest rule in the whole pipeline: every item is verified with a command, a tool, or a snapshot - never an eyeball.
Pipeline position:
research -> planning -> monetization -> design -> MCP code -> > POLISH / SHIP GATE compliant."
- **Themed icon monochrome layer.** Android 13+ themed icons need a `` layer in the adaptive icon (108x108dp single-color silhouette) or the system auto-generates a poor one. *Verify:* `` contains ``.
- **No release-build crashes / ANRs on the core journey.** *Verify:* run the **release** variant through the primary flow; confirm crash/ANR reporting (Crashlytics/Sentry) is actually wired; treat planning's stability budget + Android Vitals thresholds as the explicit gate.
- **Release build is shrunk and clean.** R8 + `shrinkResources` on; `isDebuggable = false`; no secrets in source; keep-rules don't strip anything used by reflection. *Verify:* `./gradlew bundleRelease` + APK Analyzer; grep the source tree for keys/tokens.
- **Edge-to-edge not broken.** Mandatory at targetSdk 35+. *Verify:* content respects insets, nothing hidden under the system bars (check a tall and a short device).
## P1 - Quality (fix before a public launch)
- **Every screen has loading / empty / error states.** Not just the happy path. Loads under ~2s use skeletons; known-progress uses a determinate indicator; cached/instant content shows no loader. *Verify:* a screenshot/snapshot test per state - see `references/02-testing.md`.
- **Process-death restoration.** The common production failure, harder than rotation. *Verify:* enable **Developer Options -> Don't keep activities** (or background-kill), reopen, confirm `rememberSaveable` / `SavedStateHandle` restore the user's place.
- **Accessibility (WCAG 2.2 AA).** Labels, semantic headings, `stateDescription` for toggles, `liveRegion` for dynamic content, focus order, `mergeDescendants` for compound items; SC 2.5.8 target size (Material's 48dp clears it), SC 1.4.11 non-text contrast 3:1 for icons/controls. *Verify:* Accessibility Scanner + a TalkBack pass + a 200%-font screenshot. Full list in `references/05-accessibility.md`.
- **Static analysis & code hygiene.** `./gradlew lint` (with a baseline), detekt / ktlint / Spotless formatting, prune unused resources & dependencies, sweep dead code / `TODO` / debug `Log` (no PII; strip verbose logging in release), LeakCanary for leaks, and the architecture anti-patterns (no `GlobalScope` / `runBlocking`, `collectAsStateWithLifecycle` not `collectAsState`, no state stranded in `MainActivity`). See `references/03-static-analysis-and-hygiene.md`.
- **Automated tests exist and pass.** Unit tests on core logic, Compose UI tests on critical flows, and screenshot/snapshot tests that lock visual states - dark mode, 200% font, RTL, key locales (Paparazzi / Roborazzi / Compose Preview Screenshot Testing; Roborazzi can run a11y checks in the same pass). This is how "every screen has its three states" becomes *verified* instead of asserted. *Verify:* `./gradlew test connectedCheck` + your snapshot task. See `references/02-testing.md`.
- **Performance.** Baseline **and** Startup Profiles generated and wired into the release build; measured before/after with Macrobenchmark **on a real device** (not an emulator); per-second/streaming updates don't recompose the whole screen. *Verify:* recomposition counts (Layout Inspector), the Compose compiler stability report, and Macrobenchmark numbers. See `references/04-performance.md`.
- **Localization beyond strings.xml.** "No hardcoded strings" is necessary, not sufficient: RTL/mirroring, pseudolocales (`en-XA` / `ar-XB`) to surface truncation + string concatenation, positional format args, ``, locale-aware number/date formatting. *Verify:* run in a pseudolocale and an RTL locale.
- **Dark mode + configuration breadth.** A real dark variant on every screen (not auto-inverted); large-screen/foldable layout, landscape, and split-screen/multi-window actually opened and checked. *Verify:* snapshot tests across configurations.
- **Motion.** 2-3 meaningful spring-based moments; no celebration on routine actions. *Verify:* watch the transitions; confirm no dropped frames (JankStats).
## P2 - Spit-shine
- **Adaptive launcher icon** (foreground + background + the P0 monochrome layer). Pull from the asset library if present (below), else place into `res/mipmap-*` manually.
- **Splash screen** uses the Splash Screen API, does not appear on warm starts, and hands off without a flash.
- **Play listing assets** - screenshots (phone + any supported larger form factors) from real screens, short/full description seeded from the research ASO keywords, Data Safety form matching what the app actually collects.
## Using the asset library (optional)
If an asset-library MCP is available (`list_assets` / `read_asset` / `copy_asset_to_project`), pull icons, fonts, and imagery from it and copy them into `res/mipmap-*`, `res/font`, etc. **If it is not available, that is fine** - generate or source the asset and place it manually into the right `res/` folder. Never block the polish pass on the asset library.
## Note on building
Building and running happen with the buttons in **Android Studio** (the MCP server doesn't build). Run the gradle verification tasks above from Studio or the terminal; have the user report results, or read them back via the MCP where possible.
## Independent review before sign-off
Polish is the last gate, so it most needs an outside check. Before declaring the app shippable, run an independent adversarial pass: where subagents are available, launch a separate one (the Task tool) briefed to *"find what still makes this feel like a prototype, and what would fail Google Play review."* Otherwise red-team it in a fresh frame. Record what it finds and fix or explicitly accept each item. A self-passed checklist from the same agent that built the app is the failure mode to avoid.
## Output
A polish report, severity-ordered: each **P0** item marked pass/fail **with the verification evidence** (the command output, the tool result, the snapshot), then **P1**, then **P2**, then any remaining items that need the user (signing keys, real-device battery testing, store screenshots). The app is shippable only when every P0 passes with evidence.
## Lessons learned / v-next candidates
- **v1 -> v2 (this pass).** v1 was a flat memory-jogger: no verification method, no severity, and missing the 2026 Play ship-blockers (16 KB pages, target-API gate, AAB + Play App Signing, themed-icon monochrome layer). It also hard-depended on an asset-library MCP and omitted whole categories (automated testing, static analysis). v2 adds severity ordering, a verification method per item, the ship-blockers, conditional asset use, an independent review step, and reference files for depth.
- Watch for the agent still eyeballing instead of running the verification command - if reports lack command output/snapshots, tighten the wording.
- Candidate: a machine-checkable subset (lint + tests + bundle + size) the MCP could run directly and diff between runs.
- Reference files date fast - re-check the Play target-API floor, the 16 KB deadline, and tool names each cycle.
## File map
android-polish/ ├── SKILL.md <- this file └── references/ ├── 01-ship-blockers.md <- 2026 Play submission gates ├── 02-testing.md <- unit + Compose UI + screenshot/a11y snapshots ├── 03-static-analysis-and-hygiene.md <- lint, detekt/ktlint, pruning, leaks, anti-patterns ├── 04-performance.md <- baseline+startup profiles, macrobenchmark, recomposition ├── 05-accessibility.md <- WCAG 2.2, semantics, tooling └── 06-release-and-security.md <- AAB, signing, shrinking, security hygiene
## Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- **Author:** [Mcgrass-ops](https://github.com/Mcgrass-ops)
- **Source:** [Mcgrass-ops/android-studio-pipeline](https://github.com/Mcgrass-ops/android-studio-pipeline)
- **License:** MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.