Android app for running a local VPN that routes device traffic through the selected upstream proxy or through explicit Direct mode.
The app does not change Android system proxy settings. It uses VpnService
and an embedded sing-box core.
- IPv4 only;
- IPv6 is explicitly unsupported;
- UDP/443 is blocked by default to avoid QUIC/HTTP3 bypass;
- if the selected upstream proxy remains unavailable after retries, VPN stops fail-closed;
- Direct mode is explicit and is never used as a silent fallback;
- proxy passwords must be masked in UI, logs, and diagnostics.
make test
make build-localDebug APK:
app/build/outputs/apk/debug/app-debug.apk
Install on a connected device:
make installThe app writes sanitized runtime logs to the in-app Logs screen and Android logcat:
adb logcat -s ProxySwitcherVPNLogs include route selection, proxy tests, upstream monitor results, reconnect attempts, backoff, TUN setup, engine lifecycle, and final fail-closed reasons. Proxy passwords are masked.
The version is read from VERSION.
make update-version
make releasemake release updates Gradle versionCode/versionName, runs checks, builds
the release, creates a commit/tag, and pushes the tag.
A signed release requires keystore.properties. Do not commit secrets or the
keystore.
