Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@ All notable user-facing changes are listed here. Detailed notes for older releas

## Unreleased

## 1.11.1 - 2026-10-07
- Added an opt-in **Autostart on boot** setting that restores the existing `ProxyService` from the last saved configuration after Android finishes booting.
- Added a non-exported `BOOT_COMPLETED` receiver using the existing foreground-service notification path; the app UI is not opened automatically.
- Boot autostart validates saved frontend state, skips invalid SOCKS5 configuration, avoids duplicate runtime startup, and records privacy-safe `BOOT_*` diagnostics.
- Added unit coverage for autostart persistence, boot-start decisions, saved proxy startup configuration, and repeated boot delivery.
- Verified reboot autostart on a physical Xiaomi/HyperOS device. HyperOS requires the user to grant the app its separate background/autostart permission.

## 1.11.0 - 2026-09-19
- Promoted the userspace `awg_warp` backend to the stable channel. Telegram traffic can use AmneziaWG/WARP inside the app without Android `VpnService`, root, or a system TUN interface.
- Added in-app Consumer WARP profile creation, multi-profile storage, explicit profile selection, manual `.conf` import, profile details, deletion, and safe private-key handling.
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ TgWsProxy запускает локальный прокси на Android-уст

## Статус проекта

**Версия исходников:** `1.11.0` (`versionCode 54`)
**Стадия:** stable release candidate; перед тегом требуется финальная проверка signed APK на устройстве
**Версия исходников:** `1.11.1` (`versionCode 57`)
**Стадия:** stable patch release candidate; автозапуск после reboot проверен на реальном устройстве

| Область | Статус |
|---|---|
Expand All @@ -57,7 +57,7 @@ TgWsProxy запускает локальный прокси на Android-уст
- отдельные политики маршрутов для Wi-Fi, мобильной и неизвестной сети;
- Fake TLS secrets формата `dd<secret>` и `ee<secret><domain_hex>`;
- необязательный passthrough probe-соединений на указанный masking domain;
- foreground service, уведомление о состоянии и watchdog локального listener;
- foreground service, уведомление о состоянии, watchdog локального listener и опциональный автозапуск прокси после загрузки Android;
- диагностика маршрутов, runtime status, экспорт отчёта и настраиваемое логирование;
- отдельные экраны обратной связи и проверки обновлений;
- русский и английский интерфейс.
Expand Down Expand Up @@ -279,7 +279,7 @@ app\build\outputs\apk\debug\app-debug.apk
Финальная signed release-сборка выполняется только при локально настроенном keystore:

```powershell
.\scripts\release.ps1 -Version v1.11.0
.\scripts\release.ps1 -Version v1.11.1
```

Скрипт проверяет соответствие тега `versionName`, подпись APK и формирует APK + SHA-256 в `dist/`.
Expand Down
10 changes: 5 additions & 5 deletions README_EN.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ The primary use case remains **MTProto Proxy → Cloudflare Proxy** on `127.0.0.

## Project status

**Source version:** `1.11.0` (`versionCode 54`)
**Stage:** stable release candidate; final signed-APK device acceptance is required before tagging
**Source version:** `1.11.1` (`versionCode 57`)
**Stage:** stable patch release candidate; boot autostart has been verified on a physical device

| Area | Status |
|---|---|
Expand All @@ -57,7 +57,7 @@ The primary use case remains **MTProto Proxy → Cloudflare Proxy** on `127.0.0.
- separate route policies for Wi-Fi, mobile data, and unknown networks;
- Fake TLS secrets in `dd<secret>` and `ee<secret><domain_hex>` formats;
- optional probe passthrough to a configured masking domain;
- foreground service, status notification, and a local listener watchdog;
- foreground service, status notification, local listener watchdog, and optional proxy autostart after Android boot;
- route diagnostics, runtime status, report export, and configurable logging;
- dedicated Feedback and Updates screens;
- English and Russian UI.
Expand Down Expand Up @@ -279,7 +279,7 @@ Build and copy the APK to the local `artifacts/` directory:
Build the final signed release only when the local keystore is configured:

```powershell
.\scripts\release.ps1 -Version v1.11.0
.\scripts\release.ps1 -Version v1.11.1
```

The script verifies that the tag matches `versionName`, verifies the APK signature, and produces the APK plus SHA-256 in `dist/`.
Expand Down Expand Up @@ -314,7 +314,7 @@ Current checklist: [docs/testing/README.md](docs/testing/README.md).
| Repository structure | [docs/development/repository-structure.md](docs/development/repository-structure.md) |
| Manual testing | [docs/testing/README.md](docs/testing/README.md) |
| Release preparation | [docs/releases/release.md](docs/releases/release.md) |
| `1.11.0` release notes | [docs/releases/v1.11.0_EN.md](docs/releases/v1.11.0_EN.md) |
| `1.11.1` release notes | [docs/releases/v1.11.1_EN.md](docs/releases/v1.11.1_EN.md) |
| `1.10.13` final audit | [docs/releases/v1.10.13-final-audit.md](docs/releases/v1.10.13-final-audit.md) |
| Change history | [CHANGELOG.md](CHANGELOG.md) |

Expand Down
4 changes: 2 additions & 2 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ plugins {
id("org.jetbrains.kotlin.android")
}

val releaseVersionCode = 54
val releaseVersionName = "1.11.0"
val releaseVersionCode = 57
val releaseVersionName = "1.11.1"

val buildNativeAndroid by tasks.registering(org.gradle.api.tasks.Exec::class) {
val script = rootProject.file("scripts/build-native-android.ps1")
Expand Down
27 changes: 17 additions & 10 deletions docs/releases/RELEASE_CHECKLIST.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# Release checklist — v1.11.0 stable
# Release checklist — v1.11.1 stable

## Metadata / documentation

- [ ] `releaseVersionName = 1.11.0`, `releaseVersionCode = 54`.
- [ ] `.\scripts\audit-release.ps1 -ExpectedVersion 1.11.0 -ExpectedVersionCode 54` passes.
- [ ] `releaseVersionName = 1.11.1`, `releaseVersionCode = 57`.
- [ ] `.\scripts\audit-release.ps1 -ExpectedVersion 1.11.1 -ExpectedVersionCode 57` passes.
- [ ] README RU/EN, CHANGELOG and release notes agree with source metadata.
- [ ] Canonical Worker guide is `docs/cloudflare-worker.md`; legacy path only redirects to it.
- [ ] No keystore, signing secret, local log, `.env`, `local.properties` or private governance files are tracked.
Expand All @@ -16,17 +16,24 @@
- [ ] Android unit tests pass.
- [ ] `assembleDebug` passes.
- [ ] packaged APK resource audit passes.
- [ ] release preflight accepts `v1.11.0`.
- [ ] release preflight accepts `v1.11.1`.

## Signed release artifact

- [ ] `.\scripts\release.ps1 -Version v1.11.0` succeeds with the release keystore.
- [ ] `.\scripts\release.ps1 -Version v1.11.1` succeeds with the release keystore.
- [ ] `apksigner verify --verbose --print-certs` succeeds.
- [ ] `dist\TgWsProxy-Android-v1.11.0-arm64-v8a.apk` exists.
- [ ] `dist\TgWsProxy-Android-v1.11.1-arm64-v8a.apk` exists.
- [ ] matching `.sha256` exists.
- [ ] APK reports `versionName 1.11.0` / `versionCode 54`.
- [ ] upgrade over signed `v1.10.14` succeeds without uninstall/data loss.
- [ ] upgrade over signed `v1.11.0-beta.1` succeeds without uninstall/data loss.
- [ ] APK reports `versionName 1.11.1` / `versionCode 57`.
- [ ] upgrade over signed `v1.11.0` succeeds without uninstall/data loss.

## Boot autostart

- [x] Autostart setting is disabled by default and persists when changed.
- [x] Real reboot starts the existing `ProxyService` without opening the Activity when the setting is enabled and saved config is valid.
- [x] Existing foreground notification path is reused.
- [x] Xiaomi/HyperOS device smoke confirmed that the OEM background/autostart permission may need to be enabled by the user.
- [ ] Reboot with autostart disabled leaves the proxy service stopped.

## Core Telegram runtime

Expand Down Expand Up @@ -80,6 +87,6 @@
- [ ] All automated checks above pass.
- [ ] Signed APK device smoke is complete.
- [ ] Release notes contain no unverified success claims.
- [ ] Create/push exact tag `v1.11.0`.
- [ ] Create/push exact tag `v1.11.1`.
- [ ] Release workflow publishes exactly APK + SHA-256.
- [ ] Downloaded release APK can be installed and launched.
34 changes: 34 additions & 0 deletions docs/releases/RELEASE_NOTES_v1.11.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# TgWsProxy Android v1.11.1

- `versionName 1.11.1`
- `versionCode 57`
- channel: **stable**

`v1.11.1` adds opt-in proxy autostart after Android boot while reusing the existing `ProxyService`, saved configuration, and foreground notification path.

[Полное описание на русском](https://github.com/Regstar2/tg-ws-proxy-android/blob/v1.11.1/docs/releases/v1.11.1.md) · [Full release notes in English](https://github.com/Regstar2/tg-ws-proxy-android/blob/v1.11.1/docs/releases/v1.11.1_EN.md)

## Главное

- Добавлена настройка **«Автозапуск при включении устройства»**, выключенная по умолчанию.
- После `BOOT_COMPLETED` приложение может автоматически восстановить локальный прокси с последней сохранённой конфигурацией.
- Activity не открывается автоматически: запускается только существующий foreground `ProxyService`.
- Для SOCKS5 невалидная сохранённая runtime-конфигурация безопасно пропускается; поддерживаемые frontend без `last_runtime_ips` не блокируются искусственно.
- Повторная доставка boot broadcast не должна создавать второй proxy runtime.
- Добавлены privacy-safe `BOOT_*` события и unit-тесты boot/autostart policy.
- Реальный reboot smoke подтверждён на Xiaomi/HyperOS. На таких прошивках пользователю может потребоваться отдельно разрешить фоновый автозапуск TgWsProxy в системных настройках.

## Установка

Скачайте `TgWsProxy-Android-v1.11.1-arm64-v8a.apk` из Assets. Поддерживается Android 8.0+ / `arm64-v8a`.

APK предназначен для обычного обновления поверх подписанного `v1.11.0` при той же release-подписи.

## Assets

Release workflow публикует:

- `TgWsProxy-Android-v1.11.1-arm64-v8a.apk`
- `TgWsProxy-Android-v1.11.1-arm64-v8a.apk.sha256`

Фактический SHA-256 находится в checksum asset.
28 changes: 14 additions & 14 deletions docs/releases/release.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
# Release workflow

Актуальный release target: **v1.11.0 stable**.
Актуальный release target: **v1.11.1 stable**.

## Метаданные

- `versionName 1.11.0`
- `versionCode 54`
- tag: `v1.11.0`
- APK: `TgWsProxy-Android-v1.11.0-arm64-v8a.apk`
- full RU notes: [v1.11.0.md](v1.11.0.md)
- full EN notes: [v1.11.0_EN.md](v1.11.0_EN.md)
- GitHub Release body: [RELEASE_NOTES_v1.11.0.md](RELEASE_NOTES_v1.11.0.md)
- `versionName 1.11.1`
- `versionCode 57`
- tag: `v1.11.1`
- APK: `TgWsProxy-Android-v1.11.1-arm64-v8a.apk`
- full RU notes: [v1.11.1.md](v1.11.1.md)
- full EN notes: [v1.11.1_EN.md](v1.11.1_EN.md)
- GitHub Release body: [RELEASE_NOTES_v1.11.1.md](RELEASE_NOTES_v1.11.1.md)

## Перед тегом

Expand All @@ -20,10 +20,10 @@
```
2. Собрать подписанный release:
```powershell
.\scripts\release.ps1 -Version v1.11.0
.\scripts\release.ps1 -Version v1.11.1
```
3. Установить signed APK поверх `v1.10.14` и отдельно поверх `v1.11.0-beta.1`; uninstall не использовать как способ обхода проверки подписи.
4. Проверить MTProto/CF, `awg_warp`, создание WARP-профиля, сообщения/media, reconnect и Wi-Fi ↔ mobile.
3. Установить signed APK поверх `v1.11.0` с той же release-подписью; uninstall не использовать как способ обхода проверки подписи.
4. Проверить MTProto/CF, `awg_warp`, сообщения/media, reconnect, Wi-Fi ↔ mobile и boot autostart с последней сохранённой конфигурацией.
5. Проверить custom provisioning Worker и поведение переключателя встроенных Worker.
6. Просмотреть экспорт diagnostics/logs на наличие секретов.
7. Зафиксировать результат в [RELEASE_CHECKLIST.md](RELEASE_CHECKLIST.md).
Expand All @@ -32,7 +32,7 @@

`.\scripts\ci.ps1` проверяет release metadata/localization/private-file audit, release preflight, Go module/tests, Android unit tests, debug APK build и packaged-resource audit.

`.\scripts\release.ps1 -Version v1.11.0` дополнительно:
`.\scripts\release.ps1 -Version v1.11.1` дополнительно:

- требует release signing material вне Git;
- собирает release APK;
Expand All @@ -42,12 +42,12 @@

## Публикация

`.github/workflows/release.yml` запускается для существующего tag `v1.11.0`. Workflow:
`.github/workflows/release.yml` запускается для существующего tag `v1.11.1`. Workflow:

1. checkout exact tag;
2. повторно запускает `scripts/ci.ps1`;
3. восстанавливает release keystore из GitHub Actions secrets во временный каталог hosted runner;
4. запускает `scripts/release.ps1 -Version v1.11.0`;
4. запускает `scripts/release.ps1 -Version v1.11.1`;
5. проверяет наличие одного APK и одного `.sha256`;
6. создаёт GitHub Release только если предыдущие шаги завершились успешно.

Expand Down
87 changes: 87 additions & 0 deletions docs/releases/v1.11.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# v1.11.1 — автозапуск прокси после загрузки Android

**Русский** · [English](v1.11.1_EN.md)

## О релизе

`v1.11.1` — стабильный patch-релиз TgWsProxy Android для Android 8.0+ / `arm64-v8a`.

Метаданные: `versionName 1.11.1`, `versionCode 57`.

Главное изменение — опциональный автозапуск существующего локального proxy runtime после завершения загрузки Android. Настройка выключена по умолчанию и не меняет текущее поведение приложения, пока пользователь явно её не включит.

## Автозапуск

В **Настройки → Приложение → Служба** добавлен переключатель **«Автозапуск при включении устройства»**.

Когда он включён:

1. Android отправляет приложению `BOOT_COMPLETED`;
2. TgWsProxy проверяет сохранённую настройку и последнюю конфигурацию прокси;
3. запускается существующий `ProxyService.ACTION_START`;
4. используется тот же foreground notification path, что и при обычном ручном запуске;
5. Activity не открывается автоматически.

Используются уже существующие сохранённые параметры: локальный порт, runtime config/IPs, pool size, выбранный frontend и связанные настройки маршрутизации.

Для SOCKS5 пустая/невалидная runtime-конфигурация не приводит к бессмысленному foreground service. Frontend, которому `last_runtime_ips` не требуется, не блокируется искусственно.

Ручная остановка прокси не выключает настройку автозапуска: она отвечает только за поведение при следующей загрузке системы.

## Совместимость с OEM-прошивками

Некоторые Android-прошивки дополнительно ограничивают boot/background autostart.

Реальный reboot smoke был подтверждён на Xiaomi/HyperOS после включения отдельного системного разрешения фонового автозапуска для TgWsProxy. Приложение не пытается обходить OEM-ограничения скрытыми механизмами.

## Диагностика

Добавлены privacy-safe события `BOOT_*` для:

- получения `BOOT_COMPLETED`;
- отключённого автозапуска;
- успешной отправки `ACTION_START`;
- пропуска из-за невалидного сохранённого состояния;
- уже запущенного runtime;
- ошибки старта.

Секреты, WARP/AWG ключи, токены и приватная runtime-конфигурация в эти события не записываются.

## Тесты

Добавлены unit-тесты для:

- значения по умолчанию `false`;
- сохранения/чтения настройки;
- disabled → skip;
- enabled + valid config → start;
- enabled + invalid SOCKS5 config → skip;
- MTProto/frontend без обязательного runtime IP config;
- повторной доставки boot события;
- сохранения и загрузки общей стартовой конфигурации.

Реальный reboot/device smoke подтверждён перед подготовкой релиза.

## Установка и обновление

Скачайте:

`TgWsProxy-Android-v1.11.1-arm64-v8a.apk`

Требования: Android 8.0+ и `arm64-v8a`.

Официальный APK использует ту же release-подпись и предназначен для обновления поверх `v1.11.0` без удаления приложения и потери app-private настроек.

## Артефакты

Release workflow создаёт:

- `TgWsProxy-Android-v1.11.1-arm64-v8a.apk`;
- `TgWsProxy-Android-v1.11.1-arm64-v8a.apk.sha256`.

## Ссылки

- [CHANGELOG](../../CHANGELOG.md)
- [Issue #95 — пользовательский запрос](https://github.com/Regstar2/tg-ws-proxy-android/issues/95)
- [Issue #96 — техническая реализация](https://github.com/Regstar2/tg-ws-proxy-android/issues/96)
- [v1.11.0](https://github.com/Regstar2/tg-ws-proxy-android/releases/tag/v1.11.0)
Loading
Loading