Android接入说明
权限要求
要求应用app必须具有以下权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
API接口描述
package com.netshield;
public class Netshield {
/**
* 启动服务
* @param context Application Context
* @return 0-成功 -1-失败
*/
public static int Start(Context context);
/**
* 获取客户端IP
* @return 客户端IP
*/
public static String GetClientIP();
}
接入说明
代码接入
AndroidManifest.xml appliction节点中添加以下代码
<provider android:authorities="com.netshield.NetshieldContentProvider" android:exported="false" android:name="com.netshield.NetshieldContentProvider"/>
例如:
<application ...>
...
<provider android:authorities="com.netshield.NetshieldContentProvider" android:exported="false" android:name="com.netshield.NetshieldContentProvider"/>
</application>
原生项目
Eclipse
- 将 AAR 文件后缀名改为 ZIP 并解压,解压的目录需要和项目在同一盘符下。比如项目在F盘,则解压的sdk也应在 F盘。
2、在解压得到的目录里创建一个 libs 文件夹
3、删除 R.txt文件
4、将classes.jar移动到libs文件夹下
5、
将jni下和项目架构相同的文件夹(比如项目用到了armeabi和armeabi-v7a,则只拷贝armeabi和armeabi- v7a,其他的不要动)移到 libs 文件夹下
6、删除jni文件夹
7、在解压得到的目录里创建 project.properties 文件,内容如下:
target=android-21
android.library=true
8. 导入sdk到eclipse中
Android Studio
如果项目开启了prguard优化,请添加以下规则
-keep class com.netshield.* { *; }
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}
如果报错transformClassesAndResourcesWithProguardForRelease,请添加
-ignorewarnings
假设原module名为app,新增的module名为netshield
- 添加netshield-release模块
2、设置项目依赖
3、同步配置
IOS
API接口描述
//获取客户端IP
std::string GetRealClientIP();
接入说明
Demo
#include <netshield_export.h>
- (void)viewDidLoad {
NSLog(@"ClientIP:[%@]", [NSString stringWithCString:GetRealClientIP().c_str() encoding:[NSString defaultCStringEncoding]]);
}
Windows
API接口描述
//功能开启
_declspec(dllexport) BOOL StartNetshieldService();
//获取客户端IP,需要在 StartNetshieldService 后调用
_declspec(dllexport) const char* GetRealClientIP();
Visual Studio项目
- 拷贝netshield.dll到应用目录下
- 修改main函数
int main()
{
HINSTANCE pNetshield = NULL;
#ifdef UNICODE
pNetshield = LoadLibraryW(TEXT("netshield.dll"));
#else
pNetshield = LoadLibraryA(TEXT("netshield.dll"));
#endif
BOOL (*StartNetshieldService)() = nullptr;
const char* (*GetRealClientIP)() = nullptr;
if (NULL != pNetshield) {
char errmsg[512] = {0};
StartNetshieldService = (BOOL(*)())GetProcAddress(pNetshield, "StartNetshieldService");
GetRealClientIP = (const char* (*)())GetProcAddress(pNetshield, "GetRealClientIP");
} else {
MessageBoxA(NULL, "netshield.dll加载失败,请联系开发人员。", "netshield", MB_OK | MB_ICONINFORMATION);
exit(0);
}
if (nullptr != StartNetshieldService) {
fprintf(stdout, "StartNetshieldService:%p\n", (void*)StartNetshieldService);
StartNetshieldService();
}
// 业务代码
return 0;
}
Unity
代码结构创建
- 在Assets/Plugins目录下新增Netshield目录
- 在Netshield目录下新增impl和libs目录
- 在libs目录下新建x86和x86_64目录
- 拷贝Netshield.cs至Assets/Plugins/Netshield目录下
- 拷贝INetshieldInterface.cs,Netshield4IOS.cs,Netshield4Android.cs ,Netshield4Windows.cs,Netshield4Others.cs至Assets/Plugins/Netshield/impl目录下
- 拷贝netshield-release.aar,netshield.framework至libs目录下;拷贝32位netshield.dll至x86目录下;拷贝64位netshield.dll至x86_64目录下
设置SDK属性
netshield-release.aar
netshield.framework
x86/netshield.dll
x86_64/netshield.dll
代码调用
在入口类中进行调用,下列例子为绑定到Main Camera的脚本HelloWorld.cs
public class HelloWorld : MonoBehaviour
{
// 应用启动
public void Start()
{
// 初始化SDK
Netshield.Init();
// 获取真实客户端IP
Debug.Log(Netshield.GetClientIP());
}
// 应用退出
public void OnApplicationQuit()
{
// 释放SDK资源
Netshield.Destroy();
}
}
Unity相关代码