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>
2.2 KiB
2.2 KiB
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.