一、安卓
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);
}
});