Skip to content

Apply per-app proxy rules at VPN boundary#60

Draft
cagedbird043 wants to merge 2 commits into
SagerNet:devfrom
cagedbird043:fix/per-app-proxy-vpn-builder
Draft

Apply per-app proxy rules at VPN boundary#60
cagedbird043 wants to merge 2 commits into
SagerNet:devfrom
cagedbird043:fix/per-app-proxy-vpn-builder

Conversation

@cagedbird043
Copy link
Copy Markdown

When Android per-app proxy override is enabled, treat the app Settings as the authoritative source for VpnService.Builder allowed/disallowed applications. Imported profiles may omit include_package/exclude_package entirely, so VPN startup should not depend on those profile fields being present before applying the app-level override.

This keeps profile TunOptions as the fallback when the app override is disabled.

Tested: ./gradlew :app:compileOtherDebugKotlin

@cagedbird043 cagedbird043 force-pushed the fix/per-app-proxy-vpn-builder branch from d72a828 to 6ddb6a0 Compare May 17, 2026 12:04
@nekohasekai nekohasekai force-pushed the dev branch 2 times, most recently from a3acee6 to 8a19c2a Compare May 22, 2026 03:45
@cagedbird043 cagedbird043 force-pushed the fix/per-app-proxy-vpn-builder branch 2 times, most recently from 0128520 to 40c186f Compare May 26, 2026 08:35
Profile override settings are app-owned state, while imported profiles may omit include_package or exclude_package entirely. The VPN boundary should keep Android's VpnService.Builder package rules synchronized with the enabled per-app proxy settings instead of depending on profile fields to be present.

Constraint: Profile override settings are app-owned state and imported profiles may omit include_package or exclude_package entirely.

Rejected: Depend on libbox override fields as the only source for VpnService.Builder package rules | the Android per-app proxy UI should stay authoritative when enabled.

Confidence: medium

Scope-risk: narrow

Directive: Keep VpnService.Builder package rules synchronized with Settings when per-app proxy override is enabled; use profile TunOptions only as the fallback.

Tested: ./gradlew :app:compileOtherDebugKotlin

Not-tested: Physical Android VPN startup with per-app override enabled.

Co-authored-by: OmX <omx@oh-my-codex.dev>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants