Přeskočit na obsah

Vývojová příručka

Vítejte v průvodci vývojem ELRS Mobile! Tento projekt je nativní Flutter implementace pipeline kompilace a flashování ExpressLRS, navržená tak, aby fungovala zcela offline.

Pro přispívání k tomuto projektu budete potřebovat nainstalované následující nástroje:

Flutter SDK (Stable) Dart SDK Python 3.x Cocoapods (iOS/macOS)

  1. Klonování repozitáře:

    Terminál
    git clone https://github.com/wbhinton/ELRS-Mobile.git
    cd ELRS-Mobile
  2. Instalace závislostí:

    Terminál
    flutter pub get
  3. Spuštění aplikace:

    Terminál
    # Pro Android
    flutter run
    # Pro iOS (vyžaduje Mac a fyzické zařízení/simulátor)
    flutter run

Kódová základna se řídí strukturou orientovanou na funkce, která se nachází v lib/src/.

Features

  • flashing/ Základní logika a uživatelské rozhraní pro pipeline flashování.
  • firmware_manager/ Spravuje stahování a ukládání firmwaru z úložiště (artifactory).
  • configurator/ Uživatelské rozhraní pro nastavení uživatelských možností jako Binding Phrases a WiFi.

Core

  • networking/ Logika specifická pro platformu pro vázání procesů k hardwarovým hotspotům.
  • storage/ Správa lokální cache a perzistence SQLite.
  • analytics/ Observabilita s důrazem na soukromí (Sentry a Aptabase).

Pro správu globálního stavu využíváme Riverpod a pro lokální stav na úrovni widgetů Flutter Hooks. Tato kombinace zajišťuje vysoce reaktivní uživatelské rozhraní bez složitosti standardních StatefulWidgets.


Pro podrobnější technické informace se prosím podívejte na následující průvodce:

  • Technická architektura: Podrobný pohled na FirmwareAssembler a nativní síťový zásobník.
  • Validace firmwaru: Jak používat nástroje Dart a Python k ověření integrity binárních souborů.

Při auditu binárních souborů si můžete všimnout mírných posunů bajtů ve srovnání se standardním Python Configuratorem. To je způsobeno minifikací JSONu.

Python Configurator často vkl��dá mezery za dvojtečky (např. {"uid": [1,2,3]}), zatímco ELRS Mobile generuje hustý JSON (např. {"uid":[1,2,3]}). Oba jsou na hardwaru funkčně identické, protože interní parser ESP32 tyto mezery ignoruje.