Lewati ke konten

Panduan Pengembangan

Selamat datang di panduan pengembangan ELRS Mobile! Proyek ini adalah implementasi Flutter asli dari pipeline kompilasi dan flashing ExpressLRS, dirancang untuk bekerja sepenuhnya offline.

Untuk berkontribusi pada proyek ini, Anda akan memerlukan alat berikut yang terinstal:

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

  1. Kloning repositori:

    Terminal window
    git clone https://github.com/wbhinton/ELRS-Mobile.git
    cd ELRS-Mobile
  2. Instal dependensi:

    Terminal window
    flutter pub get
  3. Jalankan aplikasi:

    Terminal window
    # Untuk Android
    flutter run
    # Untuk iOS (membutuhkan Mac dan perangkat fisik/simulator)
    flutter run

Codebase mengikuti struktur fitur-pertama yang terletak di lib/src/.

Fitur

  • flashing/ Logika inti dan UI untuk pipeline flashing.
  • firmware_manager/ Menangani pengunduhan dan caching firmware dari artifactory.
  • configurator/ UI untuk mengatur opsi pengguna seperti Binding Phrases dan WiFi.

Inti

  • networking/ Logika spesifik platform untuk pengikatan proses ke hotspot perangkat keras.
  • storage/ Manajemen cache lokal dan persistensi SQLite.
  • analytics/ Observabilitas yang mengutamakan privasi (Sentry dan Aptabase).

Kami menggunakan Riverpod untuk manajemen state global dan Flutter Hooks untuk state tingkat widget lokal. Kombinasi ini memastikan UI yang sangat reaktif tanpa boilerplate StatefulWidgets standar.


Untuk informasi teknis lebih rinci, silakan lihat panduan berikut:

  • Arsitektur Teknis: Pembahasan mendalam tentang FirmwareAssembler dan native networking stack.
  • Validasi Firmware: Cara menggunakan Dart dan Python tools untuk memverifikasi integritas biner.

Saat mengaudit biner, Anda mungkin melihat sedikit perbedaan offset byte dibandingkan dengan Python Configurator standar. Ini disebabkan oleh JSON minification. Python Configurator sering menyisipkan spasi setelah titik dua (misalnya, {"uid": [1,2,3]}), sementara ELRS Mobile menghasilkan JSON padat (misalnya, {"uid":[1,2,3]}). Keduanya secara fungsional identik pada hardware, karena parser internal ESP32 mengabaikan spasi kosong ini.