Android · installed from a file, not a store
The app that makes the evidence.
Everything else in Warrant reads records. This is the surface that writes them — the camera, the on-device redaction, the Bluetooth instrument read, the gate that will not let a step past without the proof it asked for. It is a real Android app, and until it is on Play you install it the way you install any APK.
The latest build
Nothing is attached to a release on mattrickslauer/warrant that a phone could install. The source builds — the two commands are below — and this page will show the file the moment a release carries one, with no redeploy.
Installing it
Open this page on the phone and tap the button. Everything below happens once, and only for this browser.
- The download lands in Downloads. Tap the notification, or open the file from the Files app.
- Android will say the browser is not allowed to install unknown apps. That prompt is expected — it appears for every app not fetched from a store. Tap Settings, turn on Allow from this source, and come back.
- Play Protect will offer to scan the file. Let it. It has never seen this app before, so it may still warn you afterwards; Install anyway is the button that continues.
- On first run the app asks for the camera, and for nearby-devices if you are pairing an instrument. Both are refusable — a step that needs one says so rather than failing quietly.
Settings → Apps → Special access → Install unknown apps. Leaving a browser able to install anything it downloads is a worse posture than the one you started with, and this app does not need it again.
Checking the file is the file
A checksum appears here when the release carries one. Until then, the honest check is the one below: build it yourself and install what you built.
The build is unsigned by any authority you have reason to trust — there is no Play signature behind it and no notarisation. Install it because you read the source, or because you built it. That is the whole of the trust story, and this page is not going to dress it up.
What it needs
Below that it will not install at all — the platform refuses before the app runs.
Evidence capture and the on-device face redaction. Refusable; steps that need a photograph say so.
Only to pair an instrument. Without it the app still runs — a value you type is asserted rather than measured, and the record says which.
For the agents. Capture works offline; the verdicts do not.
What is real and what is scripted
The app says this on screen too. A demo that looks like production is how somebody gets misled, so the fixture banner at the top of a job is not decoration.
| Real | Camera capture, on-device face redaction, BLE scan / connect / GATT read, driver decoding, the tier refusal, the Seal and the Gate |
| Scripted | Agent verdicts, their rationales and their costs — played from data/Fixtures.kt on a clock |
| Not built | Google sign-in, the network layer, Play Integrity attestation, plate redaction, speech-to-text on spoken reasons |
Building it yourself instead
Two commands, JDK 17 and an Android SDK with platform 35. local.properties points at the SDK and is not committed.
git clone https://github.com/mattrickslauer/warrant.git cd warrant/android ./gradlew assembleDebug adb install -r app/build/outputs/apk/debug/app-debug.apk
The debug build installs alongside a downloaded one — its application id carries a .debug suffix — so you can hold both and compare them.