Перейти к содержимому

Руководство по разработке

Добро пожаловать в руководство по разработке ELRS Mobile! Этот проект представляет собой нативную реализацию Flutter конвейера компиляции и прошивки ExpressLRS, разработанную для работы полностью в автономном режиме.

Чтобы внести свой вклад в этот проект, вам понадобятся следующие установленные инструменты:

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

  1. Клонируйте репозиторий:

    Окно терминала
    git clone https://github.com/wbhinton/ELRS-Mobile.git
    cd ELRS-Mobile
  2. Установите зависимости:

    Окно терминала
    flutter pub get
  3. Запустите приложение:

    Окно терминала
    # Для Android
    flutter run
    # Для iOS (требуется Mac и физическое устройство/симулятор)
    flutter run

Кодовая база следует структуре, ориентированной на функции, расположенной в lib/src/.

Функции

  • flashing/ Основная логика и пользовательский интерфейс для конвейера прошивки.
  • firmware_manager/ Обрабатывает загрузку и кэширование firmware из artifactory.
  • configurator/ Пользовательский интерфейс для настройки пользовательских параметров, таких как Binding Phrases и WiFi.

Ядро

  • networking/ Логика, специфичная для платформы, для привязки процессов к аппаратным точкам доступа.
  • storage/ Управление локальным кэшем и сохранение данных в SQLite.
  • analytics/ Наблюдаемость, ориентированная на конфиденциальность (Sentry и Aptabase).

Мы используем Riverpod для глобального управления состоянием и Flutter Hooks для локального состояния на уровне виджетов. Эта комбинация обеспечивает высокореактивный пользовательский интерфейс без шаблонного кода стандартных StatefulWidgets.


Для получения более подробной технической информации, пожалуйста, обратитесь к следующим руководствам:


При аудите binaries вы можете заметить небольшие byte-offsets по сравнению со стандартным Python Configurator. Это связано с минификацией JSON.

Python Configurator часто вс��авляет пробелы после двоеточий (например, {"uid": [1,2,3]}), в то время как ELRS Mobile генерирует плотный JSON (например, {"uid":[1,2,3]}). Оба функционально идентичны на аппаратном уровне, поскольку внутренний парсер ESP32 игнорирует этот whitespace.