快速接入

最近更新时间:2025-12-05 17:22:51

我的收藏

开发环境要求

Android Studio 2.0+
Android 7.0(SDK API 24)及以上系统

SDK 引用及依赖配置

1. Maven 引入。
//多网聚合SDK
implementation 'com.tencent.linkboost:mpacc:2.9.5'
2. AAR 包引入。
说明:
使用 Maven 引入可忽略此步骤。
将 AAR 文件复制到工程目录下(例如:app / libs)。
在 Gradle 文件中增加依赖配置。
dependencies {
//添加 SDK 依赖
implementation fileTree(dir: 'libs', include: ['*.aar'])
//添加gson依赖
implementation 'com.google.code.gson:gson:2.8.9'
//添加加密库依赖
implementation 'androidx.security:security-crypto:1.0.0'
}

示例代码

VPN 模式

MpAccClient 初始化
说明:
SDK 认证也可按应用接入,调用接口 MpAccClient.setSign("appid","*****"),设备接入和应用接入只需设置其一即可
sign 生成方式可参见 控制台入门指南

private void initMpAcc() {
//腾讯云申请的datakey需传入(此处使用按设备接入)
MpAccClient.setDataKey("test-123456", "*");
mpAccClient = MpAccClient.getInstance(this);
}

发起加速
private void startAcc() {
try {
mpAccClient.registerAccCallback(accCallback);
//vpn加速需要用户授权
Intent vpnIntent = MpAccClient.prepare(this);
if (vpnIntent != null) {
startActivityForResult(vpnIntent,
VPN_REQUEST_CODE);
} else {
onActivityResult(VPN_REQUEST_CODE, RESULT_OK,
null);
}
} catch (MpAccSDKException e) {
e.printStackTrace();
}
}


@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intentdata) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == VPN_REQUEST_CODE && resultCode == RESULT_OK) {
try {
AccConfig accConfig = new AccConfig();
ArrayList<String> list = new ArrayList<>();
accConfig.setAccMode(AccConfig.ACC_MOD_BONDING); //设置加速模式
accConfig.setRoute("0.0.0.0", 0); //加速ip列表
//list.add("air.tv.douyu.android"); //传入需要加速的包名,不传默认对所有应用加速
accConfig.setWhiteList(list, 0);
mpAccClient.startAcc(accConfig);
} catch (MpAccSDKException e) {
e.printStackTrace();
}
}
}

资源释放
//在退出时释放资源,比如Activity的onDestroy方法中调用
private void stopAcc() {
try {
mpAccClient.unregisterAccCallback(accCallback);
mpAccClient.stopAcc();
} catch (MpAccSDKException e) {
e.printStackTrace();
}
}

SOCKS 模式

说明:
SOCKS 模式加速无需用户授权,MpAcc 初始化鉴权逻辑和状态监听逻辑和 VPN 模式一致。
private void initMpAcc() {
MpAccClient.setDataKey("test-123456", "*");
mpAccClient = MpAccClient.getInstance(this);
}
//发起加速(socks模式)
private void startSocksAcc() {
AccConfig accConfig = new AccConfig();
accConfig.setAccMode(AccConfig.ACC_MOD_BONDING)
.setPingInterval(3)
.setEnableSocks(true) //Socks模式需要设置为true
.setSocksPort(1080);//设置代理端口
try {
//监听加速状态回调
mpAccClient.registerAccCallback(accCallback);
mpAccClient.startAcc(accConfig);
} catch (MpAccSDKException e) {
e.printStackTrace();
}
}
private void stopSocksAcc() {
try {
mpAccClient.unregisterAccCallback(accCallback);
mpAccClient.stopAcc();
} catch (MpAccSDKException e) {
e.printStackTrace();
}
}
注意:
SOCKS 模式发起加速成功后(接收到 onAccSuccess 回调),业务需将网络库接口通过 SOCKS 协议封装发送,代理 IP 为本地 IP,代理端口和发起加速时 setSocksPort 设置的端口保持一致,流量才会进入加速隧道。
以下是常见的网络库切换 SOCKS5 示例:

//UDP使用socks5发包示例
private void testUdpSocks() {
try {
Log.i(TAG, "start testUdp");
//1、端口需和发起加速设置的setSocksPort保持一致
SocksProxy socksProxy = new Socks5(new
InetSocketAddress("localhost", 1080));
//2、将socksProxy设置给DatagramSocket
DatagramSocket clientSocket = new
Socks5Datagram(socksProxy);
//3、后续进行正常的发包业务
String message = "Hi, I am UDP client";
byte[] sendBuffer = message.getBytes();
DatagramPacket packet =
new DatagramPacket(sendBuffer, sendBuffer.length,
new InetSocketAddress("106.55.119.181", 8888));
clientSocket.send(packet);
//Received response message from UDP server.
} catch (IOException e) {
e.printStackTrace();
}
}
//HttpURLConnection使用socks代理
private void testHttpSocks() {
BufferedReader buff = null;
HttpURLConnection urlConnection = null;
try {
//创建proxy代理
Proxy socksProxy = new Proxy(Proxy.Type.SOCKS, new
InetSocketAddress("127.0.0.1", 1080));
URL url = new URL("url");
//Proxy添加给HttpURLConnection
urlConnection = (HttpURLConnection)
url.openConnection(socksProxy);
//后续进行正常的发包业务
} catch (Exception e) {
e.printStackTrace();
}
}
//OKHttp使用socks代理
private void testOkHttpSocks(){
//创建proxy代理
Proxy socksProxy =new Proxy(Proxy.Type.SOCKS,
new InetSocketAddress("127.0.0.1", 1080));
//Proxy添加给OkHttpClient
OkHttpClient client = new
OkHttpClient.Builder().proxy(socksProxy).build();
//后续进行正常的发包业务
}
//TCP Socket使socks用代理
private void testSocketSocks() {
Proxy socksProxy =new Proxy(Proxy.Type.SOCKS,
new InetSocketAddress("127.0.0.1", 1080));
Socket socket = new Socket(socksProxy);
//...
}


C++ SOCKS 模式

TCP 和 UDP 接入 SOCKS 参考:

常见问题解答

1. 使用 SDK VPN 模式加速,如果其他三方 App 也打开了 VPN 功能,加速是否生效?
答:不生效,Android 系统默认同一时间只能打开一个 VPN 服务,如果其他应用程序也打开了 VPN,当前加速 VPN 服务会被释放,onAccFail 回调错误码 -5,加速停止。
2. 如何使用 SOCKS 模式进行加速?
答:使用 SOCKS 模式进行加速,除了通过调用 startAcc 方法配置加速模式和 SOCKS 端口,还需要将业务相关的网络接口封装成 SOCKS5 代理发送,封装示例请参考 SOCKS 模式代码示例,代理 IP 默认为本机 IP ,端口需要与发起加速时传入的保持一致。
3. SOCKS 模式和 VPN 模式加速有什么区别?
答:两种模式都是为了获取业务数据流来进行加速转发,VPN 模式加速需要用户同意鉴权弹窗,并且系统 UI 上会出现小钥匙图标,使用 VPN 模式可以对当前手机上的任何三方应用进行加速。SOCKS 模式不需要用户进行鉴权,但需要用户改造业务网络数据发送接口,通过 SOCKS 代理发送。
4. 能否使用双 Wi-Fi,或者使用自定义 USB 网卡进行多网加速?
答:目前云聚通 Android SDK 支持 Wi-Fi、MOBILE、ETH 等3种类型的网卡进行加速,可通过调用 setAccLinks 方法来添加用户想进行加速的网卡。如果想添加 SDK 不支持的网卡类型,可通过 addNetworkPlugin 函数添加网卡插件来动态添加自定义网卡,插件代码参考:
5. MeasureCallback 接口中 onStopMpAcc 和 onAccException 两个回调函数有什么区别?
答:SDK 回调 onStopMpAcc,是提醒用户关闭加速,主要终端在单网卡环境、默认路由网络已恢复正常或者长时间没有明显加速效果的时候触发,是否最终关闭加速(StopAcc)的决定权取决于用户自己。
SDK 回调 onAccException,是表明当前加速出现了重大异常,如加速后出现断网,时延过大,加速负优化或加速效果远不及预期,SDK 会主动关闭加速和测速,让业务流量回源,防止因加速异常影响业务正常使用。
6. 如何获取一次加速使用的总流量,以及加速过程中各个链路的带宽速率?
答:AccCallback 中提供了 onAccDataUpdate 回调函数,携带的参数包含了加速上行、下行总流量以及各个链路的详细信息(PathDetail)。
7. 云聚通 SDK minSdkVersion 为24,大于业务自身设置的 minSdkVersion,打包编译报错,如何解决?
答:在清单文件中添加以下配置,并在代码中动态判断,如果当前系统版本小于24,不要调用云聚通 SDK 接口。
<uses-sdk tools:overrideLibrary="com.android.linkboost.multi,androidx.security"/>