MeshCore Wardrive Android App - Source Code
March 3, 2026 ยท View on GitHub
A Flutter-based Android application for mapping MeshCore mesh network coverage in real-time.
๐ฅ Download Pre-built APK
Latest Release: Download from Releases Repository
๐ Features
- Real-time GPS tracking with foreground service
- USB and Bluetooth connectivity for MeshCore companion radios
- Auto-ping functionality with configurable intervals (50m, 200m, 0.5 miles, 1 mile)
- Manual ping testing
- Success rate based coverage visualization with color coding
- Clickable coverage squares showing detailed statistics
- Repeater discovery and tracking
- Per-repeater coverage filtering
- Coverage gap finder for identifying dead zones
- Data export to JSON, CSV, GPX, and KML
- Share coverage map screenshots with stats
- Web map upload functionality (multi-site)
- Route trail with color-coded path
- Session history with notes and replay
- Offline map tile caching
- Heatmap overlay visualization
- Signal trend charts (RSSI, SNR, response time)
- Live speed display
- Repeater response time tracking
- Color blind accessibility modes
- Debug terminal with logging
- Light/Dark theme support
๐ ๏ธ Development Setup
Prerequisites
- Flutter SDK (3.10.0 or higher)
- Android Studio or VS Code with Flutter extensions
- Android SDK with API level 21+
- A MeshCore companion radio device (for testing)
Installation
- Clone this repository:
git clone https://github.com/mintylinux/Meshcore-Wardrive-Android-Source.git
cd meshcore_wardrive
- Install dependencies:
flutter pub get
- Generate app icons:
flutter pub run flutter_launcher_icons
- Run on connected device:
flutter run
Building Release APK
flutter build apk --release
The APK will be located at: build/app/outputs/flutter-apk/app-release.apk
๐ Project Structure
lib/
โโโ main.dart # App entry point
โโโ constants/
โ โโโ app_version.dart # Version constant
โโโ models/
โ โโโ models.dart # Data models (Sample, Coverage, Repeater, WSession)
โโโ screens/
โ โโโ map_screen.dart # Main map interface
โ โโโ debug_log_screen.dart # Debug terminal
โ โโโ debug_diagnostics_screen.dart # Advanced diagnostics
โ โโโ session_history_screen.dart # Session history viewer
โ โโโ signal_trend_screen.dart # Signal trend charts
โโโ services/
โ โโโ location_service.dart # GPS tracking & auto-ping
โ โโโ lora_companion_service.dart # LoRa device communication
โ โโโ database_service.dart # SQLite database
โ โโโ aggregation_service.dart # Coverage calculation
โ โโโ upload_service.dart # Web map upload
โ โโโ settings_service.dart # User preferences
โ โโโ meshcore_protocol.dart # Protocol implementation
โ โโโ debug_log_service.dart # Debug logging
โ โโโ persistent_debug_logger.dart # Persistent log storage
โโโ utils/
โโโ geohash_utils.dart # Geohash utilities
โโโ color_blind_palette.dart # Accessible color schemes
๐ง Configuration
Ping Intervals
Default ping interval can be changed in lib/services/location_service.dart:
double _pingIntervalMeters = 805.0; // 0.5 miles
Coverage Grid Precision
Grid size is set in lib/utils/geohash_utils.dart:
static String coverageKey(double lat, double lon) {
return geohash.GeoHash.encode(lat, lon, precision: 6); // ~1.2km x 610m
}
Ping Timeout
Timeout for ping responses in lib/services/location_service.dart:
timeoutSeconds: 20, // 20 second timeout
๐ Documentation
- LoRa Companion Guide - Device setup and connectivity
- MeshCore Auth Setup - Authentication configuration
- Quick Start - Getting started guide
๐งช Testing
Run tests with:
flutter test
๐ฆ Dependencies
Key packages:
flutter_map- Map displayflutter_map_cache- Offline tile cachingflutter_map_heatmap- Heatmap overlayfl_chart- Signal trend chartsgeolocator- GPS trackingflutter_foreground_task- Background serviceusb_serial- USB connectivityflutter_blue_plus- Bluetooth connectivitysqflite- Local databasegeohash_plus- Geohash encodingpointycastle- Encryptionshare_plus- Share screenshots & exportsscreenshot/saver_gallery- Screenshot capture
See pubspec.yaml for complete list.
๐ Known Issues
- Some Android devices may require "Location Always" permission for background tracking
- USB connectivity requires OTG cable and data-capable cable
- #meshwar channel must be joined in MeshCore app before first use
๐ค Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes with co-author line:
git commit -m "Add amazing feature Co-Authored-By: Your Name <your.email@example.com>" - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
๐ Credits
Built for the MeshCore mesh networking community.
๐ง Support
For issues and questions:
- Open an issue on GitHub
- Check existing documentation in the repository
Current Version: 1.0.30
Minimum Android Version: Android 5.0 (API 21)