google flavor 未配置 MAPS_API_KEY 时构建仍能成功,但地图瓦片无法加载;debug 与 release 版本可并存安装,但不要同时运行,需先强制退出另一个;google flavor 含 Google Maps、Firebase Crashlytics、Datadog 和 Google AI 功能,fdroid flavor 不含这些

Meshtastic-Android
meshtasticGPL-3.0活跃维护Meshtastic 的 Android 客户端,通过蓝牙连接 LoRa 设备,在无蜂窝网络时也能收发加密消息、共享 GPS 位置并查看地图。
Android application for Meshtastic
从 GitHub Releases 下载 APK 安装,或配合 Obtainium 自动更新;本地构建 google flavor 需在仓库根目录创建 secrets.properties 并设置 MAPS_API_KEY=…README 未说明硬件要求;这是 Android 应用,需配合 Meshtastic 开源 mesh 电台使用,另提供 Compose Desktop 桌面版安装包
Meshtastic 官方 Android 客户端,用手机连接开源 mesh 电台收发消息
Meshtastic 的 Android 客户端,通过蓝牙连接 LoRa 设备,在无蜂窝网络时也能收发加密消息、共享 GPS 位置并查看地图。
核心能力
- 发现周边 mesh 节点与频道,并通过 Mesh Beacon 邀请入网
- 在地图上绘制航点地理围栏,节点越界时告警
- 加密备份、恢复与删除设备安全密钥
- 把共享联系人和频道写入 NFC 标签
- 显示 XEdDSA 数据包签名状态,并读取 PM1.0/PM2.5/PM10/CO₂ 空气质量遥测
容易踩的坑
- snapshotSnapshot 29322999 (e6db1a2c3c1ef97e3190114830ba04d9621b93b0)pre-release2026-11-09 · 2026-11-09 19:40 UTC
查看更新说明
Automated debug build from the latest commit on
main(e6db1a2c3c1ef97e3190114830ba04d9621b93b0), versionCode 29322999. Unsigned/debug-keyed, F-Droid and Google flavors. Not for production use — this release is replaced on every push to main.Also includes unsigned desktop installers (macOS .dmg, Windows .msi/.exe, Linux .deb/.rpm/.AppImage) built from the same commit, when that platform's build succeeded.
Obtainium: enable Include prereleases. Each build's APK filename carries the versionCode, so updates are detected.
- v2.8.4v2.8.4 (29322943)最新正式版2026-11-04 · 2026-11-04 23:39 UTC
Highlights
A node's 3D model with its live screen, and the mesh in AR. Quick Settings tile, Live Update notifications, Node Tracker widget. Local node names. Stacked nodes draw as one chip. Traceroutes to you. MQTT topics near you. Per-install TAK certificates.
What's Changed
🏗️ Features
- feat(node): view a device's 3D model, and place it in AR on the google flavor by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7639
- feat(map): AR mesh view by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7659
- feat(map): mesh view pictures, track direction and time fade, barometric height by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7719
- feat(node): swap Chirpy into the device model viewer by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7722
- feat(map): take mesh view pictures through a CameraX overlay effect by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7726
- feat(service): add a Quick Settings tile for the radio connection by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7662
- feat(notifications): Live Update for mesh status or a tracked node by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7664
- feat(widget): add a Node Tracker home-screen widget by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7665
- feat(tak): generate TAK certificates per install by @niccellular in https://github.com/meshtastic/Meshtastic-Android/pull/7731
- feat(nodes): local display names by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7763
- feat(map): draw nodes at one spot as one counted chip on both maps by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7762
- feat(node): list traceroutes other nodes ran to us on our own node by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7764
- feat(debug): live device screen mirror with remote control (protobufs #1054) by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/6987
- feat(firmware): pick the bootloader image by target under a shared Board-ID by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7805
- feat(firmware): show the bootloader's Last-Fault line from INFO_UF2.TXT by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7804
- fix(firmware): reset-prime a dropped Legacy DFU only on bootloaders before 2.6.0 by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7806
- feat(node): compact layout improvements by @vpolevikoff in https://github.com/meshtastic/Meshtastic-Android/pull/7802
- feat(node): the connected device's live screen on its 3D model by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7651
- feat(connections): pair with a PIN from a connect link by @jp-bennett in https://github.com/meshtastic/Meshtastic-Android/pull/7856
- feat(firmware): offer recovery for the last BLE node found stranded in its bootloader by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7842
- feat(node): metrics voltage chart scale start at 3V by default by @vpolevikoff in https://github.com/meshtastic/Meshtastic-Android/pull/7858
- feat(widget): one branded design and real cell sizes for both widgets by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7862
- feat(database): log who holds the Room connection when an acquire times out by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7875
- feat(map): label Google map clusters with their exact count by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7896
- feat(notifications): say where the Live Update shows and let it be stopped in place by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7901
🖥️ Desktop
- fix(cove
- v2.8.3v2.8.3 (29322724)2026-10-19 · 2026-10-19 20:46 UTC
查看更新说明
Highlights
Radios on firmware older than 2.5.14 stay connected and lead straight to the firmware update, which is now required. Back up and restore the app database. Failed messages resend in place. Reactions get their own notification channel. Radio settings open without a radio, and search lands on the setting. Site Planner coverage runs on the phone. Many stability fixes.
What's Changed
🏗️ Features
- feat(network): a hidden showcase scenario for Demo Mode by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7377
- feat(app): shell-only debug launch switches for onboarding and the trust dialog by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7375
- feat(settings): raise the coding rate over a modem preset by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7405
- feat(firmware): show installed vs latest bootloader before an upgrade by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7409
- feat(auto): notification messaging on Android Auto by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7417
- feat(map-maplibre): start with collapsed attribution strip on seconda… by @Tha14 in https://github.com/meshtastic/Meshtastic-Android/pull/7424
- perf(store-screenshots): wait for the map to draw instead of a fixed 45 seconds by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7501
- feat(desktop): add draggable scrollbars to node and message lists by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7506
- feat(notifications): post reactions on their own channel by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7507
- feat(admin): add Reboot into DFU mode admin action for nRF52 nodes by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7504
- feat(remote-shell): mesh terminal for the firmware DMShell module by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/6862
- feat(firmware): play Chirpy Hop while a firmware update runs by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7545
- feat(settings): schema labels for presets and regions, keyword search, diy_only pins by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7544
- feat(map): route MapLibre's log through Kermit on desktop by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7606
- feat(settings): let radio settings be opened and read without a radio by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7621
- feat(connections): keep an old radio connected and gate the app on the firmware update by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7623
- feat(settings): region preset fallback and fixed-precision override frequency by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7626
- feat(connections): show the LoRa preset and region on the connected radio card by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7625
- feat(settings): land a search result on the control it names by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7627
- feat(settings): color picker and swatch for ambient lighting by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7619
- feat(desktop): reactions and new waypoints notification toggles by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7624
- feat(settings): back up and restore the app database by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7629
- feat(node): record observed and inbound traceroutes in the node's history by @jamesarich in https://github.com/meshtastic/Meshtastic-Android/pull/7643
🖥️ Desktop
- fix(mqtt): remove noop mqtt to allow the mqtt proxy to work on the desktop builds by @Tha14 in https://github.co
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
The Meshtastic client for Android and Compose Desktop — an app for communicating over open-source mesh radios. For more information see our webpage: meshtastic.org. The device-side code lives in the firmware repository.
If you have questions or feedback please Join our discussion forum or the Discord Group. We would love to hear from you!
Features
Highlights of the 2.8 line:
- Mesh network discovery to surface nodes and channels around you, with Mesh Beacon invitations for joining nearby meshes.
- Waypoint geofences — draw zones on the map and get alerts when nodes cross them.
- Secure key backup — encrypted backup, restore, and delete for your device security keys.
- NFC sharing — write shared contacts and channels to NFC tags.
- XEdDSA packet signing indicators in the node and messaging UI.
- Air-quality telemetry — PM1.0, PM2.5, PM10, and CO₂ readings from supported sensors.
- App Functions / system-AI integration so on-device assistants can trigger common workflows.
Get Meshtastic
The fastest way to get releases is GitHub releases; pair them with Obtainium for automatic updates.
With Obtainium installed, tap a link below on your phone to set it up with everything pre-configured. The google flavor adds Google Maps, Firebase Crashlytics, Datadog and the Google AI features; fdroid has none of them.
| Channel | google flavor | fdroid flavor |
|---|---|---|
| Latest release | Add | Add |
| Open beta | Add | Add |
What those two channels point at right now:
| Channel | Currently | Released |
|---|---|---|
| Latest release | v2.8.4 | 2026-11-04 |
| Open beta | none published right now | — |
Closed-beta and per-commit snapshot channels, importable config files, and the setup details are in Test Builds & Obtainium. These links, files and the table above are generated — see obtainium/.
These providers are also available but may update more slowly.
Google Play is the last of these to update. To join the Play Store testing program, opt in to become a tester. If you encounter any problems or have questions, ask us on the discord, create an issue, or post in the forum and we'll help as we can.
Desktop
Meshtastic Desktop installers (macOS DMG, Windows MSI/EXE, Linux DEB/RPM/AppImage) are available from GitHub Releases. A Flatpak is available on Flathub (packaging repo: flathub/org.meshtastic.MeshtasticDesktop).
Documentation
Both sites are published to GitHub Pages. The site root carries the docs of the latest production release, /main/ is rebuilt from main whenever a push changes the docs, and /api/ is rebuilt from main daily and on each production release.
| Site | URL | Contents |
|---|---|---|
| User & Developer Docs | meshtastic.github.io/Meshtastic-Android | Jekyll site with the user and developer guides |
| API Reference | meshtastic.github.io/Meshtastic-Android/api | Dokka-generated KDoc for all public APIs |
Generating Locally
User & Developer Docs (Jekyll):
./gradlew publishDocsSite -Pdocs.channel=root
BUNDLE_GEMFILE=docs/Gemfile bundle exec jekyll serve \
--source build/_site --baseurl ""
API Reference (Dokka):
./gradlew :dokkaGeneratePublicationHtml
# Output: build/dokka/html/index.html
Architecture
Modern Android Development (MAD)
The app follows modern Android development practices, built on top of a shared Kotlin Multiplatform (KMP) Core:
- KMP Modules: Business logic (
core:domain), data sources (core:data,core:database,core:datastore), and communications (core:network,core:ble) are entirely platform-agnostic, targeting Android and Compose Desktop. - UI: JetBrains Compose Multiplatform (Material 3) using Compose Multiplatform resources.
- State Management: Unidirectional Data Flow (UDF) with ViewModels, Coroutines, and Flow.
- Dependency Injection: Koin with Koin Annotations (K2 Compiler Plugin).
- Navigation: JetBrains Navigation 3 (Multiplatform routing with RESTful deep linking).
- Data Layer: Repository pattern with Room KMP (local DB), DataStore (prefs), and Protobuf (device comms). Protobuf models are consumed from the upstream
org.meshtastic:protobufsMaven artifact, pinned ingradle/libs.versions.toml.
Bluetooth Low Energy (BLE)
The BLE stack uses a multiplatform interface-driven architecture. Platform-agnostic interfaces live in commonMain, utilizing the Kable multiplatform BLE library to handle device communication across all supported targets (Android, Desktop). This provides a robust, Coroutine-based architecture for reliable device communication while remaining fully KMP compatible. See core/ble/README.md for details.
Module Documentation
Most modules have their own README with details on their responsibilities, API surface, and internal design.
| Module | Description |
|---|---|
| androidApp | Android application host — activity, manifest, flavors, root Koin graph |
| desktopApp | Compose Desktop host — window, transports, packaging |
| core/domain | Business-logic use cases (radio config, sessions, exports) |
| core/repository | Data & infrastructure contracts (RadioTransport, NodeRepository, ServiceRepository) |
| core/takserver | Meshtastic ↔ TAK (ATAK/iTAK) bridge — CoT server & conversion |
| core/ble | Multiplatform BLE transport (Kable) |
| core/network | Internet comms: firmware metadata, map tiles, radio transports |
| core/data | Repository layer — orchestrates DB, network, and service data |
| core/database | Room KMP local persistence |
| core/datastore | DataStore preferences |
| core/service | Meshtastic Android service abstractions |
| core/navigation | Type-safe Navigation 3 route model |
| core/resources | Centralized CMP string & drawable resources |
| core/model | Shared domain models |
| core/ui | Shared UI components |
| core/common | Common utilities |
| core/di | Koin DI modules |
| core/testing | Shared test fakes & utilities |
| core/konsist | Konsist architecture-rule tests (KMP boundary guards) |
| core/nfc | NFC support |
| core/prefs | Type-safe preferences over multiplatform DataStore |
| core/barcode | Barcode / QR scanning |
| feature/messaging | Messaging UI feature |
| feature/map | Map UI feature — shared state, policy, tile sources and the waypoint editor |
| feature/map-maplibre | MapLibre map surfaces shared by the fdroid flavor and Desktop |
| feature/map-terrain | Offline terrain math (Terrarium decode, hillshade, contours) shared by both map stacks |
| feature/coverage | Site Planner coverage computed in-process with ITU-R P.1812 (kp1812) |
| feature/node | Node detail UI feature |
| feature/settings | Settings UI feature |
| feature/firmware | Firmware update UI feature |
| feature/intro | Onboarding / intro UI feature |
| feature/wifi-provision | Wi-Fi provisioning UI feature |
| feature/connections | Device discovery & connection management (BLE / USB / TCP) |
| feature/discovery | Mesh network discovery (scanner, AI summaries, Mesh Beacon) |
| feature/docs | In-app documentation browser with Chirpy AI assistant |
| feature/widget | Android home-screen Glance widget (live mesh stats) |
| baselineprofile | Macrobenchmark Baseline Profile generation for :androidApp |
Translations
You can help translate the app into your native language using Crowdin.
Integration
The app includes a built-in local TAK server, turned on with Enable Local TAK Server under Settings → Advanced → TAK Server. It runs a loopback-only TLS (mTLS) server on port 8089 so ATAK on the same device can connect directly and route its traffic over the mesh. See TAK Integration.
Building the Android App
[!WARNING] Debug and release builds install side by side to ease development, but don't run both at once — force-quit the one you are not using.
Follow the Android development guide to set up your environment.
Note: when building the google flavor locally you will need a Google Maps Android SDK API key to use Google Maps. Create secrets.properties at the repo root and set MAPS_API_KEY=…. Without it the build still succeeds with the placeholder key from secrets.defaults.properties, but map tiles will not load. For example:
# secrets.properties
MAPS_API_KEY=your_google_maps_api_key_here
Contributing guidelines
For detailed instructions on how to contribute, please see our CONTRIBUTING.md file. For details on our release process, see the RELEASE_PROCESS.md file. Forking or rebranding the app? Read Forks and rebrands first.
Repository Statistics
Copyright 2025-2026, Meshtastic LLC. GPL-3.0 license