System Requirements
- Minimum Version: Android 8 (API level 26) or newer
- Architecture: ARM and x86 (32-bit and 64-bit)
- Permissions: VPN permission required for tunnel creation
Download and Installation
The Android app is available from multiple sources:Google Play
Install from Google Play Store
F-Droid
Open-source app repository
Mullvad Website
Direct APK download
GitHub Releases
Official GitHub releases
Architecture
The Android app has a unique architecture adapted to Android’s security model:VPN Service API
Unlike desktop platforms, Android apps cannot directly access the firewall. Instead, the app uses Android’s VPN Service API:- All Traffic Routing: Sets routes
0/0and::0/0to route all traffic through the app - Leak Protection: The routing configuration prevents traffic from bypassing the VPN
- System Integration: Works with Android’s native VPN management
- Per-App VPN: Android system can designate which apps use the VPN
System Service
The app bundles the samemullvad-daemon used on desktop:
- Shared Codebase: Core VPN logic is identical to desktop versions
- Native Library: Daemon runs as a native library within the app
- WireGuard: Uses the same WireGuard implementation as desktop
- API Integration: Communicates with Mullvad API for server lists and account management
UI Layer
Native Android UI built with Kotlin:- Material Design: Follows Android design guidelines
- Jetpack Compose: Modern Android UI framework
- Permissions: Handles VPN permission requests
- Notifications: Connection status in notification area
Security Features
VPN Service API Leak Protection
The app uses the VPN Service API to ensure all traffic goes through the VPN:The VPN Service API is the only mechanism available to Android apps for routing network traffic. Direct firewall manipulation is not possible without root access.
Block Connections Without VPN
Android includes a system-level setting that enhances security: Location: Settings → Network & Internet → VPN → Mullvad VPN → ⚙️ → Block connections without VPN Effect:- Prevents all traffic when VPN is not active
- Works at the OS level, independent of the app
- Recommended for maximum security
Kill Switch
The app includes an always-on kill switch:- Implementation: Via VPN Service API routing
- States: Active during connecting, disconnecting, and error states
- Cannot be Disabled: Security is always enforced
Exempt Traffic
Some Android system traffic bypasses the VPN even with “Block connections without VPN” enabled:- Connectivity Checks: DNS lookups and HTTP(S) connections to verify internet access
- Network Time: NTP traffic for clock synchronization
- Hotspot Traffic: Traffic to/from hotspot clients
These exemptions are implemented by Android itself and affect all VPN apps. Mullvad has reported these issues to Google: Issue 249990229 and Issue 250529027.
DNS Leak Protection
DNS queries are protected:- Default: DNS queries go to VPN server via tunnel
- Custom DNS: Can configure custom DNS servers (queries still through tunnel)
- Content Blocking: Optional blocking of ads, trackers, and malware at DNS level
Features
Full WireGuard Support
- WireGuard Protocol: Modern, fast VPN protocol
- Multihop: Route through two VPN servers for enhanced privacy
- Quantum-Resistant: Post-quantum cryptography support
- Obfuscation:
- WireGuard over TCP
- WireGuard over Shadowsocks
- WireGuard over QUIC
- Lightweight WireGuard Obfuscation (LWO)
- DAITA: Defense Against AI-Guided Traffic Analysis
Split Tunneling
Allow specific apps to bypass the VPN: Configuration:- Open Mullvad VPN app
- Navigate to Settings → Split Tunneling
- Select apps to exclude from VPN tunnel
- Banking apps that block VPN connections
- Local network services
- Apps requiring your real IP address
- Reducing battery usage for non-sensitive apps
Local Network Sharing
Access devices on your local network: Setting: Enable “Local network sharing” in app settings When Enabled:- Access to local IP ranges:
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 - Connect to printers, file shares, and smart home devices
- Multicast and broadcast traffic on local network
Always-On VPN
Android system feature for automatic VPN: Configuration: Settings → Network & Internet → VPN → Mullvad VPN → ⚙️ → Always-on VPN Benefits:- Automatically connects on device boot
- Reconnects automatically after network changes
- Works with “Block connections without VPN” for maximum security
Auto-Connect
App-level auto-connect setting: Setting: Enable in Mullvad VPN app settings Behavior:- Connects automatically when app starts
- Works with Android’s Always-on VPN
- Configurable connection preferences
User Interface
Main Screen
The main screen shows:- Connection Status: Secure/Unsecured/Connecting
- Server Location: Currently selected or connected server
- IP Address: Your current public IP (when connected, shows VPN server IP)
- Connection Time: Duration of current connection
- Connect/Disconnect Button: Large, easy to tap
Server Selection
Choose your VPN server:- Countries: Browse servers by country
- Cities: Select specific cities within countries
- Custom Lists: Create lists of favorite servers
- Filters: Filter by ownership (Mullvad-owned vs rented)
Settings
Accessible from the hamburger menu:- VPN Settings: Protocol, port, and obfuscation
- DNS Settings: Custom DNS and content blocking
- Split Tunneling: App exclusions
- Advanced: Multihop, quantum-resistant, DAITA
- Account: Account number, expiry, and logout
Notifications
The app uses notifications to show status:- Persistent Notification: Shows when VPN is active (required by Android)
- Connection Status: Updates as connection state changes
- Tap to Open: Tapping notification opens the app
- Quick Actions: Some Android versions support quick connect/disconnect
Battery Optimization
For reliable VPN operation:- Disable battery optimization for Mullvad VPN
- Navigate to: Settings → Apps → Mullvad VPN → Battery → Unrestricted
- This prevents Android from killing the VPN service
Some manufacturers (Samsung, Huawei, Xiaomi) have aggressive battery management. You may need to whitelist the app in manufacturer-specific battery settings.
Permissions
The app requires minimal permissions:- VPN Permission: Required for creating VPN tunnel (requested on first connect)
- Network Access: Basic permission for all network apps
- Run at Startup: For auto-connect functionality
- Prevent Sleep: To maintain VPN connection
Unlike many VPN apps, Mullvad does not request location, storage, or other unnecessary permissions.
File Locations
App data is stored in Android’s private app directory:- Settings:
getFilesDir()- Not accessible without root - Logs:
getFilesDir()- Can be exported via app - Cache:
getCacheDir()- Cleared automatically by Android when needed
Logs and Problem Reports
To submit logs for troubleshooting:- Open Mullvad VPN app
- Navigate to Settings → Report a problem
- Add description of issue
- Tap “Send report”
- Note the report ID for reference
Known Limitations
Android System Limitations
- Exempt Traffic: Some system traffic bypasses VPN (see above)
- Manufacturer Customizations: Device manufacturers may modify Android in ways that affect VPN behavior
- Battery Management: Aggressive battery optimization can terminate VPN
- VPN API Limitations: Cannot prevent all possible leaks (e.g., some IPv6 leaks on some devices)
App Limitations
- No Root Access: Cannot directly manipulate firewall or routing table
- System VPN Slot: Only one VPN can be active at a time
- Per-App VPN: If system “always-on VPN” is configured per-app, split tunneling may conflict
Android Variants
The app is tested on standard Android (AOSP), but variations exist:- Samsung One UI: Generally works well, watch for battery optimization
- Xiaomi MIUI: Often requires aggressive battery optimization disabling
- Huawei EMUI: May require additional battery/permission settings
- Google Pixel: Recommended, closest to stock Android experience
- OnePlus OxygenOS: Generally compatible
- Custom ROMs: Usually compatible, especially LineageOS, GrapheneOS, CalyxOS
Troubleshooting
Cannot Connect
- Ensure VPN permission is granted
- Check “Always-on VPN” is not set to another VPN
- Disable other VPN or firewall apps
- Try disabling and re-enabling the VPN permission
- Restart device
Connection Drops
- Disable battery optimization for Mullvad VPN
- Check manufacturer-specific battery settings
- Ensure “Always-on VPN” and “Block connections without VPN” are enabled
- Try different servers or obfuscation protocols
App Not Starting at Boot
- Enable “Always-on VPN” in Android system settings
- Ensure app is not restricted from running at startup
- Check manufacturer-specific autostart settings
Split Tunneling Not Working
- Ensure apps are properly selected in split tunneling settings
- Force stop the app and reconnect
- Some apps (like system apps) may not be split-tunnable
- Check if “Always-on VPN” is configured per-app (conflicts with split tunneling)
Next Steps
Account Management
Manage your Mullvad account
Security Details
Understand Android VPN security
Server Selection
Choose the best server
Settings Guide
Configure advanced settings