android-emulator
Android emulator (Flutter)
A bash helper that wraps adb and the qemu emulator console so an AI agent can see (screenshots, accessibility tree) and act on (tap, long-press, swipe, pinch) a Flutter app running on an Android emulator. Computer-use APIs cannot reach the emulator window (qemu has no macOS app bundle), and adb shell input is single-touch only — this script bridges both gaps.
When to use this
The user wants to launch, debug, smoke-test, QA, or screenshot a Flutter app on Android. Reach for this skill before resorting to coordinate-guessing, manual screenshotting via DevTools, or asking the user to run flutter run themselves.
Setup
The script assumes a working Android SDK install (with adb and emulator on $PATH or in ~/Library/Android/sdk/ / ~/Android/Sdk/), at least one AVD created, and Flutter (or fvm) installed. macOS-only utility: sips (used to resample screenshots — ships with macOS). On Linux, swap in convert from ImageMagick if porting.
The script is at scripts/emu.sh relative to this skill. Once the skill is wired into your project (see README.md), agents call it with that relative path.
Quick start (cold boot to interactive)
More from chunkytofustudios/flutter-skills
design-polish
Polish a Flutter app's screens — visual hierarchy, typography, color and contrast, spacing, section clarity. Reads a reference screen first to lock in the app's existing design tone, then drives the running app on an Android emulator via the `android-emulator` skill (screenshots, taps, swipes), makes targeted widget and `ThemeData` edits, and spawns an independent evaluator sub-agent to score design quality, originality, craft, and functionality. Use this skill whenever the user wants to improve, polish, refine, critique, audit, or tighten the visual design of a Flutter screen — even when they don't say "polish" (e.g. "make this look better", "fix the layout on settings", "tighten up the home screen", "this screen feels off", "review the UI", "design pass", "make it less generic", "feels too Material default"). Skip for non-Flutter UIs, feature work, or routing/functionality changes.
12preview-widget
Preview a single Flutter widget in isolation using the built-in Flutter Widget Previewer (`flutter widget-preview`) — wires up a project-specific `previewWrapper` so the widget renders against the app's real theme and providers, launches the local preview server, and lets the agent take headless-Chrome screenshots of the live preview while a human follows along in their own browser. Use whenever the user wants to design, iterate on, dogfood, share, audit, or sanity-check a standalone Flutter widget — even when they don't say "previewer" (e.g. "let me see the new button", "show me dark mode for this card", "throw this widget on a preview", "iterate on the empty state", "preview just the badge", "what does this look like at tablet width"). For full-screen design polish on a running app, use `design-polish` + `android-emulator` instead. Skips — non-Flutter UIs, full-app QA flows, projects on Flutter < 3.35.
10symbolize-android-stacktrace
De-obfuscate (symbolize) an Android crash or ANR stacktrace exported from the Google Play Console for a Flutter app whose release build came from Codemagic CI/CD — fetches the matching `android_native_debug_symbols.zip` and `<AppName>_<N>_artifacts.zip` from Codemagic, then resolves every `pc 0x…` native frame and obfuscated Flutter frame to file:line via `llvm-addr2line`. Use whenever the user has a stacktrace (.txt/.log/pasted text) and wants to know which line of code crashed, even if they don't say "symbolize" — e.g. "what's causing this ANR?", "debug this Play Console crash", "translate this stack", "resolve these pc 0x… frames", "Codemagic build N crashed, here's the trace". Skips — iOS/dSYM symbolication, non-Codemagic builds (no symbol upload step), Crashlytics-only Dart exceptions with no native or Flutter frames.
10