android-buildlisted
Install: claude install-skill nikzlabs/shipit
# Android build, test & preview
The Android toolchain is **baked into every session container** — JDK 17, the
Android SDK, and Gradle 8.7 are always on `PATH`. A repo declares **nothing** to
build (no `shipit.yaml` Android fields). Full command reference and env paths:
**`/shipit-docs/android.md`** — read it for anything not covered here.
There are two surfaces: **headless** (build/lint/test/snapshot — this container,
no device) and **a running app** (an emulator Compose service over `adb`).
## Find the Gradle root first
Run Gradle from the dir with `settings.gradle(.kts)` + `gradlew`. In a monorepo
(web app + an `android/` module) just `cd` into it. If there are several Android
app modules, flavors, or Gradle roots, list them and pick — or ask the user which
to target. Don't guess off stray `.gradle` files.
```bash
cd android
./gradlew projects # modules
./gradlew tasks --all # available tasks (snapshot task names vary by library/variant)
```
## The core loop: build → lint → snapshot
```bash
./gradlew assembleDebug # did I break the build?
./gradlew lint # manifest/resource/accessibility + edge-to-edge/inset checks
./gradlew test # JVM unit tests (+ Robolectric if used)
```
Prefer the committed `./gradlew` (pins the Gradle version). It downloads its dist
once per fresh container; run the baked `gradle` to skip that if needed.
**Reading the output is most of debugging** — compile errors, lint findings, and
test stack traces are in t