ZapretKVN-android/app-updater/build.gradle.kts
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

28 lines
877 B
Kotlin

import com.android.build.api.dsl.LibraryExtension
apply(plugin = "com.android.library")
extensions.configure<LibraryExtension> {
namespace = "io.github.zapretkvn.appupdater"
compileSdk = 36
defaultConfig {
minSdk = 26
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
testOptions {
// JVM-тесты строят пустые Intent для результата установки; сами платформенные методы не вызываются.
unitTests.isReturnDefaultValues = true
}
}
dependencies {
add("implementation", "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0")
add("implementation", "org.jetbrains.kotlinx:kotlinx-serialization-json:1.10.0")
add("testImplementation", "junit:junit:4.13.2")
}