Administrator
发布于 2025-03-07 / 1 阅读

SDK安卓集成文档

一、安卓

1.下载导入SDK

下载 ProxyLibrary-release.aar,放到项目的 libs 文件夹中,并使用 gradle 导入

implementation(files("libs\\ProxyLibrary-release.aar"))

或者导入libs目录中所有 jar 文件

implementation fileTree(dir: 'libs', include: ['*.jar'])

sdk最小支持安卓sdk26,所以您的项目中,运行在所有 API Level ≥ 26 的设备上

minSdk = 26

2.初始化

在 AndroidManifest.xml 文件中添加权限声明(网络权限和应用内部文件的读写)

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

在 AndroidManifest.xml 文件中的 application 标签内设置 AppKey

<meta-data
    android:name="com.wayl.proxy.APP_KEY"
    android:value="xxxxxxxxxxxxxxxxxxxxxxxxx" />

完整 AndroidManifest.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <application
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.android"
        usesCleartextTraffic="true"
        tools:targetApi="31"
        tools:ignore="MissingApplicationIcon">
        
        <!--APP_KEY-->
        <meta-data
            android:name="com.wayl.proxy.APP_KEY"
            android:value="xxxxxxxxxxxxxxxxxxx" />

        <activity
            android:name="com.proxy.test.MainActivity"
            android:exported="true"
            android:theme="@style/Theme.android">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

调用init初始化方法

注意:

如果app存在权限申请,确保初始化和权限申请不要同步进行(最好在权限申请完成后调用)。
WaylProxy.init(context, result -> {
       Object data = result.getData();
       Boolean success = result.getSuccess();
       String message = result.getMessage();
       Log.i(TAG, result.toString())
       //成功打印数据{"message":"初始化完成","success":true}
});

3.功能使用

启动代理,传入需要的端口号,启动成功以后将监听该本地端口的所有请求

当然也可以不传,我们默认会随机一个端口使用

Result start = WaylProxy.start(context, 8080);
Result start = WaylProxy.start(context);
//成功打印数据  {"data":8080,"message":"代理启动成功,监听端口: 8080","success":true}

也可以调用该方法先拿到一个空闲端口

Result result = WaylProxy.getFreePort();
Integer port = (Integer) result.getData();
//成功打印数据  {"data":8080,"message":"完成","success":true}

举例:

(将请求转入到本地代理端口,类型全部是socks,http也可以。如需要使用其他依赖,请查看其他第三方依赖如何设置请求代理,这里不一一举例了)

(建议需要代理的所有请求不要使用缓存!)

okhhtp设置代理:

SocketAddress socketAddress = new InetSocketAddress("127.0.0.1", 8080);

Proxy proxy = new Proxy(Proxy.Type.SOCKS, socketAddress);

OkHttpClient client = new OkHttpClient.Builder()
        .connectTimeout(10, TimeUnit.SECONDS)
        .writeTimeout(10, TimeUnit.SECONDS)
        .readTimeout(10, TimeUnit.SECONDS)
        .connectionPool(new ConnectionPool(0, 1, TimeUnit.MILLISECONDS)) //禁用连接池
        .cache(null)
        .proxy(proxy)
        .build();

停止代理服务

WaylProxy.stop()

清除代理服务,该方法会清除掉所有的代理数据,(清理以后,是无法再次调用启动方法,需要初始化重新开启)

WaylProxy.clear()

获取代理状态,一共有三个值,

初始化是否成功

启动是否成功

验证套餐是否成功

Boolean initStatus = WaylProxy.initStatus();
Boolean startStatus = WaylProxy.startStatus();
Boolean validationStatus = WaylProxy.validationStatus();
Log.i(TAG, "initStatus:" + initStatus);
Log.i(TAG, "validationStatus:" + validationStatus);
Log.i(TAG, "startStatus:" + startStatus);

//设置监听
WaylProxy.addStateChangeListener(new ProxyStateChangeListener() {
    @Override
    public void onInitStatusChanged(boolean newStatus) {
        Log.i("WaylProxyListener", "初始化状态: " + newStatus);
    }
    @Override
    public void onValidationStatusChanged(boolean newStatus) {
        Log.i("WaylProxyListener", "验证状态: " + newStatus);
    }
    @Override
    public void onStartStatusChanged(boolean newStatus) {
        Log.i("WaylProxyListener", "验证状态: " + newStatus);
    }
});