当前云聚通 Android SDK 支持 WIFI、MOBILE、ETH 等3种类型的网卡进行加速,可通过调用 setAccLinks 方法来添加用户想进行加速的网卡。如果想添加SDK 不支持的网卡类型,可通过 addNetworkPlugin 函数添加网卡插件来动态添加自定义网卡
示例代码:
package com.android.tencentvpn.plugin;import com.android.linkboost.multi.AccConfig;import com.android.linkboost.multi.MpNetworkPlugin;import com.android.linkboost.multi.MpNetworkPluginManager;import com.android.linkboost.multi.log.MpAccLog;import android.content.Context;import android.net.ConnectivityManager;import android.net.LinkProperties;import android.net.Network;import android.net.NetworkCapabilities;import android.net.NetworkRequest;import androidx.annotation.NonNull;/*** 网卡插件实现类* 需发起加速的时候,通过{@link AccConfig#addNetworkPlugin(String)}添加* 例:accConfig.addNetworkPlugin("com.android.tencentvpn.plugin.MpNetworkPluginImpl");*/public class MpNetworkPluginImpl extends MpNetworkPlugin {private static final String TAG = "MpNetworkPluginImpl";private static final String ETH0 = "eth0";private final ConnectivityManager mConnectivityManager;private final MpNetworkPluginManager mMpNetworkPluginManager;private final InnerCallback mInnerCallback;private Network mNetwork;public MpNetworkPluginImpl(Context context) {super(context);mConnectivityManager =(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);mMpNetworkPluginManager = new MpNetworkPluginManager(context);mInnerCallback = new InnerCallback();}//需业务自己实现具体的网卡的激活逻辑@Override public void requestNetwork() {MpAccLog.i(TAG, "requestNetwork");NetworkRequest.Builder req = new NetworkRequest.Builder();req.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);req.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);mConnectivityManager.requestNetwork(req.build(), mInnerCallback);}@Override public void releaseNetwork() {MpAccLog.i(TAG, "releaseNetwork");mConnectivityManager.unregisterNetworkCallback(mInnerCallback);mMpNetworkPluginManager.onLost(mNetwork);}class InnerCallback extends ConnectivityManager.NetworkCallback {@Override public void onLinkPropertiesChanged(@NonNull Network network,@NonNull LinkProperties linkProperties) {super.onLinkPropertiesChanged(network, linkProperties);int type = 101;// 不同linkProperties.getInterfaceName()网卡名,传不同type// if (ETH0.equals(linkProperties.getInterfaceName())) {// type = 101;// type() 自定义type大于100小于1000 (100-1000),避免和其他系统网卡冲突// }// if (ETH1.equals(linkProperties.getInterfaceName())) {// type = 102;// }mNetwork = network;MpAccLog.i(TAG, "onLinkPropertiesChanged:"+ network+ " ifname:"+ linkProperties.getInterfaceName());mMpNetworkPluginManager.onLinkPropertiesChanged(type, network, linkProperties);}@Override public void onLost(@NonNull Network network) {super.onLost(network);MpAccLog.i(TAG, "onLost:" + network);mMpNetworkPluginManager.onLost(network);}}}
说明:
发起加速需将插件类通过 addNetworkPlugin 添加。
accConfig.addNetworkPlugin(MpNetworkPluginImpl.class.getName());//...加速模式、路由规则设置mMpAccClient.startAcc(accConfig);