A ground station that fits in a hand.
The app is real and it flies: 143 Kotlin source files, video, flight control, mission upload and calibration wizards. What does not exist yet is a way for you to get it without a toolchain. There is no signed release, no Play Store listing and no F-Droid manifest, so the honest install path today is a source build.
INSTALL
Source build, and we are not going to pretend otherwise
Continuous integration builds a debug APK on every push and keeps it for two weeks. That is an artifact for contributors, not a distribution, so this page does not offer you a download button.
$git clone https://github.com/altnautica/ADOSAndroidGCS
cd ADOSAndroidGCS
./gradlew assembleDebug
adb install app/build/outputs/apk/debug/app-debug.apk- Package
- com.altnautica.gcs
- Version
- 0.1.6
- Minimum Android
- 10 (API 29)
- Architecture
- arm64-v8a
- Toolchain
- JDK 17, SDK 35
- License
- GPL-3.0-only
WHAT IT DOES
Thirteen screens, built for one aircraft at a time
This is a pilot's app. It is deliberately single-node: one base URL, one vehicle, everything on the glass.
Fly
Live video with a HUD, arm and disarm, mode selection, takeoff, land and return to launch, a telemetry dashboard, a gimbal joystick and gyro control, camera switching and recording, plus a gamepad overlay and voice commands with a confirmation step.
Plan
A mission planner with a waypoint editor and survey configuration, mission upload over MAVLink, a geofence editor with upload, and follow-me.
Configure
The full flight-controller parameter list with an editor sheet, and accelerometer, compass and level calibration wizards on the tablet.
Ground station
A panel for the ground node: signal meter, packet-loss graph, diversity-receive statistics, and the radio channel, transmit power and FEC settings.
Log
Flight history from a local database, per-flight detail, and a telemetry log written to the device with microsecond timestamps so a flight can be reviewed with the network down.
Agriculture
A spray planning suite with its own mission generator, for the one vertical where a tablet in a field is the whole workflow.
CONNECTING
Four ways to reach the aircraft
The app looks for a node over mDNS with a three-second timeout and falls back to the access point address, so joining the ground station's WiFi and opening the app is usually the whole pairing flow.
- Discovery
- mDNS, _ados._tcp
- Control
- REST over the node's HTTP API
- Telemetry
- raw MAVLink over WebSocket
- Ground station AP
- SSID prefix ADOS-GS-
- Direct radio
- USB WiFi dongle, on-device
- Direct serial
- USB to flight controller
Pairing itself is a probe for the node's pairing info followed by a claim posting the local operator id; the credential is stored on the device and injected on later requests. Unpairing forgets the local key. The two direct paths are the interesting ones: the app bundles the radio driver and speaks to a USB WiFi dongle on the tablet, and it will take a USB serial cable straight to a flight controller with no node in the middle.
PARITY
Against the browser ground station
Neither one is a subset of the other. The tablet wins on direct hardware reach; the browser wins on everything fleet-shaped.
| Android | Mission Control | |
|---|---|---|
| Live video and HUD | ✓ | ✓ |
| Flight control and modes | ✓ | ✓ |
| Mission and geofence upload | ✓ | ✓ |
| Parameter editing and calibration | ✓ | ✓ |
| Radio link stats and settings | ✓ | ✓ |
| USB radio dongle on the device | ✓ | — |
| USB serial to the flight controller | ✓ | ✓ |
| On-device telemetry log | ✓ | — |
| Multi-node fleet console | — | ✓ |
| Extension panels | — | ✓ |
| Configuration panel library | parameters only | 78 panels |
| Log and audit queries | — | ✓ |
Live video and HUD
Flight control and modes
Mission and geofence upload
Parameter editing and calibration
Radio link stats and settings
USB radio dongle on the device
USB serial to the flight controller
On-device telemetry log
Multi-node fleet console
Extension panels
Configuration panel library
Log and audit queries
KNOWN GAPS
What is not there yet
No signed release
The release build type enables minification but declares no signing configuration, so a release build comes out unsigned. Until that changes there is nothing to publish to a store.
Offline map tiles download but do not render
There is a working tile downloader with a 500 MB cap and oldest-pack eviction, and nothing reads the packs back: both map views use a live tile source. Treat offline maps as unfinished rather than shipped.
Fleet telemetry is not MQTT yet
The cloud telemetry client opens a plain WebSocket and sends a JSON subscribe frame. It is not speaking the MQTT protocol, despite the dependency being present, so do not plan an integration around that.
No extension surface
Extensions are a Mission Control and drone-agent concept. The Android app has no plugin host, so an extension's panel does not appear here.