Library / SDK
OffGridPete/Fieldwatch avatar
OffGridPete/Fieldwatch

Fieldwatch, a receive-only Wi-Fi and Bluetooth LE observer for Android

Receive-only Wi-Fi and Bluetooth LE observer for Android. MIT.

2,694 stars311 forksKotlinMIT

At a glance

What is it?
Fieldwatch logs the Wi-Fi access points and Bluetooth LE advertisements one phone can hear, names them through a signature catalog the user controls, and keeps the record on the handset. The packaging is the interesting part: a sideloaded APK, no backend, and a certificate change that costs one reinstall.
Who is it for?
Fieldwatch fits a narrow job: recording which radios one Android handset can hear, naming them through a signature catalog the user controls, and turning a sit into a report without any server. It does not fit forensic work, because each phone's radios, firmware and scan quotas decide what ever gets logged.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 17 days ago.
What is it written in?
Mainly Kotlin, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 6, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What a phone can hear without a dongle or an account

Fieldwatch answers one narrow question: which Wi-Fi access points and Bluetooth LE advertisements this handset can pick up, and what devices are behind them. Its author built it as a personal tool to understand what was being used around him, used it for months, then shared it. Three constraints shape everything that follows. It only listens, it needs no dongle, no account and no backend server, and what it records stays on the handset. The stated goal was a tool that works offline in the field.

The audience is narrow too. This is not a spectrum analyser, it does not decode payloads, and it will not tell you what a device was used for. It is for someone walking a site, a rental or a street who wants the list of radios present, the ability to narrow that list down, and a written record of the result.

A signature catalog decides what gets a name

Raw radio observations only become useful when something turns them into a source. Fieldwatch does that with a signature library that ships as data rather than code, built so more radio sources can be identified and new ones added on the fly. The repository keeps two catalog files at once:

bash
dist/fieldwatch-signatures.json
dist/fieldwatch-signatures-v2.json

The first is labelled as the stock catalog for the 1.1.11 GitHub update and carries catalog number 77. The second is labelled for 1.1.12 and later, so the format changed once between those builds and the older file had to stay. Keeping it in the tree means a phone still running an older build has a catalog matching what it asks for, which is more care than most hobby projects manage. Signatures are user data too: Settings exposes Export signatures and Import settings, so a catalog you trust can be carried to a fresh install and brought back.

Filtering, sit reports and the debrief the app assembles

Named sources still have to be readable. The owner's goals are a modern interface, control over how information is displayed, and a filtering engine so he would not have to look at everything at once. Reports are a fourth piece: the app can produce a write-up of what was seen instead of leaving a raw list behind.

Two outputs do most of that work. A sit report covers one session, and Debrief assembles the write-up from it. AI Export generates a summary for a sit or for one radio. Both are described as hypotheses rather than identity, a legal finding, or a complete RF capture, so a report is a list of matches with GPS co-travel attached and nothing firmer than that. Privacy mode masks the screen and the sit reports when you hand the phone to someone else, but it changes nothing about what is stored behind them.

Sideloading the APK on Android 10 and later

Distribution is a folder, not an app store listing. The sideloadable file is `Fieldwatch.apk` inside `dist/`, next to the instruction card and the PDF manual, and the build in the tree targets Android 10 and later. There is no package index to install from.

Opening the file is the whole flow. Open `Fieldwatch.apk` from Files (or My Files), allow install from that app if Android asks, and do not rename it. Play Protect may warn that the app does not come from Play, and that warning is expected rather than a sign of a damaged download. On a computer, one line does the same work:

bash
adb install -r dist/Fieldwatch.apk

GitHub sometimes reports the APK as too large to preview in the browser, and the documented answer is to use Download. First launch shows a disclaimer and then the permission screen, with `instruction.txt` holding the full permission list and the first launch steps.

The certificate break that costs one reinstall

Android attaches a certificate to every app so a phone can tell whether an update came from the publisher it already has installed. Fieldwatch changed certificates once. Through 1.0.4 it was signed with the generic Android developer certificate that the build tools ship with, which people who scan sideloaded APKs flag because a public build should not look like a debug leftover. Build 1.0.5 was signed with an Off Grid Pete LLC certificate instead, and the fingerprint for comparison sits in `instruction.txt`.

That change costs the user a reinstall. A phone treats a new certificate as a different publisher, so 1.0.5 will not install over 1.0.4 or earlier, and uninstalling wipes added signatures, changed Settings, named radios and saved filter presets. Export those two files first, then remove the app:

bash
adb uninstall app.fieldwatch

Install the new APK, open it, tap through the disclaimer, then run Import signatures and Import settings. Those exports are neither the log nor GPS data, so settings can move without dragging location history along. Later builds reuse the same certificate, which is why the instructions promise no further uninstall for 1.1.21.

Read the version numbers in that block twice. The rename note says the app was called Spectre through 1.2.14 before becoming Fieldwatch under the application id `app.fieldwatch`, so the 1.0.4, 1.0.5 and 1.1.21 in one upgrade section cannot all sit on the same version line. The instructions are right about the procedure and vague about the numbering.

What the handset's own radios refuse to reveal

No capture tool can report what the hardware never delivered, and this project says so bluntly. There is no guarantee that trackers, cameras, tags, access points or any other device will be found, named or reported. Radios that are off, cellular-only, asleep, randomized, quiet, or outside what the handset's operating system exposes never appear at all. The stated reason is not a bug: every phone carries its own radios, firmware, scan quotas and OEM battery policies, and software cannot address any of those limits.

So a short report is a weak result, not a clean one. A quiet hour inside a metal clad building is not evidence that a floor stood empty. Pattern matches are guesses about a device class drawn from radio behaviour, and the GPS co-travel view, labelled Moving with you and possible tail, correlates two positions over time rather than proving a tracking tag is present. Debrief wording and AI Export output carry the same caveat.

Privacy mode hides the screen but not the coordinates

Privacy mode is a display control, not a storage control. Logs keep full coordinates even while the screen and the sit reports are masked, so the screenshot you can safely show is not the same artefact as the export file you hand to someone else. Four paths move those coordinates off the phone: Debrief, Share log, AI Export for a sit or one radio, and radio-detail Share as text.

There is a second asterisk on the offline story. Stamps stay on the handset until you share them and there is no Fieldwatch server, yet online place names come from the system geocoder, which is often the OEM or Google network rather than anything running locally. The README does not document a setting that forces offline reverse geocoding, so a phone carrying no Fieldwatch backend can still resolve a place name over the network once tagging is on.

Location data recorded here is this phone at hear-time, never the radio that was heard, and attribution to a specific other device is an inference layered on top of that stamp.

A hobby sideload you have to verify before trusting the file

Fieldwatch is MIT licensed, the per-build notes live in CHANGELOG.md, and the last push was on 2026-10-06. Only the builds published in this repository are official, and other builds or translations are not made or reviewed by Off Grid Pete LLC, which leaves a translated APK with no publisher fingerprint to compare against the one in `instruction.txt`. The work happens in one person's spare time and the owner says exactly that, so issue reports are the realistic route for both bugs and feature ideas.

Three checks pay off before the first sit: match the publisher fingerprint in `instruction.txt` against the file you downloaded, confirm the signature catalog you import fits your build line, and read a shared log once end to end to see the coordinates it carries.

Editorial conclusion

Fieldwatch fits a narrow job: recording which radios one Android handset can hear, naming them through a signature catalog the user controls, and turning a sit into a report without any server. It does not fit forensic work, because each phone's radios, firmware and scan quotas decide what ever gets logged. Before the first sit, check the publisher fingerprint in `instruction.txt` against the downloaded APK, match the signature catalog to your build line, and read one shared log end to end before sending it to anyone.

Frequently asked questions

Does Fieldwatch need an account, a backend or a dongle to work?

No. It is receive-only and passive, with no dongle, no account and no backend server, and everything lives on the phone. One caveat: online place names come from the system geocoder, which is often the OEM or Google network rather than anything local.

What changed when Spectre was renamed to Fieldwatch?

The app was called Spectre through 1.2.14, then was renamed Fieldwatch and given a new application id, `app.fieldwatch`. Installing Fieldwatch does not replace Spectre on a phone, the two are separate apps.

Why did upgrading from 1.0.4 or earlier require uninstalling first?

Through 1.0.4 the app used the generic Android developer certificate that the build tools ship with, and 1.0.5 was signed with an Off Grid Pete LLC certificate instead. Android treats a new certificate as a different publisher, so 1.0.5 will not install on top of 1.0.4. Later versions use the same certificate, so ordinary updates work again.

Will Fieldwatch find every tracker, camera or tag nearby?

No guarantee is given. Radios that are off, cellular-only, asleep, randomized, quiet, or outside what the handset's OS exposes will not appear, and each phone has its own radios, firmware, scan quotas and OEM battery policies. Pattern matches and GPS co-travel labels such as possible tail are hypotheses, not identity.

Does Privacy mode stop Fieldwatch from storing my location?

No. Privacy mode masks the screen and sit reports, but logs keep full coordinates. Debrief, Share log, AI Export for a sit or one radio, and radio-detail Share as text can take that path off the phone.

Official sources

  1. Issues
  2. License: MIT
  3. OffGridPete/Fieldwatch on GitHub
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/offgridpete-fieldwatch.svg)](https://hysenlabs.com/projects/offgridpete-fieldwatch)

Was this useful?