编辑 | blame | 历史 | 原始文档

NetSDK demo说明文档

本工程提供了对 dhnetsdk 和 dhconfigsdk 动态库的部分封装以及接口调用的示例代码。 封装基于开源框架 java-native-access (jna-5.4.0)。 其中jna版本为


<dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>5.4.0</version> </dependency>

目录说明:

src下分为三个包:demo、lib、module

  1. demo下为一些sdk接口调用的demo
  2. lib为sdk的接口及相关类的封装,如需要集成到三方项目,请拷贝lib包到项目中
  3. module为一些常用接口的二次封装模块

lib包说明

  1. NetSDKLib 基于jna的封装代码, 通过其中的方法及类,可以间接的调用dhnetsdk和dhconfigsdk动态库中的接口。
  2. HeatMapLib 基于jna的封装代码,封装了热度图相关接口,接口使用可查看module.HeatMapModule类

resources说明

原有libs文件夹替换为resources文件夹,

  1. fastjson-1.2.70.jar: json数据解析,因demo需要引入,集成时可不需要引入
  2. gson-2.6.2.jar: 因demo需要引入,集成是可不需要引入
  3. jna.jar:jna-5.4.0
  4. jna-5.4.0-sources.jar:jna的sources包
  5. linux32、linux64、mac64、win32、win64文件夹:包含对应系统的动态库
  6. dynamic-lib-load.xml:各系统对应的动态库名称,如果新增动态库,请修改xml配置

动态库加载说明

新版调整将libs文件夹修改为了resources文件夹, 解决在linux,mac下需要配置环境变量及打成jar包后出现的找不到动态库的问题。因此在java中只需要加载dhnetsdk和dhconfigsdk两个动态库即可。
如需使用旧版加载方式,可修改NetSDKLib.java为

NetSDKLib NETSDK_INSTANCE=Native.load(Utils.getLoadLibrary("dhnetsdk"),NetSDKLib.class);

        NetSDKLib CONFIG_INSTANCE=Native.load(Utils.getLoadLibrary("dhconfigsdk"),NetSDKLib.class);

并修改Utils的getLoadLibrary方法:
```java
//修改 loadLibrary = "./libs/win64/" 为 loadLibrary="./resources/win64/"
// 获取加载库
public static String getLoadLibrary(String library){
if(isChecking()){
return null;
}

    String loadLibrary="";
    String osPrefix=getOsPrefix();
    if(osPrefix.toLowerCase().startsWith("win32-x86")){
    loadLibrary="./resources/win32/";
    }else if(osPrefix.toLowerCase().startsWith("win32-amd64")){
    loadLibrary="./resources/win64/";
    }else if(osPrefix.toLowerCase().startsWith("linux-i386")){
    loadLibrary="";
    }else if(osPrefix.toLowerCase().startsWith("linux-amd64")){
    loadLibrary="";
    }else if(osPrefix.toLowerCase().startsWith("mac-64")){
    loadLibrary="";
    }
    System.out.printf("加载库[%s]\n",loadLibrary+library);
    return loadLibrary+library;
    }

新版本中添加了加载方式的封装,可直接使用

NetSDKLib NETSDK_INSTANCE=Native.load(LibraryLoad.getLoadLibrary("dhnetsdk"),NetSDKLib.class);

    NetSDKLib CONFIG_INSTANCE=Native.load(LibraryLoad.getLoadLibrary("dhconfigsdk"),NetSDKLib.class);

加载封装类为LibraryLoad.java,默认从工程的resources中读取操作系统对应的文件夹内的所有动态库,即 1. windows 64位系统-win64 2. windows 32位系统-win32 3. linux 64位系统-linux64 4. linux32-linux32 5. mac os 64位系统-mac64 然后写入到外部文件夹,默认为java环境变量`java.io.tmp`对应的目录(windows一般为`C:\Users\{用户名}\AppData\Local\Temp`,linux为`/tmp`) ,如果需要修改写入外部的文件夹,请在工程启动时设置`LibraryLoad.setExtractPath(extractPath)` 如果有转码需求,需要加载转码库: **Linux下可设置环境变量来启动项目**

!/bin/bash

/path-to-dynamic-path为动态库所在路径

export LD_LIBRARY_PATH=/path-to-dynamic-path/
java -jar your-project.jar
```

SDK集成说明

sdk集成有两种方式:源码集成和jar包集成
1. 源码集成
复制resources下的动态库文件夹,及jna.jar和gson-2.6.2.jar到项目的resources文件夹下,并将com.netsdk.lib复制到项目中。module为二次封装接口,可按需复制
2. jar包方式集成
1. 新建一个maven工程,添加jna依赖
img.png
2. 复制resources文件夹中所需要的动态库和com.netsdk.lib和com.netsdk.module到工程中

img.png

3. 编写测试demo

java public class App { public static void main(String[] args) { BaseModule baseModule = new BaseModule(); // sdk初始化,设置断线回调和断线重连并开启sdk日志 baseModule.init( DefaultDisconnectCallback.getINSTANCE(), DefaultHaveReconnectCallBack.getINSTANCE(), true); // 登录 DeviceInfo info = baseModule.login("172.23.12.231", 37777, "admin", "admin1234"); // 登录成功 if (info.getLoginHandler() != 0) { System.out.println("login success."); // 登出 if (!baseModule.logout(info.getLoginHandler())) { // 登出失败,打印错误信息 System.out.println(ENUMERROR.getErrorMessage()); } else { System.out.println("logout success."); } } // 程序结束,释放sdk资源 baseModule.clean(); }
4. 运行成功,即可打包jar,mvn install
将打包后的jar包集成到项目中即可。