插件网卡加速

最近更新时间:2025-11-28 15:39:01

我的收藏
当前云聚通 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);