Skip to content

Apply per-app proxy rules at VPN boundary#60

Draft
cagedbird043 wants to merge 10 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 10 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

nekohasekai and others added 10 commits April 23, 2026 08:11
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