How to Set Up a VPN on Android from Scratch: Install a Client, Import a Subscription, Verify It Works
For Android users setting up a VPN for the first time: get a client, import a subscription, grant VPN permission, add the app to the battery whitelist, and verify it works — every step shows what to tap and what you should see.
Setting up a VPN on Android takes just four steps: install a client, import a subscription link, grant the system VPN permission, and verify it really works. The hard part isn't the theory — it's knowing which menu each step lives in and what you should see once you tap. This guide walks through the whole process in the order you'll actually do it, spelling out what to tap and what to expect, and finishes with a troubleshooting order for when something goes wrong.
This article is for anyone using a VPN on Android for the first time. No root and no custom ROM required — Android has a built-in VPN interface, and any client that connects through it has to be approved in a system dialog. The menu paths below follow common Android versions; names may differ slightly between manufacturers.
Three things to have ready first
Before you start, make sure all three are within reach — it saves a lot of backtracking.
- An Android phone. The system VPN interface has been part of Android since 4.0, and it needs neither root nor any extra certificate.
- A working subscription. Once your account is set up, the subscription link is on the download page in your user panel. Getting started doesn't require an email address.
- A network connection that works. Your phone has to be able to reach the subscription URL the first time you import it. If it won't load, switch between Wi-Fi and mobile data once and try again.
A “subscription” is the standard approach for services like this: the server encodes your route information into a single link, and the client pulls it to build the node list automatically. When routes change, one refresh in the client syncs everything — no hand-editing config files, which is what makes it less work than importing nodes one by one.
Android's VPN is a system-level interface, not something each app implements on its own. The first time you connect you'll always see a system dialog — that isn't suspicious behavior; it's the opposite: no app can quietly take over your traffic without it.
Getting a client: which of the two paths to take
There are two kinds of client you can use on Android, and which one you pick depends on the subscription format you have.
Path one: get it from the download page in your panel
VPNOh's download page offers clients that match your subscription. Format and client are paired automatically, so you don't have to work out which link type you have — just install and import as prompted. If it's your first time, start here.
Path two: use a general-purpose client
If you already have a client you're comfortable with, you can keep using it. Common choices include v2rayNG, Clash Meta for Android, Hiddify, and NekoBox; they run on different cores such as Xray, mihomo, and sing-box, and each has its own requirements for subscription formats.
There are two main categories of subscription format:
- Universal subscription: a base64-encoded string of node links (ss://, vmess://, vless://, trojan://, and so on) that clients like v2rayNG and NekoBox can parse directly.
- Clash config: a complete YAML configuration that only clients built on the mihomo (Clash Meta) core can read.
Pasting a Clash config into a client that only understands base64 usually gives you a “parse failed” error, or an empty node list after updating. When that happens, check whether the formats match before you suspect the link itself.
| Item | Client from the panel | General-purpose client |
|---|---|---|
| Subscription format | Matches the panel output automatically | You pick the format that matches the core |
| Protocol support | Follows the server-side configuration | Depends on the bundled core version |
| How it updates | Updates prompted by the panel | You update the app or core yourself |
| Best for | First-timers who want the easy route | Users who already have a preferred tool |
Importing a subscription: what to tap at each step
The example below uses pasting a subscription link into the client; the whole process takes about two minutes.
- Find the subscription link on the download page in your user panel and copy it in full. These links are usually long, so make sure you don't miss the characters at the end.
- Open the client, go to the “Subscription” page, and tap “+” or “New subscription.”
- The name can be anything you like, such as VPNOh; paste the link into the address field. Some clients can detect it from the clipboard automatically.
- Save, then tap “Update” or “Refresh” and wait for the node list to appear. The number of nodes should match the number of routes shown in your panel.
- Select a node and go back to the home screen to tap connect; you can also run a latency test first and pick the node that responds fastest.
Once the import is done, use these checks to confirm the subscription was actually read:
- ✅ A node list appears under the subscription entry, with the same count as the routes in your panel
- ✅ After tapping “Update,” you can see the time of the last update
- ✅ Individual nodes show a specific protocol name (such as VLESS or Trojan) rather than “Unknown”
- ❌ The list is empty or shows “parse failed”: first check that the link was copied in full, then check whether the format matches
A subscription link contains your account credentials and works like a password. Don't forward it to group chats or post it on public pages; if it has been exposed, contact support to have it replaced.
Granting VPN permission and the battery whitelist
The first time you tap connect, Android shows a system dialog titled something like “Connection request,” explaining that an app wants to set up a VPN connection. Tap “OK” to grant it; tap “Cancel” and the connection fails. The dialog is drawn by the system and appears once per client on the first connection, then never again.
Once the connection is up, a key icon appears in the status bar (a shield on some systems), and pulling down the notification shade shows “VPN connected.” Those two signs mean the tunnel is established — but they don't prove your traffic is really going out through the exit you picked. Full verification is in the next section.
Two system settings that are easy to overlook
- Only one VPN at a time. Android allows just one VPN app to be active at any given moment. If you have another VPN or accelerator app running on the phone, disconnect it first — otherwise the new connection will fail or the two will fight over the slot.
- “Always-on VPN” and “Block connections without VPN.” Both live in the system VPN settings. The first makes the system reconnect the chosen app automatically after a reboot; the second cuts off all traffic when the tunnel drops. They suit situations where stability matters a lot, but when misconfigured they show up as “no internet at all.”
Get regular connections working reliably first, then turn on “Always-on VPN.” If the client gets killed by the system after that, the phone simply loses its connection, which is easy to mistake for a phone fault.
Adding the client to the battery whitelist
Many manufacturer builds manage background apps aggressively. If you skip this, the connection may be cleaned up a few minutes after the screen locks, which shows up as “it keeps dropping after a while.” The entry points below are approximate and vary by version — go with whatever you find by searching for “battery” or “battery optimization” in Settings.
| System / Manufacturer | Rough path |
|---|---|
| Stock Android | Settings → Apps → App info → Battery → Unrestricted |
| Xiaomi / Redmi | Settings → App settings → App management → Battery saver → No restrictions |
| Huawei / Honor | Settings → Apps → App launch → Manage manually |
| OPPO / OnePlus / realme | Settings → Battery → App battery management → Allow background running |
| vivo / iQOO | Settings → Battery → Background power management |
| Samsung | Settings → Battery → Background usage limits → Remove from Sleeping apps |
Verifying it works: four signals you can check yourself
The client saying “Connected” only means the tunnel was established. In rule mode, some traffic doesn't go through the tunnel by design, so “connected” isn't the same as “working.” Check the four items below in order — you've only truly got it running when all four pass.
| Check | What you should see | What to check first if it doesn't match |
|---|---|---|
| System status bar | A key icon appears and the notification shade shows “VPN connected” | Did you tap “OK” in the permission dialog? Reconnect once |
| Exit address | Open an IP lookup page in the browser; the location matches the region of the node you selected | Is the client stuck in “direct” mode, or did the node never actually connect? |
| DNS resolution | The DNS leak test page shows a resolver that isn't your local ISP | Check the client's DNS settings and make sure “remote DNS” is enabled |
| Real-world access | The target site or app opens normally and loads at a steady speed | Switch nodes or protocols, or check your routing rules |
DNS is the item people overlook most. If domain names are still resolved by your local ISP's DNS after you connect, browsing can be unstable even when the exit address has changed — that's what's usually called a DNS leak. Most clients offer a “remote DNS” or “DNS over HTTPS” option; turn it on and run the test again.
Common snags and the order to check them in
Listed below from most to least frequent. Work from the top down and you'll cover almost everything a beginner runs into.
- Subscription import fails. Three common causes: the link wasn't copied in full (truncated at the end, or an extra space), the format doesn't match (a Clash config imported into a client that only understands base64), or the current network can't reach the subscription URL. For the first two, redo the link; for the third, switch networks and try again.
- It stays on “Connecting.” Try another node first; then check that the system time is accurate, since a clock offset can break the handshake for some protocols; if it still won't connect, switch protocol or port and retry.
- It connects but pages won't load. Usually DNS isn't going through the tunnel, your routing rules are sending the target domain direct, or there's a conflict with the system's “Private DNS” setting. Try setting Private DNS to “Automatic” temporarily, then check the client's DNS options.
- It drops after a while. The app isn't on the battery whitelist, it's being killed in the background, or a switch between Wi-Fi and mobile data forced a reconnect. Go back to the table in the previous section and work through it item by item.
- It says the VPN is in use by another app. Android allows only one VPN at a time — disconnect the other app first, then connect.
For a more detailed breakdown of failure types and how to handle each one, see the site's troubleshooting guide; node selection and regional differences are covered on the routes page.
Summary: four steps, then three things to confirm
Back to the start: setting up a VPN on Android from scratch is four steps — install a client → import a subscription → grant permission and add the app to the battery whitelist → verify the exit and DNS. Once that's done, confirm three things: a key icon in the status bar, an exit address that matches the node's region, and DNS resolution that isn't handled by your local ISP.
VPNOh simplifies these parts of the process: the download page provides a matching client, and importing the subscription generates the node list automatically; traffic is protected with military-grade encryption; an account allows unlimited simultaneous devices, so a phone and a tablet can share one subscription; and getting started doesn't require an email address, with a 14-day no-questions-asked refund.
If you don't have a subscription yet, you can start free; if you'd rather compare tiers first, the pricing page covers prices and data allowances. Other platforms follow much the same process; the main differences are where the permission dialogs appear and where background management lives.
VPNOh Cross-Border Network Acceleration Subscription
100+ countries / 170+ routes, unlimited simultaneous devices, 14-day no-questions-asked refund.