Android VPN split tunneling lets you decide which applications use the encrypted VPN tunnel and which applications connect directly through the local network. This is useful when only selected apps need a different exit region, while local banking, smart-home control, casting, or nearby devices should continue using the ordinary connection. It can also reduce unnecessary traffic through the tunnel and make troubleshooting much easier, provided that the rules are designed around the app’s actual network behavior.
The important point is that split tunneling is not simply an “on” or “off” switch for a website. Android routes traffic according to the application identity and the VPN profile. An app may use several domains, background services, content delivery networks, login endpoints, or persistent connections. If only part of that traffic matches the intended rule, the app may open successfully but fail during login, synchronization, media loading, or background updates.
How Android VPN split tunneling works
An Android VPN client normally creates a system VPN interface through Android’s VPN service framework. Applications send traffic to the operating system, and the VPN service determines whether that traffic is captured by the tunnel. Depending on the client, the interface may be described as split tunneling, per-app routing, app bypass, excluded applications, or included applications. The names differ, but the underlying choice is similar: define which apps belong to the VPN route and which do not.
There are two common models. In an include-list model, only the applications you select use the VPN. Everything else remains on the direct connection. This is usually easier to understand when only a few apps require a different route. In an exclude-list model, most applications use the VPN and selected applications bypass it. This is convenient when privacy or consistent routing is the default and only a small number of local apps must remain direct.
Windows
Desktop client support
Android
Per-app rule platform
110+
Countries covered
210+
Available routes
Split tunneling is different from choosing a VPN protocol. WireGuard, Shadowsocks, VMess, Trojan, and Hysteria2 describe how traffic is encapsulated or transported; split tunneling describes which application traffic enters that transport. A protocol can be connected correctly while the wrong apps are still routed through it. Changing protocols will not repair an incorrect application rule, and changing an application rule will not necessarily solve a handshake or congestion problem.
It is also different from a browser-only proxy extension. A browser extension usually affects one browser profile and may not cover background requests, another browser, or a separate desktop-style app. Android per-app VPN rules operate closer to the operating-system network layer, although coverage still depends on how the application creates traffic and how the client implements its VPN service.
Choose an include or exclude rule model
Before opening the client settings, list the applications that actually need the VPN. Do not begin by selecting every installed app. A practical list might include a work application, a browser used for a particular region, a streaming client, or a messaging tool that has trouble reaching its service directly. Then list applications that must remain direct, such as local payment tools, home-network controllers, printer utilities, or services that depend on a local IP address.
An include list is a good starting point when the requirement is narrow. For example, if only a media app and a research browser need the tunnel, include those applications and leave the rest direct. The result is easy to audit: if an unselected application shows VPN behavior, there is likely another device-wide setting or a second proxy involved.
An exclude list is more suitable when the VPN should cover almost everything. For example, you may want general application traffic to follow the selected route while bypassing a local camera controller and an internal office tool. In this mode, pay close attention to newly installed apps because they may automatically inherit the default VPN route.
- ✅ Use an include list when only a small number of apps need the tunnel.
- ✅ Use an exclude list when VPN routing should be the normal state for most apps.
- ✅ Keep local-device tools outside the tunnel when they require LAN discovery.
- ❌ Do not assume that selecting a browser also selects every app opened by that browser.
- ❌ Do not mix two VPN clients or a separate proxy application during testing.
Some clients offer a “bypass local network” option in addition to app rules. These settings solve different problems. App-based rules select traffic by application, while local-network bypass concerns destinations such as devices on the same Wi-Fi network. If both are enabled, document the combination before testing; otherwise, a failed printer connection may be blamed on the app list when the actual cause is a local-route policy.
Step-by-step setup on Android
Menu names vary between the official Android client, a compatible client, and different Android builds, but the workflow is consistent. First install the client from a trusted source and import the subscription or profile supplied by your service. If you use a subscription link, confirm that it has been imported into the intended profile rather than into a second copy of the client. The official Android setup guide can be used as a separate reference for installation and subscription import.
- Open the application list. Enter the client’s settings and look for Split tunneling, Per-app VPN, App routing, Bypass apps, or a similar item.
- Select the routing mode. Choose included applications or excluded applications. Read the description carefully because some clients use “bypass” to mean direct access, while others describe the same result as “not routed through VPN.”
- Mark only the required apps. Select the target application and avoid adding system components unless the client documentation specifically requires them.
- Save and reconnect. Disconnect the current tunnel, apply the rule changes, and connect again. Existing sockets may continue using their old route until the app or tunnel is restarted.
- Test one app at a time. Open the included app and confirm its expected behavior. Then open an excluded app and confirm that local services, direct access, or local-network functions still work.
- Record the result. Note the app, rule mode, selected profile, protocol, and observed behavior. This makes later troubleshooting more systematic.
Android may display a system permission dialog asking the client to create a VPN connection. Approve it only for the client you intend to use. The VPN key or status indicator shows that a tunnel exists, but it does not prove that every selected application is using the intended route. A connected status can coexist with an incorrect rule, a stale app socket, a DNS mismatch, or a profile that is not the one you just edited.
After the first successful test, add applications gradually. If a group of apps is selected at once and something fails, it becomes difficult to identify whether the problem is the rule, the app’s own service dependencies, or the chosen route. Applying one logical group at a time—such as a browser and its companion app—usually produces clearer results than changing every option together.
Verify routes, DNS, and service dependencies
Verification should cover more than whether a page loads. For an app that should use the VPN, check the visible exit address with a suitable IP-check page, confirm that the service can authenticate, and perform the action that originally required the route. For an app that should bypass the VPN, confirm that it can still reach local resources and that its behavior matches a direct connection. Use the site’s IP detection tool when you need to inspect the apparent exit address in a browser.
Browser testing has an important limitation: an IP address displayed in a browser confirms the browser’s route, not necessarily the route of another application. If the target is a video client, game, messaging app, or work tool, test that application directly. A browser may also cache DNS results, reuse an existing connection, or follow a different proxy configuration, so a browser result should be treated as one observation rather than a complete diagnosis.
| Test area | Expected observation | If it fails | First adjustment |
|---|---|---|---|
| Included app | Traffic follows the selected VPN exit and the core function works | App opens but login, images, or updates fail | Check related domains, DNS mode, and route consistency |
| Excluded app | Traffic remains direct and local services stay reachable | Local devices disappear or the app shows a VPN exit | Review bypass mode and local-network settings |
| Background service | Notifications and synchronization follow the intended policy | Foreground use works but background updates stop | Check battery restrictions and companion services |
| DNS behavior | Names resolve consistently with the selected route | Page loads partially or services resolve to the wrong region | Compare client DNS options and rule scope |
Application dependencies are a frequent source of confusion. A main app may rely on a browser for authorization, a system web component for an account callback, or a separate service for notifications. If the main app is included but its login helper is excluded, the login process may return to the starting screen. If the main app is excluded but a background service remains included, notifications may follow a different route from foreground requests.
DNS deserves separate attention. Some clients send DNS queries through the tunnel, while others allow direct DNS or offer a per-profile DNS option. An app can therefore appear to have a route problem when the real issue is inconsistent name resolution. Avoid adding many domain exceptions before checking the basic policy. First confirm that the selected application uses the intended route and that the client’s DNS behavior is consistent with that route.
Fine-tune battery and background behavior
A split-tunneling rule can reduce the amount of traffic sent through the VPN, but it does not automatically remove Android’s background restrictions. The VPN client still needs to maintain its tunnel, refresh profiles when requested, and respond to network changes. The target app may also be restricted by battery optimization, background data controls, or a system setting that pauses activity while the screen is off.
If a foreground function works but notifications or synchronization arrive late, check the battery policy for both the VPN client and the affected application. Do not immediately switch to a more complicated routing mode. First determine whether the tunnel is still connected, whether the app is allowed to run in the background, and whether Android has restricted background data on the current network.
Always-on VPN and the system kill switch can also change the result of a split-tunneling design. A kill switch may block traffic that is supposed to bypass the tunnel if the policy is configured to prevent all non-VPN access. Conversely, allowing bypass traffic may mean that excluded apps continue to connect directly when the VPN disconnects. Neither behavior is universally correct; choose according to the app’s role and the consequences of a direct connection.
- ✅ Exempt local casting, printer, and home-control tools when they depend on the same Wi-Fi network.
- ✅ Permit necessary background activity for the VPN client and important included apps.
- ✅ Reconnect after changing battery, always-on VPN, or kill-switch settings.
- ❌ Do not judge the rule from a single foreground launch.
- ❌ Do not disable every battery safeguard without identifying which app is being restricted.
Network changes are another useful test. Move between Wi-Fi and mobile data, or reconnect to the current network, then verify whether the rule survives the transition. Android may recreate the VPN interface after a network change, and an app may keep an old connection until it is restarted. If the route appears correct only after force-closing the app, record that behavior rather than assuming the split-tunneling rule is fully reliable.
Troubleshoot common split-tunneling failures
When an included app cannot connect, first confirm that the VPN profile itself works without split tunneling. Temporarily use a simple full-tunnel policy, connect, and test the app. If it still fails, investigate the selected route, protocol handshake, DNS, or service availability. If it works in full-tunnel mode but fails with app rules, focus on the rule model, companion apps, and stale connections.
When an excluded app unexpectedly uses the VPN, check whether the client is in include mode or exclude mode. Similar labels can lead to opposite results. Also look for Android’s system VPN settings, another proxy tool, a work-profile copy of the same app, or a browser-level proxy. Only one routing authority should be active during a controlled test.
When the app connects but some features do not, map the workflow rather than adding random exceptions. Separate authentication, API requests, persistent connections, media delivery, and background notifications. The application may use different services for each stage. Add a rule only when there is a clear reason, and retest the complete workflow after every meaningful change.
Compatible clients such as Clash Verge, sing-box, or Shadowrocket are useful in environments where the official Android client is not the preferred option, but their terminology and rule engines differ. Some use package-based application rules; others emphasize domain, IP, process, or profile policies. Do not copy a rule format from one client into another without checking how that client handles Android VPN permissions, DNS, TUN mode, and application identification. A subscription import can provide nodes and policies, but it does not guarantee that an Android per-app rule has been created correctly.
| Symptom | Likely area | Recommended sequence |
|---|---|---|
| VPN connects, selected app has no access | Rule scope, DNS, or profile selection | Test full tunnel, reconnect, then rebuild the small app list |
| Local device cannot be found | LAN bypass or excluded-app policy | Check local-network access and confirm the app is truly direct |
| Login succeeds but content does not load | Companion domains or persistent connection | Test the complete workflow and inspect related services |
| Background notifications stop | Battery optimization or background data | Review Android restrictions, then reconnect and retest |
Keep a known-good baseline. Save the original profile or note the initial mode, selected protocol, DNS option, and app list before experimenting. If a change makes the result worse, return to the baseline instead of stacking more exceptions. This approach is particularly important when a subscription contains several route types, because switching a route and changing split tunneling at the same time makes the outcome difficult to interpret.
For most users, the best configuration is not the most elaborate one. Select only the apps that have a clear routing requirement, keep local tools direct when necessary, confirm the exit route inside the target app, and monitor behavior after Wi-Fi changes or Android background restrictions. Once the basic policy is stable, you can fine-tune protocols, DNS, route groups, or additional exceptions without losing track of which setting controls the result.