Android / pre-check (push) Failing after 6s
Android / android (push) Skipped
CIFuzz / pre-check (push) Failing after 4s
CIFuzz / fuzzing (address) (push) Skipped
CIFuzz / fuzzing (undefined) (push) Skipped
CodeQL / pre-check (push) Failing after 4s
CodeQL / analyze (python) (push) Skipped
CodeQL / analyze (ruby) (push) Skipped
CodeQL / analyze-cpp (push) Skipped
FreeBSD / pre-check (push) Failing after 4s
FreeBSD / freebsd (14.4) (push) Skipped
FreeBSD / freebsd (15.0) (push) Skipped
Linux / pre-check (push) Failing after 4s
Linux / latest (apidoc) (push) Skipped
Linux / latest (clang, no, all) (push) Skipped
Linux / latest (clang, no, default) (push) Skipped
Linux / latest (clang, no, printf-builtin) (push) Skipped
Linux / latest (clang, no-dbg) (push) Skipped
Linux / latest (clang, no-testable-ke) (push) Skipped
Linux / latest (clang, yes, all) (push) Skipped
Linux / latest (clang, yes, default) (push) Skipped
Linux / latest (clang, yes, fuzzing) (push) Skipped
Linux / latest (coverage) (push) Skipped
Linux / latest (dist) (push) Skipped
Linux / latest (gcc, no, all) (push) Skipped
Linux / latest (gcc, no, default) (push) Skipped
Linux / latest (gcc, no, printf-builtin) (push) Skipped
Linux / latest (gcc, yes, all) (push) Skipped
Linux / latest (gcc, yes, default) (push) Skipped
Linux / latest (nm) (push) Skipped
Linux / latest (no-dbg) (push) Skipped
Linux / latest (no-testable-ke) (push) Skipped
Linux / latest (yes, ld) (push) Skipped
Linux / crypto (ubuntu-22.04, openssl-sys) (push) Skipped
Linux / crypto (ubuntu-latest, botan) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-3) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-4) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-awslc) (push) Skipped
Linux / crypto (ubuntu-latest, openssl-sys) (push) Skipped
Linux / crypto (ubuntu-latest, wolfssl) (push) Skipped
Linux / older (clang, ubuntu-22.04, all) (push) Skipped
Linux / older (gcc, ubuntu-22.04, all) (push) Skipped
Linux / older (gcc, ubuntu-22.04, nm) (push) Skipped
Linux / alpine (push) Skipped
macOS / pre-check (push) Failing after 4s
macOS / macos (macos-14) (push) Skipped
macOS / macos (macos-latest) (push) Skipped
SonarCloud / pre-check (push) Failing after 4s
SonarCloud / sonarcloud (push) Skipped
TKM / pre-check (push) Failing after 4s
TKM / tkm (push) Skipped
Windows / pre-check (push) Failing after 4s
Windows / cross-compile (win32) (push) Skipped
Windows / cross-compile (win64) (push) Skipped
Windows / native (i686, mingw32, win32) (push) Skipped
Windows / native (x86_64, mingw64, win64) (push) Skipped
Co-Authored-By: Claude Opus 5.5 <[email protected]>
5.0 KiB
5.0 KiB
Память проекта
Основная работа в репозитории — Android-приложение SHX VPN (src/frontends/android), форк клиента strongSwan.
Описание приложения, кода, локализации и релиза: src/frontends/android/docs/README.md.
Дизайн: src/frontends/android/docs/design/README.md (макет «Финал 2026»).
Android-приложение: дизайн и UI
- Эталон — макет «Финал 2026» (артборды
F_*, тёмная темаD_*): живой холст https://claude.ai/artifact/UCC88C9hkU3hDU2YwMck1a, копия исходников вdocs/design/final-2026/. Экраны делаются строго по макету; новый экран сначала появляется на холсте. - UI собирается только из компонентов макета:
ui/compose/design/ShxKit.kt,ShxIcons.kt, цвета и шрифтыui/compose/theme/ShxDesign.kt(LocalShxColors,ShxType). Сторонние цвета, размеры и стандартные M3-диалоги не использовать. - Изменили экран в коде — обновите
F_*и парныйD_*на холсте и копию вdocs/design/final-2026/.
Android-приложение: строки и переводы
- Языки: en (база), ru, de, pl, uk, zh-rCN, zh-rTW. Новая строка добавляется сразу во все семь
values*/strings.xml. - Плейсхолдеры и
\nкак в английской строке; кавычки и plurals по языку — см. раздел «Локализация» вdocs/README.md. - После правок строк смотреть de и uk на эмуляторе (
adb shell cmd locale set-app-locales one.shx.strongswan.ext --locales de-DE): длинные слова не должны переноситься в навигации и заголовках. Сброс —--locales "".
Android-приложение: сборка и выкладка
- Бакет S3 (Selectel,
shx-app) ПРИВАТНЫЙ. Публичного чтения нет и включать его не нужно:GET https://s3.ru-7.storage.selcloud.ru/shx-app/latest.jsonвсегда отдаётAccessDenied— это норма, а не ошибка выкладки. Проверять результат публикации только авторизованно:aws s3 cp s3://shx-app/latest.json -(endpoint и ключи из.env). - Сборка и публикация — скриптом
build-local.sh(Git Bash) илиbuild-local.ps1вsrc/frontends/android: он читает.env, собираетassembleRelease, подписывает keystore'ом из.env, генерируетlatest.json(sha256/size/versionCode) и заливаетshx-vpn.apk+latest.jsonв корень бакета сCache-Control: no-cache. - Порядок релиза:
--skip-upload→ smoke-тест APK на эмуляторе (AVDshx36, все вкладки,adb logcat -b crash) → выгрузка именно проверенногоbuild/publish/shx-vpn.apkиlatest.jsonчерезaws s3 cp→ сверкаlatest.jsonв бакете. Выгрузка в S3 — только с подтверждения владельца. .envнельзя парсить черезsource/eval: значенияNOTES_RUиAWS_CA_BUNDLEсодержат пробелы и обратные слэши. Разбирать только построчноKEY=...(как вbuild-local.sh).- aws cli установлен через pip:
%APPDATA%\Python\Python313\Scripts\aws(скрипт сам добавляет путь в PATH). versionCodeрастёт вручную вapp/build.gradle; перед сборкой сверять сversionCodeвlatest.jsonбакета.NOTES_RUв.env— заметки релиза (попадают вlatest.json→ диалог обновления в приложении); обновлять под релиз..envне в git: в worktree лежит своя копия, после релиза перенестиNOTES_RUв.envосновного checkout.- Сборка из worktree: скопировать игнорируемые входы из основного checkout (
.envс абсолютнымKEYSTORE_FILE,local.properties,Android.common.mk,app/src/main/jni/openssl/, сгенерированные исходники libstrongswan — список вdocs/README.md) и собирать сORG_GRADLE_PROJECT_shortNdkCommands=true(иначе линковка упирается в лимит длины команды Windows). - Автообновление приложения:
logic/updates/UpdateManager.ktкачает манифест/APK, сверяет SHA-256 и подпись.