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

    1. public class LibLoader {
    2. public static void loadLib(String libName) {
    3. String resourcePath = "/" + libName;
    4. String folderName = System.getProperty("java.io.tmpdir") + "/lib/";
    5. File folder = new File(folderName);
    6. folder.mkdirs();
    7. File libFile = new File(folder, libName);
    8. if (libFile.exists()) {
    9. System.load(libFile.getAbsolutePath());
    10. } else {
    11. try {
    12. InputStream in = LibLoader.class.getResourceAsStream(resourcePath);
    13. FileUtils.copyInputStreamToFile(in,libFile);
    14. in.close();
    15. System.load(libFile.getAbsolutePath());
    16. } catch (Exception e) {
    17. e.printStackTrace();
    18. throw new RuntimeException("Failed to load required lib", e);
    19. }
    20. }
    21. }
    22. }

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

    1. public class DemoJniClient{
    2. public native int helloWorld(String arg);
    3. static {
    4. LibLoader.loadLib("demo.so");
    5. }
    6. }

    转载:https://blog.csdn.net/wsyyyyy/article/details/80401400