Files

5.7 KiB

Android-приложение «Чек-листы»

Нативное приложение (Kotlin, Jetpack Compose) для техников и инженеров. Работает с API сервера (/api/v1), описание — ../docs/API.md. Распространяется APK-файлом (Google Play не нужен).

Возможности

  • Вход по адресу сервера, логину и паролю; токены хранятся в шифрованном хранилище (Android Keystore), access-токен обновляется автоматически.
  • Список нарядов: фильтры (активные / мои / на проверку / завершённые), поиск, прогресс, срок, признак просрочки.
  • Выполнение наряда: все типы ответов (статус, список, число с контролем нормы, текст), фото с камеры (уменьшается до 1600 px), комментарии, «Взять в работу», «Сдать наряд».
  • Проверка для инженеров: «Принять» / «Вернуть» с комментарием.
  • Работа без связи. Наряды и чек-листы хранятся на устройстве (Room). Ответы, фото, комментарии и сдача накапливаются и уходят на сервер сами при появлении сети: сначала фото (с Idempotency-Key, повтор не создаёт дубликат), затем ответы пачкой через POST /orders/{id}/sync. Неотправленное помечено «⟳». Если на сервере уже есть более свежий ответ — побеждает он, а приложение сообщит об этом.
  • Регламентное обслуживание. Наряды этого типа показывают пункт «⏱ наработка машины» и пункты «🔧 узел — обслужено?» с остатком по каждому узлу. Инженеры, модераторы и админы открывают экран «Состояние узлов» (значок гаечного ключа): узлы со статусами Требуется / Скоро / В норме, остаток и прогноз, внесение наработки и ручной сброс узла. Отчёт хранится на устройстве и виден без связи; внесение наработки и сброс требуют связи.
  • Уведомления о новых нарядах, проверках и возвратах: фоновая проверка раз в ~15 минут и при открытии приложения (WorkManager). FCM-push можно добавить позже (нужен проект Firebase).

Сборка

Нужны JDK 17 и Android SDK 34 (путь — в local.properties, sdk.dir=...).

cd android
$env:JAVA_HOME = "<путь к JDK 17>"
.\gradlew.bat assembleDebug      # app/build/outputs/apk/debug/app-debug.apk

Подписанный релиз

  1. Создайте ключ (один раз, храните его и пароли в надёжном месте — без него приложение нельзя будет обновлять поверх):
    keytool -genkeypair -v -keystore keystore/release.jks -alias checklists -keyalg RSA -keysize 2048 -validity 36500
    
  2. Создайте android/keystore.properties (в git не попадает):
    storeFile=keystore/release.jks
    storePassword=...
    keyAlias=checklists
    keyPassword=...
    
  3. .\gradlew.bat assembleRelease → app/build/outputs/apk/release/app-release.apk.

Установка на телефон

  1. Соберите подписанный APK (см. выше). Чтобы он раздавался с сервера, замените файл в release/ (и передеплойте) либо положите его на сервер в DATA_DIR/apk/ (без передеплоя; в Docker — том appdata, путь apk/). Скачивание: https://<домен>/app.apk (также ссылка на экране входа веб-интерфейса). Либо просто передайте файл.
  2. На телефоне откройте файл; Android попросит разрешить установку из этого источника.
  3. При первом входе введите адрес сервера (https://…), логин и пароль, разрешите уведомления.

Обновление: соберите APK с большим versionCode (в app/build.gradle.kts), подписанный тем же ключом, и установите поверх. Ключ keystore/release.jks и keystore.properties не хранятся в git — сделайте их резервную копию.

Безопасность соединения

Релизная сборка работает только по HTTPS (network_security_config.xml, на экране входа адрес http:// отклоняется). В отладочной сборке открытый HTTP разрешён лишь для 10.0.2.2, localhost и 127.0.0.1 (app/src/debug/res/xml/).

Тест на эмуляторе

Адрес сервера на хосте с эмулятора — http://10.0.2.2:8000 (только в debug-сборке: assembleDebug). Для показа удобно включить на сервере демо-режим.