ZapretKVN-android/docs/APP_UPDATER.md
loop-uh 02e1f9eecb
Some checks failed
Android CI / build (push) Has been cancelled
Обновления: сами в фоне, только изменённые части APK, без всплывающих окон
- Маршрут: при включённом 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>
2026-10-14 20:31:42 +03:00

18 lines
2.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`.