通过代理网络(如果可用)重定向 Android 应用程序(正在使用库)的所有网络

Redirect all network of Android App (which is using Libraries) through a proxy network (if available)

我正在开发一个 Android 应用程序,我正在使用各种库,如 Picaso、Retrofit、Crashlytics 等,我的大学 WIFI 有代理。

我知道在向服务器发送 HTTP 请求时如何使用代理,但是我使用的所有库都有自己的 HTTP 请求,因此覆盖所有它们的 HTTP 类 会让人头疼,我什至不知道该怎么做。

那么,有没有办法通过代理(如果可用)路由应用程序的所有流量,就像任何库或某些 HTTP 请求覆盖所有传出请求一样。

您可以按照以下方式重定向特定的网络流量(基于每个应用程序)link。

Network traffic via Proxy

我按如下方式实现了这一点。 (忘记原出处了)

import java.net.Proxy;
import java.net.ProxySelector;

//setting Application-Wide proxy Values
private void setProxy() {
    //Device proxy settings
    ProxySelector defaultProxySelector = ProxySelector.getDefault();
    Proxy proxy = null;
    List<Proxy> proxyList = defaultProxySelector.select(URI.create("http://www.google.in"));
    if (proxyList.size() > 0) {
        proxy = proxyList.get(0);

        Log.d("proxy", String.valueOf(proxy));

        try {
            String proxyType = String.valueOf(proxy.type());

            //setting HTTP Proxy
            if (proxyType.equals("HTTP")) {
                String proxyAddress = String.valueOf(proxy.address());
                String[] proxyDetails = proxyAddress.split(":");
                String proxyHost = proxyDetails[0];
                String proxyPort = proxyDetails[1];
                Log.d("proxy", proxyType + " " + proxyHost + " " + proxyPort);

                System.setProperty("http.proxyHost", proxyHost);
                System.setProperty("http.proxyPort", proxyPort);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

将此方法放入您的基础 activity 的 onCreate 方法中,这样它就会在用户每次打开应用程序时执行。