Skip to content

ShadowDroid v1.3.0

Choose a tag to compare

@github-actions github-actions released this 28 Sep 15:36
· 6 commits to main since this release

ShadowDroid v1.3.0

This release adds fault injection, deeper Android Studio integration and
incremental UI reads. It also includes a full audit and a release-wide QA pass
with more than 90 reliability fixes since v1.2.0.

  • Fault injection: shadowdroid fault puts the device or app into 37
    failure conditions and undoes them reliably: network (airplane mode, network
    flaps, DNS failure), power (Doze, standby buckets, low battery), lifecycle
    (process death, don't-keep-activities), configuration (font scale, display
    size, locale, orientation), resources, interruptions (calls, SMS, PiP) and
    emulator-only kinds. Each fault records how to undo itself before touching the
    device, verifies it took effect, and shows up in watch and why.
    Proxy faults (http-errors, http-latency, bandwidth, connection-reset,
    truncated-response, tls-failure) mark every request they hit and pick
    requests from a seed. fault run replays seeded multi-step scenarios.
    See shadowdroid commands --guide faults.
  • Android Studio: layout snapshots link elements to their Compose source,
    layout recompositions can show only the nodes that recomposed, and layout
    commands open the device in Running Devices and turn on Layout Inspector
    themselves. studio status and debug status report installed and running
    plugin versions and which Studio internals the plugin can reach. Debugger
    steps wait for their pause, all suspended threads are listed, method,
    exception and Kotlin field breakpoints work, breakpoint files are found by
    name, and reads right after a pause wait for Studio to settle it instead of
    failing.
  • UI: ui dump --since <screen_hash> reports only what changed. Taps
    resolve focus on the intended target, and watch stdin taps accept selectors.
  • Network: captures record the HTTP version on both legs and the origin's
    content-encoding when the proxy decodes a body. HAR exports carry query
    strings, cookies and redirect URLs. curl exports replay HEAD requests, quote
    methods, never read local files named by a body, and flag replays that cannot
    resend the app's body. Upstream errors keep their cause, a crashed proxy
    daemon recovers, and net replay --clear stops serving fixtures.
  • Verification: journey steps retry a guarded action the server refused
    before injecting anything, instead of failing while the screen settles after
    text entry, and ui wait decides on a consistent snapshot. Commits that leave
    the verified sources unchanged no longer make results stale.
  • Safer defaults: interrupted operations quarantine a device only when a
    mutation's outcome is unknown, doctor without --fix is read-only and only
    repairs state ShadowDroid owns, cross-signed server installs recover
    automatically, and captured bodies, reports and logs are written owner-only.
  • Agent contract: more failures carry typed codes instead of the generic
    fallback, and usage errors name the missing arguments. Contradictory or no-op
    flags are refused rather than ignored, and a rule or override with no matcher
    warns that it hits all traffic. The catalog lists every guide topic and root
    flag.
  • Supply chain and release: the ADB client now speaks the ADB protocol
    in-tree, which removes adb_client and its rsa dependency, and
    cargo audit passes without exceptions. Releases publish only after CI
    passes on the tagged commit.

Compatibility: the root --session driver token is no longer a global flag.
Pass it before the subcommand (shadowdroid --session TOKEN ui dump), as the
documentation already did, or set SHADOWDROID_SESSION. Placed after a
subcommand it used to leak into that subcommand's own --session.

Fault injection changes real device settings; destructive kinds need
--allow-physical on a phone. Layout Inspector stays on after layout commands,
and Studio then injects its inspector agent into each app launch; turn it off
in Studio before timing- or crash-sensitive runs.

Validation includes 814 Rust tests, strict Clippy, Studio plugin tests, and an
API 36 emulator sweep across lifecycle, UI, apps, permissions, files, video,
debugging and watch. An isolated Android Studio ran debugger, logpoint and
layout checks. Every fault kind was injected, verified and cleared live, and
the fault contracts were checked. The verification, Android surface and
reliability end-to-end suites also passed.

Install or upgrade on macOS/Linux:

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/andriyo/ShadowDroid/releases/download/v1.3.0/shadowdroid-installer.sh | sh -s -- --version v1.3.0

Windows PowerShell:

powershell -ExecutionPolicy Bypass -c "irm https://github.com/andriyo/ShadowDroid/releases/download/v1.3.0/shadowdroid-installer.ps1 | iex"

Homebrew: brew upgrade andriyo/tap/shadowdroid. Scoop: scoop update shadowdroid
with the ShadowDroid bucket configured. APKs, agent AARs, Studio plugin, installers,
CLI archives, checksums and release provenance accompany this GitHub release.
Crates.io and IDE marketplace publication are separate distribution channels.