Иван Юрьевич · Итоги работы 2-3 октября 2026 года · 14 мин чтения

Главная новость этих двух дней: я подготовил первую версию Yurich Connect для Android TV и Google TV. У неё свой интерфейс, управление обычным пультом и отдельный подписанный APK. Предварительный релиз уже опубликован, и теперь проект можно попробовать на телевизоре или приставке.

Параллельно я выпустил обновление Windows-клиента, продолжил разбираться с восстановлением соединения на Android и подготовил новую версию браузерного расширения. Расскажу, что получилось, почему некоторые детали оказались важнее, чем кажется, и что ещё предстоит проверить. Начну с телевизора: ему в этот раз досталось больше всего внимания.

Android TV: теперь с пультом

Почему я сделал отдельный интерфейс

С телефоном всё понятно: нужная кнопка буквально под пальцем. С телевизором иначе. Экран дальше, ввод текста медленнее, а в руках только пульт со стрелками, подтверждением и кнопкой «Назад». Если элемент маленький или выделение почти не видно, даже выбор профиля становится неудобным.

Поэтому для TV я сделал отдельный горизонтальный интерфейс. Основной экран и навигация рассчитаны на пульт, а сетевое ядро, подписки и хранилище профилей остались общими с мобильным клиентом. Так я могу развивать подключения в одном проекте и при этом учитывать, как люди пользуются каждым устройством.

Телефонная версия остаётся на своём месте. Теперь у проекта два варианта сборки: для смартфона и для телевизора, каждый со своим интерфейсом и установочным файлом.

📺 Для меня главное в TV-версии: человек должен спокойно выбрать профиль и подключиться с пульта. Именно под этот сценарий я выстраивал экран и навигацию.

Главный экран Yurich Connect TV со списком профилей

Иллюстрация подготовлена на основе фотографии установленного приложения. Выполнены кадрирование, генеративная ретушь и скрытие личных данных. Изображение не является сетевым замером; обработка могла изменить мелкие детали интерфейса.

Управление пультом

На главном экране я разделил состояние соединения и список профилей. Видны выбранная технология, подключение, время сеанса и показатели трафика. Основные элементы сделаны крупнее, а текущий выбор с пульта хорошо заметен.

Поведение привычное: стрелки перемещают выделение, OK или Enter выполняет действие. Отсюда же доступны импорт, обновление подписки, настройки и логи. «Назад» закрывает диалог или возвращает к основному экрану. При этом выход из интерфейса сам по себе не отключает VPN: можно открыть другое приложение и продолжить пользоваться активным соединением.

Больше внимания здесь потребовала работа фокуса. После закрытия диалога выделение не должно пропасть, а при прокрутке нужно оставаться в списке и видеть, куда ведёт следующее нажатие. Для телевизора это основа удобства, поэтому я проверял такие переходы отдельно.

Как не потеряться в списке профилей

В одной подписке могут быть разные локации и несколько технологий для каждой из них. Чтобы не листать всё подряд, я добавил фильтры протоколов и прокрутку с пульта.

Сам список строится по мере необходимости: следующие элементы появляются при движении вниз. В тестах я проверил сценарий с 1000 синтетическими профилями. Это нагрузка на список и навигацию, а не тысяча доступных серверов. Здесь важно было убедиться, что пульт добирается и до тех элементов, которые сначала ещё не были отрисованы.

В итоге выбирать нужную технологию стало понятнее. При этом удобные названия не подменяют параметры: приложение использует исходную конфигурацию профиля.

Как добавить подписку без камеры

На телевизоре привычный сценарий «открыл камеру и отсканировал QR» обычно не подходит. Поэтому в TV-сборке нет сканера и разрешения камеры. Я сделал отдельный диалог: ссылку можно набрать экранной клавиатурой или вставить из буфера обмена, самостоятельно выбрав это действие.

Для ввода и загрузки сохранены ограничения по размеру. За импорт отвечает существующий механизм проекта: слишком большое содержимое или неудачная загрузка не должны бесконечно удерживать интерфейс.

Сам APK не содержит готового доступа, чужих подписок или паролей. Для подключения нужна своя действующая подписка либо совместимый сервер. И здесь напомню простую вещь: личная ссылка даёт доступ к подключению. В комментариях и на открытых скриншотах её лучше не показывать.

Импорт подписки в Yurich Connect TV

Обработанная иллюстрация диалога импорта и экранной клавиатуры. Поле ссылки пустое; данные профилей скрыты. Это иллюстрация пользовательского сценария, а не подтверждение работы конкретной подписки.

Протоколы на большом экране

Сетевую часть я сохранил общей с проектом. В первом предварительном TV-релизе предусмотрены следующие варианты:

  • VLESS Reality: TCP-подключение с параметрами из профиля; доступность зависит от сервера и сети.
  • NaiveProxy: HTTPS-прокси; один из вариантов для сетей, в которых UDP недоступен.
  • Hysteria2: QUIC/UDP; требует доступности UDP на пути до сервера.
  • VLESS XHTTP: Экспериментальный транспорт через совместимый Xray, с TLS или Reality.

Универсального протокола для всех приставок и операторов я не обещаю. На результат влияют сеть, адрес сервера, настройки и прошивка. Поэтому в приложении важна возможность выбрать другой профиль, если первый вариант в конкретной сети не подходит.

XHTTP пока сохраняет экспериментальный статус. Приложение умеет обрабатывать такой профиль, но сам факт появления в списке ещё не подтверждает работу через любого оператора.

Smart Route и Auto DNS

В TV-настройки я перенёс Smart Route и Auto DNS. Smart Route использует существующие списки доменов и явно разрешённых приложений. Известные российские сервисы могут открываться напрямую, остальные направления остаются в VPN.

Для телевизора я учёл приложения как из обычного Android-лаунчера, так и из телевизионного Leanback-лаунчера. Неизвестное приложение при этом не получает прямой маршрут лишь потому, что имя его пакета похоже на знакомое.

У Auto DNS своя задача: управлять DNS внутри VPN-конфигурации. Для NaiveProxy остаётся отдельный bootstrap-механизм, который определяет адрес самого сервера. Поэтому я не заявляю, что во всех режимах абсолютно любой DNS-запрос проходит внутри туннеля. Ещё один важный момент: сервис, который Smart Route направил напрямую, видит адрес обычного интернет-подключения.

Настройки Smart Route и Auto DNS в Yurich Connect TV

Обработанная иллюстрация настроек TV-версии. Личные имена, сроки подписки и показатели сеанса скрыты. Состояние переключателей на изображении не является рекомендацией одинаковых настроек для всех пользователей.

Что видно во время подключения

В TV-версии доступны время соединения, счётчики трафика и логи. Чувствительные данные маскируются существующим механизмом проекта, а чтение логов включается при открытии этого раздела.

На один статус «подключено» я бы всё же не полагался. После установки стоит открыть сайт или видео в другом приложении и убедиться, что данные действительно передаются. Счётчик трафика полезен, но не подтверждает доступность каждого ресурса.

В своих проверках я разделяю эти вещи: как ведёт себя интерфейс и проходит ли реальный интернет через выбранное подключение. Для предварительного релиза важно проверить обе стороны.

На каких устройствах можно попробовать

Первый TV APK я собрал для Android TV и Google TV с Android 7.0 / API 24 или новее. В одном файле есть ARM32 и ARM64: armeabi-v7a и arm64-v8a. Комплектация Flutter, sing-box, Xray и JNI-библиотек проверена для обеих архитектур.

На устройстве должны быть разрешены установка APK, Android VpnService и выдача согласия на VPN. У закрытых операторских приставок и нестандартных прошивок, включая YaOS, могут быть ограничения. Одной надписи Android в характеристиках недостаточно, чтобы гарантировать совместимость. Для x86 и x86_64 эта сборка не предназначена.

Также я добавил плитку и баннер для телевизионного лаунчера и предусмотрел отступы под overscan: важные элементы не должны попадать на обрезаемые телевизором края. Разные размеры экрана и увеличенный системный текст включены в проверки интерфейса.

Что я проверил, а что ещё впереди

Для TV-релиза прошли 179 Flutter-тестов, в том числе 19 TV-тестов, и 118 Android/Kotlin-тестов. Анализатор не сообщил замечаний. Отдельно проверены подпись APK и нужные библиотеки для обеих ARM-архитектур.

В этих проверках я уделил внимание пульту, переходам фокуса, длинному списку, импорту, возврату из логов и размерам интерфейса. Кроме автоматических результатов, есть фотографии приложения, установленного на физической приставке: лаунчер, профили, настройки и импорт.

Полный сетевой прогон на самой приставке ещё впереди. Мне нужно проверить протоколы и серверы, переключение Wi-Fi/Ethernet, сон, длительную работу в фоне и температуру устройства. Именно поэтому первая сборка опубликована как Preview. Состав и ограничения можно посмотреть в описании TV-релиза.

🧪 Preview означает, что первую версию уже можно пробовать, а проверка на реальных устройствах продолжается. Успешная сборка и установка ещё не дают оснований обещать стабильную работу 24/7.

Что с обновлениями телефона и телевизора

У первого TV-релиза версия 1.0.128-tv.20261003.1. Репозиторий общий с телефоном, но релизы и APK разделены. Стабильным телефонным релизом остаётся 1.0.127, а телефонный канал обновлений не должен предлагать телевизионный файл.

На телевизоре обновление пока ручное: нужно установить свой TV APK. Отдельный автоматический канал для TV я ещё не опубликовал. Первую сборку следует брать из официального релиза на GitHub.

Здесь есть нюанс, который лучше знать заранее: package ID у обоих вариантов общий. На одном устройстве телефонная и TV-сборка заменяют друг друга, а не устанавливаются рядом. Для обычного обновления удалять приложение и очищать профили не нужно; должны подходить подпись и номер сборки. Если потребуется вернуть прежний код без удаления данных, понадобится корректно подписанный APK с более высоким versionCode.

С чего начать

Для первого знакомства я предлагаю пройти простой сценарий:

  1. Установить именно TV APK из официального предварительного релиза.
  2. Открыть Yurich Connect TV из списка приложений приставки.
  3. Добавить личную подписку и выбрать профиль.
  4. Подтвердить согласие приложения и системный запрос на VPN.
  5. Проверить реальный сайт или видео в другом приложении.

Дальше я сосредоточусь на физических устройствах: подключениях, выходе из интерфейса, сне и пробуждении, потере сети и восстановлении. После этого нужен длительный прогон и оценка ресурсоёмкости на разных приставках.

Основа для этого уже есть: TV-интерфейс, управление пультом, подписки и общий сетевой код. Решение о стабильном релизе я хочу принимать по результатам реального использования.

Windows: понятнее подключение

Для Windows я выпустил версию 1.0.108. Она отмечена Latest на GitHub, но в описании остаётся Public Beta / Release Candidate. В этом обновлении я занимался выбором подходящего профиля, запуском соединения и диагностикой. Установщик и portable доступны в релизе.

Одна из важных доработок: клиент теперь хранит локальную историю отдельно для каждой сети и конфигурации профиля. Если подключение не удалось дома, это не повод заранее считать тот же сервер нерабочим в другой сети. История ограничена по объёму и сроку; секретные ссылки и исходные параметры сети в неё не записываются.

Выбор устроен так: «Авто» предпочитает последний успешный профиль текущей сети, «Скорость» учитывает свежие образцы передачи, а TCP/443 ограничивает выбор соответствующими профилями. Если нужна конкретная страна, профиль можно закрепить: при запуске он не будет автоматически заменяться другим.

Я ограничил общий бюджет подключения 45 секундами и сделал число адаптивных попыток конечным. Завершение системных операций и очистка процессов могут добавить время сверх этого бюджета. Отмена прекращает перебор; считать её сетевым отказом сервера клиент не должен.

Проверку выбранного профиля я отделил от рабочего подключения: она использует отдельное ядро на локальном порту, без изменения системного proxy и TUN. Добавил предупреждения о конфликтах маршрутов и возможном обходе через IPv6. Для TUN MTU доступны ручные значения 1500, 1400 и 1280; по умолчанию осталось 1500. Автоматического подбора здесь пока нет, а маршрутные изменения применяются после явного переподключения.

Ещё я поправил восстановление proxy-настроек, оставленных клиентом после сбоя: настройки другого приложения он не должен перезаписывать. Исправил вкладки VLESS/XHTTP, переносы текста и поведение Naive при смене режима подключения. Параметры профилей, DNS-провайдеры и Reality SNI при этом сохранил.

В итоговом наборе прошли 179 тестов. Повторный локальный пятиминутный прогон выполнил 20 472 запроса без ошибок, сохранил WebSocket и работающий процесс ядра. В первом прогоне были две ошибки из 21 268 запросов; их причину я пока не установил и не считаю закрытой. Эти цифры относятся к локальному стенду, а не к доступности всех серверов через любого оператора.

Установщик и portable рассчитаны на Windows 10/11 x64. У сборки пока нет подписи Authenticode, поэтому советую получать файлы из официального релиза и сверять SHA-256. Длительные реальные SSH/Codex-сессии, чистая установка Windows и отдельные сценарии сна остаются в списке проверок.

Android: восстановление связи

На телефоне я сосредоточился на том, что происходит с соединением в фоне и при смене сети. Новые изменения проверялись в тестовых сборках ветки 1.0.128. Стабильным опубликованным телефонным APK остаётся версия 1.0.127.

В интерфейсе я тоже навёл порядок: вместо неоднозначных «ИИ» и «Веб» теперь Hysteria2 и NaiveProxy. Reality и XHTTP отображаются с учётом транспорта и защиты конкретного профиля. Ради переименования я не менял технические идентификаторы, личные ссылки и форматы сохранённых профилей.

За состояние и восстановление отвечает нативный Android VPN-сервис. Скрытый Flutter-интерфейс не должен принимать те же решения параллельно. Я поправил обработку смены физической сети во время запуска, отмену устаревших проверок и передачу ошибок интерфейсу. Из резервной Flutter-проверки убрал принятие неподходящего сертификата.

Для исправлений 2 октября прошли 149 Flutter-, 111 Android- и 94 QA-теста. На физическом телефоне успешными оказались 21 из 24 сетевых сценариев. Один профиль Hysteria2 остался проблемным, а восстановление после смены сети местами занимало заметное время. Работу над этим я продолжаю: объявлять задачу полностью решённой пока рано.

Диагностика без компьютера

Чтобы разбирать такие случаи было проще, я добавил добровольно включаемую диагностику на семь дней. Она сохраняет доступные наблюдения о состоянии VPN, сменах сети, проверках соединения, перезапусках, памяти, температуре и завершениях процессов. Для записи компьютер не нужен.

Запись использует существующие события и проверки. Ради неё я не добавлял отдельный постоянный таймер, новый foreground service или дополнительный wake lock. Журнал ограничен по объёму и хранится локально в приватном хранилище. Пароли, ссылки подписки, UUID, адреса серверов и посещённые сайты в него не попадают.

Отчёт можно самостоятельно выгрузить в ZIP через системный выбор файла; автоматической отправки нет. Реализация прошла автоматические проверки, но полноценную запись и экспорт на физическом телефоне ещё нужно подтвердить. Если наблюдений нет, я не считаю это успешной работой VPN. И сама функция записи на неделю не означает, что недельный тест уже завершён.

Расширение: каталог подписок

Для расширения я подготовил локальный release candidate 0.4.0. В Chrome Web Store он ещё не опубликован: нужно закрыть вопросы публичной политики конфиденциальности и доступа к панели публикации.

Главное изменение для пользователя: теперь можно хранить до пяти подписок, переименовывать их, переключаться между ними и удалять с подтверждением. Я также добавил фильтры узлов, сортировку по задержке, отмену подключения и попытку возврата к прежней сессии при отмене смены подписки.

Для проверки соединения появились резервные HTTPS-ресурсы. Smart Route можно предварительно проверить локально, без DNS-запроса. Отчёт для поддержки я сделал без ссылки подписки, паролей, публичного IP, адресов серверов и пользовательских доменных правил. Сам он никуда не отправляется.

В проверках прошли 167 тестов и Chromium E2E с реальным HTTPS CONNECT на локальном прокси. Выполненный npm audit не показал известных уязвимостей в обновлённых зависимостях. Это хороший результат конкретной проверки, но я не выдаю его за гарантию отсутствия всех проблем безопасности. Боевые серверы подписки и Edge в этом прогоне отдельно не проверялись.

Отдельно уточню, чтобы не было путаницы: расширение управляет только трафиком браузера. Оно поддерживает стандартные HTTP/HTTPS-прокси и SOCKS4/SOCKS5 без авторизации. Прямого клиента VLESS, Hysteria2 или NaiveProxy в нём нет, поэтому нужны совместимые браузерные профили подписки.

Что получилось и что дальше

За эти два дня я подготовил основу Yurich Connect для большого экрана: отдельный интерфейс, управление пультом, подписанный ARM32/ARM64 APK и первый опубликованный Preview. Теперь можно переходить к последовательным проверкам на телевизорах и приставках.

На Windows стало понятнее управление запуском и выбором профиля. На Android я продолжил работу над восстановлением в фоне и диагностикой без компьютера. Для расширения подготовил новый кандидат с несколькими подписками и более удобным управлением подключением.

Все эти направления сейчас на разных стадиях. TV остаётся Preview, Windows описана как Public Beta / Release Candidate, мобильные исправления проходят тестирование, а расширение ждёт публикации. Следующий шаг для TV: реальный интернет, сон и восстановление сети на приставках. В остальных компонентах продолжу разбирать уже найденные проблемные сценарии.

Мне важно, чтобы проект становился удобнее в обычном использовании: с пультом, на телефоне, за компьютером и в браузере. Поэтому рассказываю и о готовых изменениях, и о том, что ещё не закрыто. Если попробуете TV-версию, напишите, на каком устройстве и в какой сети: такая обратная связь поможет точнее выбрать следующие проверки.

Иван Юрьевич. Продолжаю развивать Yurich Connect и делиться результатами. Новости и связь: ivan-it.net, Telegram, VK, Дзен.

Все статьи ↗