springboot动态加载native类库

有些时候需要使用到本地类库来实现一些功能,比如在linux下使用jni去访问so库文件,这个时候就需要涉及库文件的加载。本文介绍一下如何动态加载库文件,即把库文件放到工程项目里头,方便工程的可移植性,然后在运行时去加载。

动态加载

 public class LibLoader {
    public static void loadLib(String libName) {
        String resourcePath = "/" + libName;
        String folderName = System.getProperty("java.io.tmpdir") + "/lib/";
        File folder = new File(folderName);
        folder.mkdirs();
        File libFile = new File(folder, libName);
        if (libFile.exists()) {
            System.load(libFile.getAbsolutePath());
        } else {
            try {
                InputStream in = LibLoader.class.getResourceAsStream(resourcePath);
                FileUtils.copyInputStreamToFile(in,libFile);
                in.close();
                System.load(libFile.getAbsolutePath());
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException("Failed to load required lib", e);
            }
        }
    }
}    

将so文件放在工程的resources目录下

使用

public class DemoJniClient{
    public native int helloWorld(String arg);
    static {
        LibLoader.loadLib("demo.so");
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,658评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,223评论 4 61
  • 【镜】 醉朱颜,褪红妆,好似丹青屏障。 挂明镜,照面殇,叹息容颜凄凉。 偶尔涌上心头的话语,把它编制成美丽的彩...
    沈汏婠人阅读 2,994评论 0 1
  • 1.前言 最近打算着手写一些计算机基础的文章,以前自己总是着重于某某一种技术,随着工作时间的推移,发现其实万变不离...
    Vicent_Z阅读 3,226评论 0 2
  • 让自己留有遗憾,总归是说不过去的。行为要和内心一样勇敢,再次勇敢的提醒。 体验入: 我能知道您想的是什么?您也知道...
    能量在此阅读 1,540评论 0 1