An in-app inspector for Android. Network traffic, response mocking, storage, background work, crashes and a live logcat tail — inside your own debug builds. No proxy, no certificate, no desktop client, no adb cable.
dependencies {
debugImplementation("io.github.appinspect:appinspect:1.0.0")
releaseImplementation("io.github.appinspect:appinspect-no-op:1.0.0")
}That's the whole setup. AppInspect initialises itself through AndroidX Startup — no Application
subclass, no manifest change, every panel on by default. Open it by shaking the device, from the
launcher shortcut, a long press, or AppInspect.open(context).
Network capture is the one thing you wire up: add .addAppInspectInterceptor() to your
OkHttpClient builder, last in the chain.
- 📖 Documentation — install guide, panel reference, security model
▶️ Sample app — a real Android project with the library wired in. Clone, run, see everything in five minutes.- 📦 Maven Central —
io.github.appinspect
| Network | Every OkHttp call, with filters and full-text search. Export as cURL, .txt, or HAR 1.2. |
| Mocks | Replace any live response — status, headers, body, delay, simulated timeout. Build a rule from a captured call, or commit a shared mocks.json. |
| Storage | SharedPreferences (encrypted ones decrypted for viewing), Jetpack DataStore, SQLite and Room with an optional SQL console. |
| WorkManager | Every persisted work spec with state, constraints, attempts, backoff, input/output data and last stop reason. |
| Crashes and ANRs | Uncaught exceptions captured before the process dies; ANRs and native crashes reported on next launch (Android 11+, with the OS thread dump). |
| Logcat | Live, filterable tail of your own process. No cable, no permission, nothing written to disk. |
| Runtime | App, device and session metadata — the details a bug report always asks for. |
| Value viewer | Full-screen JSON tree for any large payload, from any panel. |
Release builds depend on appinspect-no-op: roughly 8 KB, four classes that do nothing, a manifest
with no components and no permissions, and no reference to any android.* API. Your code still
compiles against it — there is simply no inspection code in the APK.
That's verified, not just intended: the release pipeline opens the packaged artifact and blocks publishing if a component, permission, resource or unexpected class has crept in.
A second, independent layer covers a mis-wired dependency. Even the full library checks whether the
build is debuggable, and turns itself off if it isn't — no database, no crash handler, nothing
captured, every open() refused.
- Android 7.0+ (API 24). ANR and native crash detection need Android 11+.
- No Compose or Kotlin required in your app — the Compose UI is precompiled into the artifact. View/XML and Java-only hosts work unchanged.
- Works in staging, UAT and internal-test variants — AppInspect looks at whether the build is debuggable, not at variant names. One line opts in a non-debuggable variant.
- Nothing leaves the device. No telemetry, no network calls of its own, no account.
- No root, no special permissions.
Built and maintained by Suryansh Prajapati. Suggestions, bug reports and doc corrections are welcome.
Apache License 2.0