Skip to content

Repository files navigation

Work Profile VPN Switcher

License Platform GitHub release (latest by date) Min SDK

Приложение для автоматического управления рабочим профилем Android при подключении VPN.

English | Русский


Русский

Описание

Приложение отслеживает VPN-подключения и автоматически отключает рабочий профиль когда VPN активен, и восстанавливает его состояние после отключения VPN. Удобно для случаев когда рабочий профиль содержит приложения которые не должны работать через VPN-туннель, или наоборот — когда нужно изолировать рабочие приложения от VPN-трафика.

Интерфейс

Скриншот интерфейса1 Скриншот интерфейса2 Скриншот интерфейса3 Скриншот интерфейса4 Скриншот интерфейса5 Скриншот интерфейса6

Возможности

  • Автоматическое отключение рабочего профиля при подключении VPN
  • Восстановление состояния профиля после отключения VPN (опционально)
  • Обратная логика — отключать профиль если он был включён вручную при активном VPN (опционально)
  • Режим allowlist — мониторить только выбранные VPN-приложения
  • Режим denylist — мониторить все VPN, кроме исключённых (в первую очередь для корректной работы совместно с AdGuard)
  • Фоновый опрос — резервный механизм для устройств, где события сети подавляются ОС
  • Мультиязычность — русский и английский интерфейс

Требования

  • Android 11 (API 30) и выше
  • Настроенный рабочий профиль (через Shelter или другое приложение)
  • Разрешение MODIFY_QUIET_MODE — выдаётся вручную через ADB (см. ниже)

Установка

  1. Скачать APK из Releases
  2. Установить на устройство
  3. Выдать разрешение через ADB:
adb shell pm grant io.github.snood21.workprofilevpnswitcher android.permission.MODIFY_QUIET_MODE

Примечание: разрешение нужно выдавать заново после переустановки приложения. При обычном обновлении сохраняется.

Настройка

  1. Открыть приложение
  2. В разделе VPN-приложения добавить нужные VPN-приложения
  3. Выбрать Режим мониторинга:
    • Все VPN, кроме исключений (по умолчанию) — срабатывает на любой VPN кроме добавленных в список (подходит для исключения AdGuard)
    • Только выбранные приложения — срабатывает только на VPN-приложения из списка
  4. Включить Мониторинг

Если автоматическое отключение не срабатывает

Некоторые прошивки (в том числе MIUI/HyperOS) подавляют события смены сети для фоновых приложений. В этом случае включите Фоновый опрос в разделе Расширенные настройки.

Также необходимо:

  • Разрешить автозапуск приложения в настройках телефона
  • Установить режим батареи для приложения: Без ограничений

Разрешения

Разрешение Для чего
ACCESS_NETWORK_STATE Отслеживание VPN-подключений
FOREGROUND_SERVICE Фоновый мониторинг
RECEIVE_BOOT_COMPLETED Автозапуск после перезагрузки
POST_NOTIFICATIONS Уведомления о блокировке профиля
VIBRATE Тактильная обратная связь
MODIFY_QUIET_MODE Управление рабочим профилем (выдаётся через ADB)

Известные ограничения

Определение рабочего профиля. Приложение определяет рабочий профиль как первый пользовательский профиль на устройстве, отличный от основного (личного). На большинстве устройств с одним настроенным рабочим профилем это работает корректно. Однако если на устройстве присутствует более одного дополнительного профиля — например, второй пользователь, гостевой профиль, приватное пространство (Android 15+) или clone-профиль некоторых производителей — приложение может ошибочно выбрать не тот профиль.

Публичный Android API не предоставляет стороннему приложению надёжного способа однозначно определить, какой именно из нескольких дополнительных профилей является управляемым (рабочим) — точная проверка (UserManager.isManagedProfile) либо требует специальных разрешений, недоступных обычным приложениям, либо ограничена контекстом текущего пользователя.

Рекомендация: если на вашем устройстве настроен только один дополнительный (рабочий) профиль, ограничение не проявляется. Если профилей несколько — поведение приложения не гарантировано; проверьте результат вручную после настройки.

Сборка из исходников

git clone https://github.com/snood21/workprofile-vpn-switcher.git
cd workprofile-vpn-switcher
./gradlew assembleDebug

После сборки выдать разрешение:

adb shell pm grant io.github.snood21.workprofilevpnswitcher.debug android.permission.MODIFY_QUIET_MODE

Поддержать разработчика

Boosty

Donatty (доступна оплата по СБП)

Лицензия

Apache License 2.0

Copyright 2025 snood21

English

Description

An Android application that automatically manages the work profile when a VPN connection is active. It disables the work profile when VPN connects and optionally restores its previous state when VPN disconnects.

Interface

Interface screen1 Interface screen2 Interface screen3 Interface screen4 Interface screen5 Interface screen6

Features

  • Automatic disabling of the work profile when VPN connects
  • State restoration after VPN disconnects (optional)
  • Reverse logic — disable profile if manually enabled while VPN is active
  • Allowlist mode — monitor only selected VPN apps
  • Denylist mode — monitor all VPN connections except excluded apps (e.g. AdGuard)
  • Background polling — fallback mechanism for devices where network events are suppressed by the OS
  • Multilingual — Russian and English interface

Requirements

  • Android 11 (API 30) or higher
  • A configured work profile (via Shelter or similar app)
  • MODIFY_QUIET_MODE permission — granted manually via ADB (see below)

Installation

  1. Download the APK from Releases
  2. Install on device
  3. Grant the required permission via ADB:
adb shell pm grant io.github.snood21.workprofilevpnswitcher android.permission.MODIFY_QUIET_MODE

Note: the permission must be re-granted after a clean reinstall. It persists through regular updates.

Setup

  1. Open the app
  2. In the VPN Applications section, add your VPN apps
  3. Choose Monitoring mode:
    • All VPN except exclusions — triggers for any VPN except apps in the list (suitable for excluding AdGuard)
    • Only selected apps — triggers only for VPN apps in the list
  4. Enable Monitoring

If automatic switching does not work

Some firmware (including MIUI/HyperOS) suppresses network change events for background apps. In this case, enable Background polling in the Advanced settings section.

You may also need to:

  • Allow autostart for the app in phone settings
  • Set battery mode for the app to No restrictions

Permissions

Permission Purpose
ACCESS_NETWORK_STATE Monitor VPN connections
FOREGROUND_SERVICE Background monitoring
RECEIVE_BOOT_COMPLETED Autostart after reboot
POST_NOTIFICATIONS Profile block notifications
VIBRATE Haptic feedback
MODIFY_QUIET_MODE Manage work profile (granted via ADB)

Known limitations

Work profile detection. The app identifies the work profile as the first user profile on the device that differs from the primary (personal) one. On most devices with a single configured work profile this works correctly. However, if the device has more than one additional profile — for example, a second user, a guest profile, private space (Android 15+), or a vendor-specific clone profile — the app may pick the wrong profile.

The public Android API does not give a third-party app a reliable way to determine which of several additional profiles is specifically the managed (work) profile — the precise check (UserManager.isManagedProfile) either requires special permissions unavailable to regular apps, or is limited to the current user's own context.

Recommendation: if your device has only one additional (work) profile configured, this limitation does not apply. If there are multiple, the app's behavior is not guaranteed — verify the result manually after setup.

Build from source

git clone https://github.com/snood21/workprofile-vpn-switcher.git
cd workprofile-vpn-switcher
./gradlew assembleDebug

After building, grant the permission:

adb shell pm grant io.github.snood21.workprofilevpnswitcher.debug android.permission.MODIFY_QUIET_MODE

Support the developer

Boosty

Donatty (including SBP)

License

Apache License 2.0

Copyright 2025 snood21

About

Автоматическое управление рабочим профилем при подключении VPN

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages