Publish IOMATEX Android 5.3.2 build 4433
This commit is contained in:
parent
36789b6b10
commit
237a8bc8f5
|
|
@ -0,0 +1,116 @@
|
|||
# IOMATEX Android release guide
|
||||
|
||||
Этот репозиторий — публичный канал обновлений Android-приложения. Клиент читает
|
||||
`latest.json`, сравнивает `build_number` с установленным `versionCode` и
|
||||
показывает обновление только при строго большем значении.
|
||||
|
||||
## Неизменяемые правила
|
||||
|
||||
1. Каждая новая версия обязана увеличивать `build_number` в `pubspec.yaml`.
|
||||
2. Все production APK подписываются только постоянным ключом
|
||||
`iomatex-release`.
|
||||
3. Keystore, пароль и `android/key.properties` никогда не добавляются в Git.
|
||||
4. SHA-1 сертификата APK должен быть
|
||||
`9C:0B:AA:72:12:C0:B9:84:12:10:CB:13:0A:92:20:89:5D:D8:27:EC`.
|
||||
5. `latest.json`, APK, SHA-256 и размер обязаны описывать один и тот же файл.
|
||||
6. Старые release-каталоги не изменяются и не удаляются.
|
||||
7. Откат выполняется только новой сборкой с большим `build_number`. Уменьшение
|
||||
номера не предложит пользователям обновление.
|
||||
|
||||
## Контракт latest.json
|
||||
|
||||
Обязательные для приложения поля:
|
||||
|
||||
```json
|
||||
{
|
||||
"version": "5.3.2",
|
||||
"build_number": 4433,
|
||||
"apk_url": "https://git.it-screen.com/.../IOMATEX.apk",
|
||||
"sha256": "64 lowercase hex characters",
|
||||
"size_bytes": 82910903,
|
||||
"release_notes": {
|
||||
"en": "English release notes",
|
||||
"ru": "Русское описание"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Поля `build`, `platform`, `architecture`, `file` и `published_at` сохраняются
|
||||
для людей и обратной совместимости внешних инструментов.
|
||||
|
||||
## Подготовка версии
|
||||
|
||||
1. В `IOMATEX_APP/pubspec.yaml` увеличить обе части версии:
|
||||
|
||||
```yaml
|
||||
version: 5.3.3+4434
|
||||
```
|
||||
|
||||
2. Убедиться, что локально существуют игнорируемые Git файлы:
|
||||
|
||||
```text
|
||||
android/app/iomatex-release.jks
|
||||
android/key.properties
|
||||
```
|
||||
|
||||
3. Запустить анализ и тесты:
|
||||
|
||||
```bash
|
||||
flutter analyze
|
||||
flutter test
|
||||
```
|
||||
|
||||
4. Собрать production APK:
|
||||
|
||||
```bash
|
||||
flutter build apk --release
|
||||
```
|
||||
|
||||
5. Проверить сертификат APK через Android SDK `apksigner`:
|
||||
|
||||
```bash
|
||||
apksigner verify --verbose --print-certs \
|
||||
build/app/outputs/flutter-apk/app-release.apk
|
||||
```
|
||||
|
||||
SHA-1 signer должен точно совпасть с production SHA-1 из правил выше.
|
||||
|
||||
## Публикация
|
||||
|
||||
1. Создать неизменяемый каталог `releases/<version>-<build>/`.
|
||||
2. Скопировать APK с понятным именем, включающим версию и build.
|
||||
3. Получить метаданные:
|
||||
|
||||
```bash
|
||||
sha256sum releases/<version>-<build>/IOMATEX-*.apk
|
||||
stat -c '%s' releases/<version>-<build>/IOMATEX-*.apk
|
||||
```
|
||||
|
||||
4. Обновить все поля `latest.json`, включая абсолютный публичный `apk_url`.
|
||||
5. Проверить JSON:
|
||||
|
||||
```bash
|
||||
jq . latest.json
|
||||
```
|
||||
|
||||
6. Commit APK и manifest вместе, затем push в `main`. Manifest нельзя
|
||||
публиковать раньше APK: клиент сразу начнёт показывать новый release.
|
||||
7. После push проверить публичные ответы:
|
||||
|
||||
```bash
|
||||
curl -fL https://git.it-screen.com/An-J/DOWNLOAD_IOMATEX_APP/raw/branch/main/latest.json
|
||||
curl -fIL '<apk_url из manifest>'
|
||||
```
|
||||
|
||||
8. Скачать APK по публичной ссылке, повторно проверить SHA-256 и установить на
|
||||
тестовое устройство поверх предыдущей production-версии.
|
||||
|
||||
## CI/CD
|
||||
|
||||
Для автоматической сборки хранить keystore как protected file variable, а
|
||||
пароли — как protected masked variables. Job должен восстановить
|
||||
`android/app/iomatex-release.jks`, сформировать `android/key.properties`,
|
||||
собрать APK, проверить signer SHA-1 и только затем публиковать release.
|
||||
|
||||
Не запускайте release job из недоверенных веток или pull request. Постоянный
|
||||
keystore должен иметь минимум две независимые зашифрованные резервные копии.
|
||||
39
README.md
39
README.md
|
|
@ -1,21 +1,40 @@
|
|||
# Download IOMATEX APP
|
||||
|
||||
Готовые Android-сборки IOMATEX APP для установки вне Google Play.
|
||||
Публичное хранилище production-сборок IOMATEX APP для Android. Скачивание APK
|
||||
не требует регистрации или пароля.
|
||||
|
||||
## Актуальная версия
|
||||
|
||||
- Версия: `5.3.1+4432`
|
||||
- Версия: `5.3.2+4433`
|
||||
- Платформа: Android
|
||||
- Архитектура: `arm64-v8a`
|
||||
- Назначение: современные Android-планшеты и телефоны
|
||||
- APK: [скачать IOMATEX 5.3.1+4432](releases/5.3.1-4432/IOMATEX-5.3.1-4432-arm64-v8a.apk)
|
||||
- SHA-256: `dfaf921ccd5d17ec8988303b59c3c762ce7761c2b69597c0118939536707f26b`
|
||||
- Архитектура: universal (`arm64-v8a`, `armeabi-v7a`, `x86_64`)
|
||||
- Подпись: постоянный IOMATEX production certificate
|
||||
- APK: [скачать IOMATEX 5.3.2+4433](releases/5.3.2-4433/IOMATEX-5.3.2-4433-universal.apk)
|
||||
- SHA-256: `ddfded775c87282668d412e2f5f87f18d03a893f990f29120a26ad79884f50d3`
|
||||
|
||||
Прямая публичная ссылка:
|
||||
|
||||
```text
|
||||
https://git.it-screen.com/An-J/DOWNLOAD_IOMATEX_APP/raw/branch/main/releases/5.3.2-4433/IOMATEX-5.3.2-4433-universal.apk
|
||||
```
|
||||
|
||||
Для установки разрешите Android устанавливать приложения из выбранного
|
||||
браузера или файлового менеджера, скачайте APK и откройте его.
|
||||
|
||||
`latest.json` содержит машиночитаемую информацию об актуальной сборке и может
|
||||
использоваться приложением или внешним сервисом для проверки обновлений.
|
||||
## Обновления в приложении
|
||||
|
||||
> Текущая тестовая сборка подписана ключом разработки. Перед массовым
|
||||
> распространением потребуется постоянный production signing key.
|
||||
Приложение проверяет публичный [`latest.json`](latest.json) при запуске.
|
||||
Если `build_number` больше установленного Android `versionCode`, на иконке
|
||||
Profile появляется красный badge, а на странице Profile — кнопка `Обновить`.
|
||||
Кнопка открывает прямую ссылку на подписанный APK в системном браузере.
|
||||
|
||||
Версия `5.3.2+4433` является первой production-сборкой с механизмом обновлений.
|
||||
Переход со старой debug-подписи требует один раз удалить прежнее приложение и
|
||||
установить эту APK вручную. Последующие production-версии будут обновляться
|
||||
поверх неё без удаления приложения.
|
||||
|
||||
## Разработчикам
|
||||
|
||||
Полный контракт manifest, правила версий, подписи, публикации, проверки и
|
||||
отката описаны в [DEVELOPERS.md](DEVELOPERS.md). Менять `latest.json` без
|
||||
выполнения этого регламента нельзя.
|
||||
|
|
|
|||
21
latest.json
21
latest.json
|
|
@ -1,9 +1,18 @@
|
|||
{
|
||||
"version": "5.3.1",
|
||||
"build": 4432,
|
||||
"version": "5.3.2",
|
||||
"build": 4433,
|
||||
"build_number": 4433,
|
||||
"platform": "android",
|
||||
"architecture": "arm64-v8a",
|
||||
"file": "releases/5.3.1-4432/IOMATEX-5.3.1-4432-arm64-v8a.apk",
|
||||
"sha256": "dfaf921ccd5d17ec8988303b59c3c762ce7761c2b69597c0118939536707f26b",
|
||||
"published_at": "2026-09-30T12:32:00+02:00"
|
||||
"architecture": "universal",
|
||||
"file": "releases/5.3.2-4433/IOMATEX-5.3.2-4433-universal.apk",
|
||||
"apk_url": "https://git.it-screen.com/An-J/DOWNLOAD_IOMATEX_APP/raw/branch/main/releases/5.3.2-4433/IOMATEX-5.3.2-4433-universal.apk",
|
||||
"sha256": "ddfded775c87282668d412e2f5f87f18d03a893f990f29120a26ad79884f50d3",
|
||||
"size_bytes": 82910903,
|
||||
"published_at": "2026-10-02T05:31:00+02:00",
|
||||
"release_notes": {
|
||||
"en": "Production-signed build with Google Sign-In and automatic update notifications.",
|
||||
"ru": "Production-сборка с Google Auth и автоматическими уведомлениями об обновлениях.",
|
||||
"pl": "Wersja produkcyjna z logowaniem Google i automatycznymi powiadomieniami o aktualizacjach.",
|
||||
"hi": "Google Sign-In और स्वचालित अपडेट सूचनाओं के साथ प्रोडक्शन बिल्ड।"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
Loading…
Reference in New Issue