You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Android设备上运行的应用程序设置代理

Android 应用单独设置代理的实现方案

方法一:针对自定义网络请求配置代理(以 OkHttp 为例)

如果你的应用使用 OkHttp 发起网络请求,可直接在客户端构建阶段指定代理规则:

// 初始化代理对象,替换为实际的代理IP和端口
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("192.168.1.100", 8080));

// 构建带代理配置的 OkHttpClient
OkHttpClient client = new OkHttpClient.Builder()
    .proxy(proxy)
    // 若代理需要身份验证,添加认证逻辑
    .proxyAuthenticator((route, response) -> {
        String authCredential = Credentials.basic("proxy_user", "proxy_pass");
        return response.request().newBuilder()
            .header("Proxy-Authorization", authCredential)
            .build();
    })
    .build();

后续所有通过该 client 发起的请求都会自动走指定代理。

方法二:配置应用级网络安全规则适配系统代理

若要让应用的所有网络请求(包括系统发起的请求)走代理,可通过网络安全配置实现:

  1. 在 res/xml/ 下创建 network_security_config.xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>
  1. 在 AndroidManifest.xml 的 <application> 标签中引用该配置:
<application
    ...
    android:networkSecurityConfig="@xml/network_security_config">
    ...
</application>
  1. 代码中设置全局代理(Android 7.0+ 需申请 SYSTEM_ALERT_WINDOW 权限并获得用户授权):
// 配置全局代理
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("代理IP", 端口));
System.setProperty("http.proxyHost", "代理IP");
System.setProperty("http.proxyPort", String.valueOf(端口));
System.setProperty("https.proxyHost", "代理IP");
System.setProperty("https.proxyPort", String.valueOf(端口));

方法三:通过轻量 VPN 实现精准应用代理

如果需要严格控制仅当前应用走代理,可实现自定义 VPN 服务,将应用流量转发至代理服务器:

  1. 声明权限:在 AndroidManifest.xml 中添加
<uses-permission android:name="android.permission.BIND_VPN_SERVICE" />
<uses-permission android:name="android.permission.INTERNET" />
  1. 创建 VPN 服务子类:
public class AppProxyVpnService extends VpnService {
    private ParcelFileDescriptor vpnInterface;

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Builder vpnBuilder = new Builder();
        vpnBuilder.setSession("App Proxy")
            .addAddress("10.0.0.2", 32)
            .addRoute("0.0.0.0", 0)
            .addDnsServer("8.8.8.8")
            // 仅允许当前应用使用该VPN
            .addAllowedApplication(getPackageName());
        
        vpnInterface = vpnBuilder.establish();
        // 启动线程处理流量转发至代理服务器
        new ProxyForwardThread(vpnInterface).start();
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        if (vpnInterface != null) {
            try {
                vpnInterface.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        super.onDestroy();
    }
}
  1. 在代码中启动 VPN 服务,需引导用户完成授权。

内容的提问来源于stack exchange,提问作者Banana Pekan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:35:23