Java加载动态库

380 阅读1分钟

1、把so 拷贝到依赖库目录下

ROOT_PATH 为 项目下lib目录
File f = new File("temp.txt");
String absolutePath = f.getAbsolutePath();
return absolutePath.substring(0, absolutePath.lastIndexOf(File.separator));
到这里获得lib 的父路径
... 

public static String getLibraryPath(String name){
    String library = java.lang.System.getProperty("java.library.path");
    String[] librarays = library.split(";");
    String temPath = "";
    if(librarays!=null && librarays.length>0){
        String librarayP1 = librarays[0];
        String[] libs = librarayP1.split(":");
        // 系统下目录文件
        temPath = libs[0]+ File.separator+name;
        if(!new File(temPath).exists()){
            new File(libs[0]).mkdirs();
            FileUtil.copy(ROOT_PATH+File.separator+name,libs[0], true);
        }
    }
    return temPath;
}

2、加载库

static {
   String osName = System.getProperties().getProperty("os.name");
   if(osName.equals("Linux")) {
      String tempPath = SdkPath.getLibraryPath("libsadp.so");
      sadpSdk = (HCSadpSdk) Native.loadLibrary(tempPath, HCSadpSdk.class);
   } else {
      sadpSdk = (HCSadpSdk) Native.loadLibrary(SdkPath.ROOT_PATH + File.separator + "Sadp.dll", HCSadpSdk.class);
   }
}