Hi everyone,
Tower (DroidPlanner) has been unmaintained since around 2016 and no longer installs or runs on current Android. We spent some time bringing it back and would like to share it with the community.
Repository: GitHub - nomar2/Tower: Tower is a Ground Control Station (GCS) Android app for UAVs running ArduPilot · GitHub
Debug APK: see the Releases page of the repo
It is a fork of DroidPlanner/Tower, still GPLv3, with the original credits preserved (Arthur Benemann, Fredia Huya-Kouadio and the Tower contributors, with DroneKit-Android underneath).
What we changed
Builds and runs on Android 8–16
- Modern toolchain: Gradle 8 / AGP 8 / Kotlin 1.9 / Java 17 / AndroidX,
compileSdk 36,targetSdk 34, ABI-universal APK. - Fixed the startup crashes and the touch/ANR freeze (notification channels,
PendingIntentflags, foreground-service types, a main-thread location call that hung forever, runtime permissions, scoped storage). - Fixed the crashes on Connect and on flight-mode change.
MAVLink 2
- The bundled MAVLink stack now parses
0xFDframes (incompat/compat flags, 3-byte message id, signature skipping) and auto-negotiates MAVLink 2 on transmit once the peer speaks it. MAVLink 1 links are unaffected.
Improved GUIDED follow-me
- The stock follow forwarded raw GPS fixes as position-only GUIDED targets at ~1 Hz, so the copter braked at every point and trailed behind. Reworked: alpha/beta filter over position and ground velocity, setpoints streamed at 5 Hz with dead-reckoning between fixes, position and velocity sent, short lead-ahead prediction. Location acquisition moved to the modern
FusedLocationProviderClient.
Other
- “Reboot flight controller” action in the connected menu (slide-to-confirm).
- Removed dead integrations: Baidu Maps, the Droneshare upload service and account UI, Google Analytics, the Weather Underground widget. The local TLog viewer is kept.
Full changelog and roadmap are in the repo.
Testing status — please read
- Connects to a real vehicle over UDP and USB serial — tested, works.
- Bluetooth (SiK-style radios) has not been re-checked yet.
- Everything else is verified against a MAVLink simulator and on an Android 16 emulator — not yet flown end-to-end on hardware.
- The follow-me is verified at the command-stream level; the flight tuning may need adjusting on a real copter.
- MAVLink 2 signing: receive only (signature ignored), no signed transmit.
targetSdkis 34 for now.
So please fly-test it carefully. We would really appreciate feedback from anyone willing to try it — especially on real hardware, Bluetooth links, and follow-me behaviour.
Note: the released APK ships without a Google Maps key, so the map will not render. If you build from source, add your own key in local.properties (MAPS_API_KEY=...).
Thanks,
Ramón José Moreno & Alejandro Moreno


