Android application for Meshtastic
Find a file
GitHub Copilot CLI c1c01d7765 chore(r8): remove redundant keep rules covered by consumer rules
Removes explicit -keep/-dontwarn wildcards whose behavior is already
provided by the library's own bundled consumer-rules.pro, by Room's
generated static references, or by narrower annotation-targeted keeps.
The merged R8 configuration shrinks by 34 lines (1981→1947 googleRelease,
1653→1619 fdroidRelease), giving R8 more tree-shaking freedom.

Removed (covered by library-bundled consumer rules):
- kotlin.Metadata, kotlin.reflect.**, kotlin.coroutines.Continuation,
  kotlinx.coroutines.** (kotlin-stdlib + kotlinx-coroutines-core)
- androidx.datastore.**, androidx.paging.**, androidx.lifecycle.**,
  androidx.navigation3.**, androidx.sqlite.**
- coil3.**, okio.**, co.touchlab.kermit.**,
  com.mikepenz.aboutlibraries.**, com.mikepenz.markdown.**,
  com.juul.kable.**, io.ktor.**, io.ktor.client.engine.java.**
  (HttpClientEngineFactory ServiceLoader keep retained)

Room (room3) narrowed:
- Dropped org.meshtastic.core.database.{dao,entity,Converters}.** and
  **_Impl wildcards. RoomDatabaseConstructor +
  MeshtasticDatabaseConstructor/MeshtasticDatabase keeps retained.
  Room 3.0 KMP generates static references rather than reflective
  lookups, so reachable DAO/entity/_Impl code survives tree-shaking.

Wire protobuf narrowed:
- Dropped com.squareup.wire.**, org.meshtastic.proto.**, meshtastic.**
  wildcards and deleted core/proto/consumer-rules.pro (20 per-class keeps).
- Replaced with targeted -keepclassmembers for ADAPTER fields on
  Message subclasses and ProtoAdapter member preservation. Verified
  no Class.forName lookups into org.meshtastic.proto namespace.

Meshtastic model + DI:
- Dropped org.meshtastic.core.model.** wildcard and deleted
  core/model/consumer-rules.pro (DataPacket is @CommonParcelize'd;
  no reflective access to core.model).
- Replaced org.meshtastic.**.di.** wildcard with a narrow
  @KoinViewModel class annotation keep (the @Module, @ComponentScan,
  @Single, @Factory keeps above already cover the rest of Koin).

Compose resources refinement:
- Narrowed org.meshtastic.core.resources.** to Res + Res$* members
  only (sufficient for the fdroid startup-crash workaround in #5146).

Intentionally retained (documented workarounds / policy):
- -dontoptimize, -dontobfuscate, -printconfiguration
- All Koin annotation keeps + org.koin.**
- kotlinx-serialization @Serializable keeps
- Room RoomDatabaseConstructor + MeshtasticDatabase(-Constructor)
- Ktor HttpClientEngineFactory ServiceLoader keep
- Desktop MainKt + org.meshtastic.desktop.** entry points
- All -dontwarn rules for JVM/Android platform gaps
- app/proguard-rules.pro Compose runtime/ui/animation/foundation/
  material3 keeps (defence-in-depth with -dontoptimize; may interact
  with the parallel CMP freeze RCA investigation).

Verified:
- ./gradlew :app:assembleFdroidRelease — SUCCESS (after each batch)
- ./gradlew :app:assembleGoogleRelease — SUCCESS
- ./gradlew spotlessApply detekt — SUCCESS
- :desktop:createReleaseDistributable — pre-existing failure on
  origin/main (Vico/Skia warnings), unrelated to these changes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-17 11:59:39 -05:00
.gemini chore(ai): modernize and unify agent tooling and instructions (#5087) 2026-04-12 17:29:05 +00:00
.github chore: review-cleanup fleet (audit + fix + hardening) (#5158) 2026-04-17 00:02:59 +00:00
.idea fix(#1787): handle unknown hardware details crash (#1789) 2025-04-26 19:37:49 -05:00
.run feat: Configure Pre-Commit run for debugging (#4284) 2026-01-21 19:50:27 +00:00
.skills chore: review-cleanup fleet (audit + fix + hardening) (#5158) 2026-04-17 00:02:59 +00:00
app fix: redact MeshLog proto secrets and centralize Compose keep-rules (#5166) 2026-04-17 16:20:50 +00:00
build-logic chore: review-cleanup fleet (audit + fix + hardening) (#5158) 2026-04-17 00:02:59 +00:00
config chore(r8): remove redundant keep rules covered by consumer rules 2026-04-17 11:59:39 -05:00
core chore(r8): remove redundant keep rules covered by consumer rules 2026-04-17 11:59:39 -05:00
desktop chore(r8): remove redundant keep rules covered by consumer rules 2026-04-17 11:59:39 -05:00
docs chore: remove deprecated mesh_service_example module (#5055) 2026-04-15 03:10:23 +00:00
fastlane chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5105) 2026-04-13 12:37:53 +00:00
feature fix(ui): stable LazyColumn keys, semantic roles, and content descriptions (#5168) 2026-04-17 16:24:18 +00:00
gradle feat(mqtt): migrate to MQTTastic-Client-KMP (#5165) 2026-04-17 15:19:08 +00:00
.copilotignore chore(ai): modernize and unify agent tooling and instructions (#5087) 2026-04-12 17:29:05 +00:00
.gitignore chore(ai): modernize and unify agent tooling and instructions (#5087) 2026-04-12 17:29:05 +00:00
.gitmodules Remove design/ git submodule (#3177) 2025-09-23 21:29:33 +00:00
.jdk feat: Implement iOS support and unify Compose Multiplatform infrastructure (#4876) 2026-03-21 23:19:13 +00:00
.ruby-version chore(deps): update ruby to v3.4.9 (#4752) 2026-03-11 14:56:35 +00:00
AGENTS.md chore: review-cleanup fleet (audit + fix + hardening) (#5158) 2026-04-17 00:02:59 +00:00
build.gradle.kts feat: Migrate networking to Ktor and enhance multiplatform support (#4890) 2026-03-23 16:48:10 +00:00
CLAUDE.md chore: review-cleanup fleet (audit + fix + hardening) (#5158) 2026-04-17 00:02:59 +00:00
CODE_OF_CONDUCT.md repo: Add Contributor Covenant Code of Conduct (#3941) 2025-12-10 00:03:23 +00:00
codecov.yml chore: remove deprecated mesh_service_example module (#5055) 2026-04-15 03:10:23 +00:00
compose_compiler_config.conf feat: Migrate networking to Ktor and enhance multiplatform support (#4890) 2026-03-23 16:48:10 +00:00
config.properties build: upgrade TARGET_SDK to 37 and update AGP to 9.2.0-alpha08 (#5089) 2026-04-12 17:42:58 +00:00
CONTRIBUTING.md ci: Upgrade to JDK 21 and centralize CI configuration with new workflows (#4948) 2026-03-27 17:06:19 +00:00
crowdin.yml refactor(ui): compose resources, domain layer (#4628) 2026-02-23 03:39:50 +00:00
debugging-android.md add instructions on how to capture logcat logs 2020-03-07 17:19:36 -08:00
fix_dispatchers.py feat: Implement iOS support and unify Compose Multiplatform infrastructure (#4876) 2026-03-21 23:19:13 +00:00
Gemfile feat(ci): migrate to fastlane for release management (#3038) 2025-09-09 21:08:11 +00:00
Gemfile.lock chore(deps): update fastlane to v2.232.2 (#4663) 2026-02-27 08:49:53 -06:00
GEMINI.md chore(ai): modernize and unify agent tooling and instructions (#5087) 2026-04-12 17:29:05 +00:00
gradle.properties chore(r8): clean up ProGuard rules and enable Compose Hot Reload (#5139) 2026-04-15 03:26:39 +00:00
gradlew chore(deps): update gradle to v9.4.1 (#4850) 2026-03-19 14:15:38 +00:00
gradlew.bat chore(deps): update gradle to v9.1.0 (#3143) 2025-09-19 03:22:49 +00:00
jitpack.yml ci: Upgrade to JDK 21 and centralize CI configuration with new workflows (#4948) 2026-03-27 17:06:19 +00:00
LICENSE Add license and copyright 2020-03-01 16:39:53 -08:00
README.md feat(tak): introduce built-in Local TAK Server and mesh integration (#4951) 2026-04-01 20:21:25 +00:00
RELEASE_PROCESS.md feat(release): Automate changelog, asset updates, and tagging (#4407) 2026-02-02 12:19:08 -06:00
secrets.defaults.properties refactor: maps (#2097) 2025-08-13 17:51:19 +00:00
SECURITY.md Revise security policy for supported versions and reporting 2026-03-25 10:18:51 -05:00
settings.gradle.kts chore: remove deprecated mesh_service_example module (#5055) 2026-04-15 03:10:23 +00:00

Meshtastic Logo

Meshtastic-Android

GitHub all releases Android CI codecov Crowdin CLA assistant Fiscal Contributors Vercel

This is a tool for using Android (and Compose Desktop) with open-source mesh radios. For more information see our webpage: meshtastic.org. If you are looking for the device side code, see here.

This project is currently beta testing across various providers. If you have questions or feedback please Join our discussion forum or the Discord Group . We would love to hear from you!

Get Meshtastic

The easiest, and fastest way to get the latest beta releases is to use our github releases. It is recommend to use these with Obtainium to get the latest updates.

Alternatively, these other providers are also available, but may be slower to update.

Get it on F-Droid Get it on IzzyOnDroid Get it on GitHub Download at https://play.google.com/store/apps/details?id=com.geeksville.mesh]

The play store is the last to update of these options, but if you want to join the Play Store testing program go to this URL and 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.

Documentation

The project's documentation is generated with Dokka and hosted on GitHub Pages. It is automatically updated on every push to the main branch.

View Documentation

Generating Locally

You can generate the documentation locally to preview your changes.

  1. Run the Dokka task:
    ./gradlew dokkaGeneratePublicationHtml
    
  2. View the output: The generated HTML files will be located in the build/dokka/html directory. You can open the index.html file in your browser to view the documentation.

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).

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.

Translations

You can help translate the app into your native language using Crowdin.

API & Integration

Developers can integrate with the Meshtastic Android app using our published API library via JitPack. This allows third-party applications (like the ATAK plugin) to communicate with the mesh service via AIDL.

For detailed integration instructions, see core/api/README.md.

Additionally, the app includes a built-in Local TAK Server feature that can be enabled in settings. This runs a local TCP server on port 8089 to allow ATAK clients to connect directly and route their traffic over the mesh.

Building the Android App

Warning

Debug and release builds can be installed concurrently. This is solely to enable smoother development, and you should avoid running both apps simultaneously. To ensure proper function, force quit the app not in use.

https://meshtastic.org/docs/development/android/

Note: when building the google flavor locally you will need to supply your own Google Maps Android SDK api key MAPS_API_KEY in local.properties in order to use Google Maps. e.g.

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.

Repository Statistics

Alt

Copyright 2025, Meshtastic LLC. GPL-3.0 license