Some checks failed
Android CI / build (push) Has been cancelled
- Маршрут: при включённом VPN проверка идёт наперегонки напрямую и через туннель, выигрывает первый ответ; без VPN — напрямую, затем временный VPN-маршрут. Промежуточных «Forgejo не отвечает» больше нет, ошибка — только если не сработал ни один маршрут. Удачный маршрут запоминается. - Подключённый VPN больше не перезапускается ради обновления: правило «запросы приложения к Forgejo — через выбранный proxy» теперь постоянное (RuntimeConfigOptions.standingUpdaterPackageName; без proxy пропускается). - Дельта: центральный каталог нового APK читается по Range, совпадающие записи копируются из установленного APK, остальное догружается; итог сверяется с опубликованным SHA-256, при любом сомнении — полная загрузка с докачкой. 0.5.0 → 0.5.1: 3,39 МБ вместо 117,8 МБ. - Фон: проверка при запуске и раз в сутки (JobScheduler, без новых зависимостей); Stable скачивается сам (по мобильной сети — если ≤ 25 МБ). - Установка через PackageInstaller: на Android 12+ после первой установки самим приложением — без подтверждения; иначе тихое уведомление и баннер, установщик открывается только по нажатию. Всплывающий диалог убран. Проверено: 675 юнит-тестов, lint, verify-project.sh, 32/32 UI- и updater-тестов на эмуляторе API 37 (тихая установка — 5 с без окна). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
18 lines
2.2 KiB
Markdown
18 lines
2.2 KiB
Markdown
# app-updater
|
||
|
||
Изолированный модуль обновления APK. Он не зависит от UI, профилей, libbox или
|
||
реализации VPN в `app`.
|
||
|
||
- `ForgejoUpdateSource.kt` — HTTPS-клиент одного маршрута (Range, нейтральный User-Agent, кэш редиректа) и разбор Forgejo Releases.
|
||
- `UpdateModels.kt` — release metadata, состояния (`Checking`, `Downloading` с экономией, `Ready`/`Installing`, `Failure`) и строгий JSON parser.
|
||
- `ZipDirectory.kt`, `DeltaPlan.kt` — чистый разбор ZIP/APK (EOCD, центральный каталог, APK Signing Block), план повторного использования записей и склейка диапазонов; без сети и Android.
|
||
- `ApkDownloader.kt` — дельта-загрузка по HTTP Range против установленного APK, полная загрузка с докачкой `.part`, проверка SHA-256.
|
||
- `UpdateRouter.kt` — выбор маршрута (прямой / через временный VPN) без промежуточных сообщений; гонка при включённом VPN; запомненный маршрут в `updater_prefs` (`UpdatePrefs.kt`).
|
||
- `ApkUpdateVerifier.kt` — package/version/minSdk/signing policy.
|
||
- `UpdateController.kt` — проверка, автоскачивание (Stable), политика мобильной сети (`UpdateAutoDownloadPolicy`), передача установщику, cache cleanup; состояние для плашки и страницы настроек.
|
||
- `UpdateContracts.kt`, `UpdateVpnFallback.kt` — узкие callback-контракты: установщик, уведомления, окружение (VPN/сеть/экран), VPN lease.
|
||
|
||
Реализация контрактов находится в `app/src/main/java/io/github/zapretkvn/android/updates/`
|
||
(`AppUpdateVpnFallback`, `PackageInstallerUpdateInstaller`, `UpdateInstallReceiver`, `UpdateCheckJob`,
|
||
`AndroidUpdateNotifier`), потому что только product-модуль владеет `VpnService`, `PackageInstaller`,
|
||
уведомлениями и `JobScheduler`.
|