# NetSDK demo说明文档 > 本工程提供了对 dhnetsdk 和 dhconfigsdk 动态库的部分封装以及接口调用的示例代码。 封装基于开源框架 java-native-access (jna-5.4.0)。 其中jna版本为 ```xml net.java.dev.jna jna 5.4.0 ``` ## 目录说明: 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为 ```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; } ``` 新版本中添加了加载方式的封装,可直接使用 ```java 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下可设置环境变量来启动项目** ```shell #!/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](img/jna_dependency.png) 2. 复制resources文件夹中所需要的动态库和com.netsdk.lib和com.netsdk.module到工程中 ![img.png](img/project_structure.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包集成到项目中即可。