- Code: GPL-3.0-or-later (LICENSE, SPDX headers on all .kt/.aidl). Specs in docs/: CC-BY-4.0 (docs/LICENSE). Rationale in build-status.md; server decided GPL (not AGPL). - Root README for the public repo. - web/: Cloudflare Worker site for echo-lot.app. /apk resolves the newest APK from the Gitea latest-release API at request time (edge-cached 5 min), so tagging a release is the only publish step. /fdroid, /source, and a manual DOWNLOAD_URL fallback are wrangler vars. - .gitea/workflows/release.yml: tag-driven (v*) signed semver APK builds for the future production app in echolot-app/. Parked; the prober is deliberately not CI-built. - Fix UserService.kt: drop the explicit secondary constructor that conflicted with the implicit primary (never compiled before — first local build caught it). Prober now builds: :app:assembleDebug OK. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
64 lines
2.6 KiB
Markdown
64 lines
2.6 KiB
Markdown
# Echolot
|
|
|
|
Free software for detecting and debugging **local network issues** from an Android phone —
|
|
built for people who actually know what a neighbor table is.
|
|
|
|
Most "wifi analyzer" apps show you signal bars. Echolot aims at the layer where home and office
|
|
networks actually break: duplicate DHCP servers, broken IPv6 RAs, MTU black holes, NAT64 weirdness,
|
|
multicast that dies at the AP, DNS that answers differently than it should. It records what it
|
|
observed, separates observation from interpretation, and exports the whole run so you can argue
|
|
with it later.
|
|
|
|
**Status: pre-release.** The capability prober runs on real hardware; the production app and the
|
|
probe server are not built yet.
|
|
|
|
## Repository layout
|
|
|
|
```
|
|
docs/ design docs — the contract for everything below
|
|
echolot-prober/ capability prober: validates the no-root feasibility matrix on real devices
|
|
```
|
|
|
|
The Go probe server and the production app land here as siblings.
|
|
|
|
## Design docs
|
|
|
|
The three specs are draft-complete and reviewed; treat them as the contract.
|
|
|
|
| Doc | What it defines |
|
|
|---|---|
|
|
| [docs/feature-catalog-and-feasibility.md](docs/feature-catalog-and-feasibility.md) | Full feature list + the no-root feasibility matrix |
|
|
| [docs/measurement-schema.md](docs/measurement-schema.md) | Archived/exportable measurement JSON (observation vs finding, two-clock rule, anonymization) |
|
|
| [docs/probe-protocol.md](docs/probe-protocol.md) | Client↔server wire protocol (pinned TLS control plane, binary UDP data plane, STUN, canary DNS) |
|
|
| [docs/build-status.md](docs/build-status.md) | Running log of decisions and next steps |
|
|
|
|
## Privilege tiers
|
|
|
|
Every result records which tier produced it:
|
|
|
|
- **`app`** — no root, no special setup. The bulk of the functionality.
|
|
- **`shizuku`** — ADB-shell privileges via wireless pairing, no root. Shipped in v1.
|
|
- **`root`** — future optional module.
|
|
|
|
## Licensing
|
|
|
|
| Part | License | Why |
|
|
|---|---|---|
|
|
| All code (app, prober, server) | **GPL-3.0-or-later** | The value here is the platform-API research; copyleft keeps derivative apps free |
|
|
| `docs/` (the specs) | **CC-BY-4.0** | A wire protocol and a measurement format should be implementable by anyone, without license anxiety |
|
|
|
|
Full texts: [LICENSE](LICENSE) (GPLv3) and [docs/LICENSE](docs/LICENSE) (CC BY 4.0).
|
|
Sources carry `SPDX-License-Identifier` headers.
|
|
|
|
If you want to build a compatible server or client, the protocol and schema docs are deliberately
|
|
permissive — go ahead.
|
|
|
|
## Building
|
|
|
|
See [echolot-prober/README.md](echolot-prober/README.md). Short version, from `echolot-prober/`:
|
|
|
|
```sh
|
|
echo "sdk.dir=/path/to/Android/sdk" > local.properties
|
|
./gradlew :app:assembleDebug
|
|
```
|