AppGuard
AppGuard

Know when your app is running somewhere it shouldn't.

AppGuard is an Android library that detects repackaging, root, emulators, attached debuggers and hooking frameworks — and lets you decide, per check, whether that is fine, worth reporting, or a reason to stop.

Three answers, not two

Most integrity libraries give you a boolean: the check runs or it doesn't. That forces an awkward choice, because the conditions worth detecting in production — an attached debugger, an emulator — are the everyday conditions of development. AppGuard makes the response a per-check, per-build-type decision.

ALLOWED

The check does not run. Nothing detected, nothing emitted, no runtime cost. For what is normal in a given build.

WARNING

Runs and publishes an event keyed by check. Your app logs it, reports it, or degrades a feature — and keeps running.

ENFORCED

Publishes the event, then throws and terminates the process. For the build that ships.

What it checks

SignatureThe APK signing certificate is not whitelisted — the app has been repackaged.
RootRootBeer signals, Magisk installed or running, permissive SELinux.
HookingFrida, Xposed and similar instrumentation, detected from Kotlin and from native code.
DebuggerA Java or native debugger attached, or the build flagged debuggable. Claims the ptrace slot at startup when enforced.
EmulatorRunning on an emulator rather than physical hardware.
InstallerInstalled by something other than a trusted store.

Checks re-run on a randomised schedule while the app is in the foreground. A fixed interval is a gap an attacker can time; the delay is drawn from a cryptographic RNG so there is no reliable quiet period.

Built to be hard to remove

Native detection

Frida detection, library checksums and the anti-ptrace claim live in C, not Kotlin — harder to find and harder to patch than a bytecode branch.

Minimal public surface

The bundled R8 rules keep as little as possible. Every unobfuscated symbol in a security library is a signpost pointing at the method to hook.

Fails closed

An unreadable signature, an unparseable policy, an error mid-check — all treated as a finding, never as a pass.

Pricing

Licensed per application ID. One licence covers your production ID and its environment suffixes — .qa, .uat, .test — so the whole pipeline runs on one key.

Development

Free

Evaluation and non-production builds. Every check, no feature limits. 3 months, renewable.

Startup

€100 / year

Production use for apps under 10,000 users. 12 months, email support.

Enterprise

€1,000 / year

Production use for apps at 10,000 users or more. 12 months, priority support.

Prices include VAT and are per application ID. Billing is in euro; the request form shows an indicative conversion to your currency.

The Gradle plugin verifies a licence offline, so your builds work with no network and no call home. A build whose application ID is not covered fails at configuration time.

Requirements

minSdk30
Android Gradle Plugin8.0 or newer
Gradle8.4 or newer, on JDK 17+
ABIsarmeabi-v7a, arm64-v8a, x86_64

Native code ships prebuilt in the AAR — you do not need the NDK or CMake to consume it.