3.0 KiB
Qlyra
Кроссплатформенный клиент для мессенджера MAX.
Android
Основной вариант приложения использует идентификатор ru.qlyra.app и flavor qlyra.
Сборка из исходного кода
Используйте Flutter 3.44.3, Rust и Java 17 для Android. Перед запуском тестов соберите нативную библиотеку шифрования:
flutter pub get
cargo build --locked --manifest-path native/qlyra_crypto/rust/Cargo.toml
cargo test --locked --manifest-path native/qlyra_crypto/rust/Cargo.toml
flutter test --no-pub
flutter analyze --no-pub --no-fatal-infos lib test
Криптотесты требуют библиотеку для текущей ОС в
native/qlyra_crypto/rust/target/debug. Другой путь задаётся переменной
QLYRA_CRYPTO_LIBRARY. Отсутствие библиотеки считается ошибкой проверки.
Для release-сборки Android обязателен локальный android/key.properties
с полями storeFile, storePassword, keyAlias, keyPassword.
Используйте тот же ключ, которым подписана установленная версия.
Без ключа release-сборка останавливается. Для разработки доступна
flutter build apk --debug --flavor qlyra.
Release-варианты подключают Flutter JNI через Android Components API.
Перед удалением отладочных символов задача verifyQlyraReleaseFlutterJni
(или verifyOnemeReleaseFlutterJni) сверяет SHA-256 скомпилированных и
объединённых библиотек и останавливает упаковку при несовпадении.
$ flutter build [windows|linux] [--release]
$ flutter build apk --release --flavor qlyra
Отправка текста проходит через OutgoingText и OutboxQueue: в БД сохраняются
подготовленный текст, постоянный cid и срок повторной попытки. При включённом
шифровании в очереди находится шифротекст. Подтверждение заменяет временную
запись одной транзакцией. Старые pending-записи без метаданных подготовки
получают статус ошибки и автоматически не отправляются.
cid сохраняется при повторе; серверная дедупликация зависит от реализации
сервера MAX. Локальные тесты моделируют потерю ответа и не заменяют проверку
этого поведения на сервере.