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
Подписанный релиз
- Создайте ключ (один раз, храните его и пароли в надёжном месте — без него приложение нельзя будет обновлять поверх):
keytool -genkeypair -v -keystore keystore/release.jks -alias checklists -keyalg RSA -keysize 2048 -validity 36500 - Создайте
android/keystore.properties(в git не попадает):storeFile=keystore/release.jks storePassword=... keyAlias=checklists keyPassword=... .\gradlew.bat assembleRelease→app/build/outputs/apk/release/app-release.apk.
Установка на телефон
- Соберите подписанный APK (см. выше). Чтобы он раздавался с сервера, замените файл в
release/(и передеплойте) либо положите его на сервер вDATA_DIR/apk/(без передеплоя; в Docker — томappdata, путьapk/). Скачивание:https://<домен>/app.apk(также ссылка на экране входа веб-интерфейса). Либо просто передайте файл. - На телефоне откройте файл; Android попросит разрешить установку из этого источника.
- При первом входе введите адрес сервера (
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). Для показа удобно включить на сервере демо-режим.