使用JNI的关键是要load本地库,然而在实际中往往需要将项目打包供第三方使用,这是项目部署存在一个问题,每次都要单独将本地库存放到指定的位置。可以通过文件读写的方式在加载前将本地库写入指定的位置,这是只需要将本地库一起打到jar包中,提供给第三方。
代码如下:
public class JniCall { static { try { String filepath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); // System.out.println(filepath); InputStream in = new BufferedInputStream (new FileInputStream(filepath+"key.properties")); Properties p = new Properties(); p.load(in); String path = p.getProperty("sourl"); System.out.println("C库存放路径:"+System.getProperty("java.library.path")); InputStream inputStream; inputStream = JniCall.class.getResource("libqcenc.so").openStream(); final File dllFile = new File(new File(path), "libqcenc.so"); if (!dllFile.exists()) { FileOutputStream outputStream = new FileOutputStream(dllFile); byte[] array = new byte[8192]; for (int i = inputStream.read(array); i != -1; i = inputStream.read(array)) { outputStream.write(array, 0, i); } outputStream.close(); } System.loadLibrary("qcenc"); System.out.println("C库存加载完成"); } catch (IOException e) { e.printStackTrace(); } } public native static String getEnc(String pin); }
本站支持 pay for your wishes
相关推荐
Android JNI Android JNI 用C函数写本地库读写文件,底层调用小例子用C函数写本地库读写文件,底层调用小例子
VS2015 Android JNI 静态库 动态库 APK 本地调试DEMO 自己摸索出来的,10分绝对不高.摆脱Android Studio摆脱Eclipse.摆脱VisualGDB 祝君工作愉悦
谷歌官方的例子hellow-libs,andoid studio中JNI调用第三方.so库。
解决JNI中文乱码,
利用JNI技术实现Java中调用C++编写的函数库示例程序源码,并附上参考JNI文档。 详情见本人博客:Java学习之通过JNI调用C/C++编写的dll链接库(图文教程)(http://write.blog.csdn.net/postlist)
教你如何生成.h文件,使用window通过NDK编译出.so文件,如何通过JNI调用so文件
绝对值,不值我送分给你 JNI API 本地接口JNI API 本地接口JNI API 本地接口JNI API 本地接口
使用JNI与本地接口,并传递中文字符串。 绝对原创,转载请说明!
Java通过JNI调用DLL动态库,亲测试编写
JNI调用本地C语言 JNI调用本地C语言 JNI调用本地C语言 JNI调用本地C语言
jni 输入的问题; 找不到相应的库文件链接的问题java.lang.UnsatisfiedLinkError: no testjni1 in java.library.path ;Linux下编译下找不到库文件符号的问题libXXX.so: undefined symbol: _ZdlPv
jni调用C++动态库,jna调用C++动态库,eclipse maven project
jni demo .so链接库生成过程 参考博文http://blog.sina.com.cn/s/blog_71a357060101ehab.html
java使用JNI调用c++代码的实例,主要实现了在java环境中利用c++下的写文件流操作写一个本地文件,可以作为JNI基本配置上手的参考。
java 的jni本地调用简单实例,本实例不牵扯到java传值给c++进行转换变值等操作,因为java和c++的类型不匹配,需要进行复杂转换。
java的本地调用(JNI),经过验证完全成功的
JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各...
但这样做通常会导致丧失平台可移植性,通常是在特定的需求下进行,例如使用旧的其他语言的库、需要获得Java类库不支持的某种基于具体平台的特性、大量数学计算性能优化等。希望本文档会给有需要的朋友带来帮助;
通过JNI调用本地DLL,并传递中文字符串, Visual C++ 6.0 开发DLL 原创作品,随意转载,提前请说明!
假如有一个现有的 .dll/.so 文件,假如使用 JNI 技术调用,我们首先需要另外使用 C 语言写一个 .dll/.so 共享库,使用 SUN 规定的数据结构替换 C 语言的数据结构,调用已有的 ? dll/so 中公布的函数。 然后再在 Java...