Files
sanderling/examples/sample-app/README.md
T
pj d0578dbaaa fix(runner): warn on malformed screen snapshot (#13)
* fix(runner): warn on malformed screen snapshot

screenFromSnapshot swallowed json.Unmarshal errors, so a non-string
screen value silently became "" in the step log and trace while the
verifier still saw the raw JSON. Return the error and warn at the
call site, matching the hierarchy warning pattern.

* docs: clarify --avd is optional for uatu test

The CLI accepts --avd as an empty-string default (cmd/uatu/main.go:49)
and only requires it when no device is connected and multiple AVDs
exist (cmd/uatu/android_env.go:63). Docs and examples that showed it
as required or always-passed were misleading.
2026-04-18 17:14:31 +07:00

1.4 KiB

uatu sample app

Tiny Android app wired to the uatu SDK, plus a TypeScript spec that drives it. Use it as a reference for integrating uatu into your own app.

Prerequisites

  • uatu CLI on PATH (see getting started)
  • Android SDK installed (uatu auto-discovers adb and emulator under $ANDROID_HOME, ~/Library/Android/sdk, or the Homebrew cask; nothing to export if you use a standard install)
  • just task runner

Install the app

just install

Run a test

just test

If no device is connected, uatu boots the single AVD it finds. With multiple AVDs, pick one:

just AVD=Pixel_7 test

Persistent settings can live in .env alongside the justfile:

AVD=Pixel_7
DURATION=5m

Traces land in ./runs/<timestamp>/.

How the pieces connect

  • android/build.gradle.kts depends on io.github.priyanshujain:sdk-android from Maven Central
  • android/src/main/kotlin/.../SampleApplication.kt calls Uatu.start(this) and registers snapshot extractors (app_state, click_count)
  • spec.ts imports @uatu/spec (see package.json), reads those snapshots, asserts properties on them, and weights the actions the fuzzer picks from
  • just test invokes uatu test against the installed APK on the connected device (or the AVD named via AVD=)