Pular para o conteúdo

Guia de Desenvolvimento

Bem-vindo ao guia de desenvolvimento ELRS Mobile! Este projeto é uma implementação Flutter nativa do pipeline de compilação e flashing do ExpressLRS, projetado para funcionar inteiramente offline.

Para contribuir com este projeto, você precisará das seguintes ferramentas instaladas:

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

  1. Clonar o repositório:

    Terminal window
    git clone https://github.com/wbhinton/ELRS-Mobile.git
    cd ELRS-Mobile
  2. Instalar dependências:

    Terminal window
    flutter pub get
  3. Executar a aplicação:

    Terminal window
    # Para Android
    flutter run
    # Para iOS (requer um Mac e dispositivo físico/simulador)
    flutter run

A base de código segue uma estrutura focada em funcionalidades localizada em lib/src/.

Funcionalidades

  • flashing/ A lógica central e a UI para o pipeline de flashing.
  • firmware_manager/ Gerencia o download e o cache de firmware do artifactory.
  • configurator/ UI para configurar opções do usuário como Binding Phrases e WiFi.

Núcleo

  • networking/ Lógica específica da plataforma para vinculação de processo a hotspots de hardware.
  • storage/ Gerenciamento de cache local e persistência SQLite.
  • analytics/ Observabilidade com privacidade em primeiro lugar (Sentry e Aptabase).

Utilizamos Riverpod para gerenciamento de estado global e Flutter Hooks para estado local a nível de widget. Esta combinação garante uma UI altamente reativa sem a repetição de código (boilerplate) dos StatefulWidgets padrão.


Para informações técnicas mais detalhadas, consulte os seguintes guias:


Ao auditar binários, você pode notar pequenas diferenças de byte em comparação com o Python Configurator padrão. Isso se deve à minificação JSON.

O Python Configurator frequentemente injeta espaços após os dois pontos (por exemplo, {"uid": [1,2,3]}), enquanto o ELRS Mobile gera JSON denso (por exemplo, {"uid":[1,2,3]}). Ambos são funcionalmente idênticos no hardware, pois o parser interno do ESP32 ignora este espaço em branco.