开发环境要求
Android Studio 2.0+
Android 7.0(SDK API 24)及以上系统
SDK 引用及依赖配置
1. Maven 引入。
//多网聚合SDKimplementation '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 初始化
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();}}@Overrideprotected 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(newInetSocketAddress("localhost", 1080));//2、将socksProxy设置给DatagramSocketDatagramSocket clientSocket = newSocks5Datagram(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, newInetSocketAddress("127.0.0.1", 1080));URL url = new URL("url");//Proxy添加给HttpURLConnectionurlConnection = (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添加给OkHttpClientOkHttpClient client = newOkHttpClient.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"/>