Repository navigation
ShadowDroid v1.3.0
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 faultputs 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 inwatchandwhy.
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 runreplays seeded multi-step scenarios.
Seeshadowdroid commands --guide faults. - Android Studio: layout snapshots link elements to their Compose source,
layout recompositionscan show only the nodes that recomposed, and layout
commands open the device in Running Devices and turn on Layout Inspector
themselves.studio statusanddebug statusreport 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, andwatchstdin 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, andnet replay --clearstops 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, andui waitdecides 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,doctorwithout--fixis 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 removesadb_clientand itsrsadependency, and
cargo auditpasses 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.0Windows 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.