Ir al contenido

Guía de desarrollo

¡Bienvenido a la guía de desarrollo de ELRS Mobile! Este proyecto es una implementación nativa en Flutter del pipeline de compilación y flasheo de ExpressLRS, diseñado para funcionar completamente sin conexión.

Para contribuir a este proyecto, necesitarás las siguientes herramientas instaladas:

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

  1. Clonar el repositorio:

    Ventana de terminal
    git clone https://github.com/wbhinton/ELRS-Mobile.git
    cd ELRS-Mobile
  2. Instalar dependencias:

    Ventana de terminal
    flutter pub get
  3. Ejecutar la aplicación:

    Ventana de terminal
    # Para Android
    flutter run
    # Para iOS (requiere una Mac y un dispositivo físico/simulador)
    flutter run

El código base sigue una estructura centrada en características, ubicada en lib/src/.

Características

  • flashing/ La lógica central y la interfaz de usuario para el pipeline de flashing.
  • firmware_manager/ Gestiona la descarga y el almacenamiento en caché del firmware desde el artifactory.
  • configurator/ Interfaz de usuario para configurar opciones de usuario como Binding Phrases y WiFi.

Núcleo

  • networking/ Lógica específica de la plataforma para la vinculación de procesos a puntos de acceso de hardware.
  • storage/ Gestión de caché local y persistencia de SQLite.
  • analytics/ Observabilidad centrada en la privacidad (Sentry y Aptabase).

Utilizamos Riverpod para la gestión de estado global y Flutter Hooks para el estado local a nivel de widget. Esta combinación asegura una interfaz de usuario altamente reactiva sin la sobrecarga de los StatefulWidgets estándar.


Para obtener información técnica más detallada, consulta las siguientes guías:


Al auditar binarios, podrías notar ligeras diferencias de bytes en comparación con el Python Configurator estándar. Esto se debe a la minificación de JSON.

El Python Configurator a menudo inyecta espacios después de los dos puntos (por ejemplo, {"uid": [1,2,3]}), mientras que ELRS Mobile genera JSON denso (por ejemplo, {"uid":[1,2,3]}). Ambos son funcionalmente idénticos en el hardware, ya que el analizador interno del ESP32 ignora estos espacios en blanco.