mirror of
https://github.com/by-sonic/tglock.git
synced 2026-08-02 16:45:50 +03:00
a87e26c581
Android грузит приложение как нативную библиотеку и входит через JNI-символ, а не через main. Поэтому Tauri-приложение переехало из src/main.rs в src/gui.rs внутри библиотеки, с #[cfg_attr(mobile, tauri::mobile_entry_point)], а main.rs стал обёрткой. Модуль объявлен как #[cfg(feature = "gui")], так что свойство «--no-default-features даёт ядро без Tauri и WebView» сохранилось — проверено сборкой и 51 тестом headless-варианта. Переход на rustls — вынужденный, но выгодный. native-tls на Linux и Android тянет OpenSSL, а openssl-sys не кросскомпилируется под aarch64-linux-android: сборка падала на нём. rustls на чистом Rust, корневые сертификаты webpki вшиты в бинарь. Побочно: на Linux исчезла зависимость от системного libssl, а образу Docker больше не нужен даже ca-certificates. На этом переходе тест живой сети поймал баг, который прошёл бы в релиз: rustls 0.23 отказывается угадывать криптопровайдер и ПАНИКУЕТ на первом TLS- рукопожатии. Компиляция чистая, все офлайновые тесты зелёные — они ходят через локальный маршрут без TLS. То есть в сборку ушло бы приложение, не способное подключиться ни к чему. Провайдер (ring, кросскомпилируется под Android) устанавливается в ensure_crypto_provider, регрессию держит тест a_crypto_provider_is_available_for_tls. Живой тест против шести боевых дата-центров Telegram проходит. Прочее: - open::that заменён на tauri-plugin-opener: у крейта open нет реализации под Android, а плагин работает на обеих платформах. - Библиотека переименована в tglock_lib: одинаковые имена lib и bin давали коллизию выходных файлов, которую cargo обещает сделать ошибкой. - Программный рендер WebView не применяется на Android — там GPU есть всегда, и переопределение только замедлило бы интерфейс. - .gitignore: строка /gen скрывала весь сгенерированный Android-проект. Теперь игнорируются только артефакты сборки, local.properties и keystore. Foreground service. Прокси — поток в процессе приложения, и без сервиса система выгрузит его через минуты после сворачивания. Сервис стартует из MainActivity, а не по команде из ядра: JNI-мост между Rust и Kotlin осознанно не делался, чтобы не добавлять слой, который нельзя проверить. Плата — уведомление висит, пока открыто приложение, даже при выключенной защите. НЕ ПРОВЕРЕНО: вся Android-часть в рантайме. Устройств не подключено, эмулятора и системных образов в SDK нет. APK собирается, но приложение никто ни разу не запускал: ни интерфейс, ни сервис, ни тип specialUse на Android 14+, ни запрос разрешения на уведомления. Поэтому Android-артефакт сознательно НЕ добавлен в release.yml — публиковать нечего, пока никто не запустил это на живом устройстве.
24 lines
1.4 KiB
Properties
24 lines
1.4 KiB
Properties
# Project-wide Gradle settings.
|
|
# IDE (e.g. Android Studio) users:
|
|
# Gradle settings configured through the IDE *will override*
|
|
# any settings specified in this file.
|
|
# For more details on how to configure your build environment visit
|
|
# http://www.gradle.org/docs/current/userguide/build_environment.html
|
|
# Specifies the JVM arguments used for the daemon process.
|
|
# The setting is particularly useful for tweaking memory settings.
|
|
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
|
|
# When configured, Gradle will run in incubating parallel mode.
|
|
# This option should only be used with decoupled projects. More details, visit
|
|
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
|
# org.gradle.parallel=true
|
|
# AndroidX package structure to make it clearer which packages are bundled with the
|
|
# Android operating system, and which are packaged with your app"s APK
|
|
# https://developer.android.com/topic/libraries/support-library/androidx-rn
|
|
android.useAndroidX=true
|
|
# Kotlin code style for this project: "official" or "obsolete":
|
|
kotlin.code.style=official
|
|
# Enables namespacing of each library's R class so that its R class includes only the
|
|
# resources declared in the library itself and none from the library's dependencies,
|
|
# thereby reducing the size of the R class for that library
|
|
android.nonTransitiveRClass=true
|
|
android.nonFinalResIds=false |