`

解决JNI需要手动存放本地库的问题

    博客分类:
  • JNI
阅读更多

使用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

 

0
0
分享到:
评论

相关推荐

    Android Studio JNI/NDK 编程

    2. **设置源码目录**:创建jniLibs目录存放本地库,jni目录存放C/C++源码。 3. **构建和调试**:使用Android Studio的Build菜单或命令行构建本地代码,通过DDMS或Android Profiler进行调试。 4. **运行和测试**:...

    Android Studio JNI调用.so 库

    在Android Studio项目中,这个目录是专门用来存放本地库文件(如.so)的。当你创建一个新的Android项目时,如果没有这个目录,可以在app/src/main目录下手动创建一个名为jniLibs的目录,并根据不同的CPU架构...

    ndk --- jni

    JNI在Android开发中扮演着重要的角色,尤其是在需要进行性能优化或者调用本地库(如C/C++库)时。而NDK(Native Development Kit)是Google提供的一个开发工具包,它包含了编译、链接和运行原生代码所需的各种工具,...

    android jni Demo

    - 处理内存管理:JNI代码需要手动管理内存,避免内存泄漏。 - 异常处理:在JNI代码中,错误通常以返回值的形式传递,Java端需要捕获并处理这些异常。 - 平台兼容性:针对不同的CPU架构(armeabi, armeabi-v7a, ...

    使用jni_generator的AS项目示例

    4. **项目结构**:项目中可能包含`src/main/jniLibs`目录,用于存放生成的本地库文件(如armeabi-v7a、x86等),以及`src/main/cpp`目录,这里将放置jni_generator生成的C/C++源文件。 5. **使用示例**:...

    android studio JNI

    在项目中,你需要创建一个jniLibs目录,这通常是位于app/src/main目录下,用于存放编译后的本地库文件。 3. **编写JNI头文件**: 创建一个.java文件,例如`HelloJNI.java`,并声明native方法,如: ```java ...

    Android JNI编程demo

    通常会有一个`jniLibs`目录,用于存放编译后的本地库文件。 5. **Java调用本地方法**:在Java类中,使用`native`关键字声明本地方法,并在类加载时通过`System.loadLibrary("library_name")`加载对应的本地库。 6....

    JNI环境搭建

    2. **创建Android工程**:在Eclipse中新建一个Android工程,并在工程目录下创建一个名为`jni`的文件夹,用于存放所有本地代码。 3. **配置Builder**:为了使Eclipse能够自动调用NDK进行编译,你需要配置一个新的...

    Android-jnindk编程

    1. `jni/`目录:这是存放本地源代码的地方,通常会有`Android.mk`或`CMakeLists.txt`这样的构建文件,用来指示NDK如何编译这些源码。 2. `src/main/java/`目录:这里包含了Java代码,可能有一个`MainActivity`类,...

    jnidemo_androidstudio

    3. **NDK和Build System**: Android Native Development Kit (NDK)是开发Android本地库的工具集,包含了编译和链接C/C++代码所需的工具。在Android Studio中,通过修改`build.gradle`文件,我们可以配置NDK路径,...

    coco2dx JNI示例,java c++相互调用

    总结来说,这个示例项目展示了如何在Cocos2dx游戏开发中利用JNI实现在Java层和C++层之间的通信,这对于实现与Android系统的深度集成、利用C++的高性能以及调用特定平台的本地库等功能至关重要。理解并熟练掌握JNI...

    android NDK开发流程小结

    如果需要多个本地库,可以创建子目录,如`jni/armeabi-v7a`,`jni/x86`等,对应不同的CPU架构。 3. **编写JNI头文件**:在`jni`目录下,创建`.h`头文件,定义Java类和方法的本地接口。使用`javah`工具,基于Java...

    Andorid NDK实例

    - **内存管理**:C/C++需要手动管理内存,容易引发内存泄漏和悬挂指针问题。 - **安全风险**:本地代码可能更容易受到缓冲区溢出等安全漏洞的影响。 **TestNDK项目** 在提供的`TestNDK`项目中,通常会包含一个简单...

    亲测可行简单NDK例子,可以编译NDK并运行,目录结构清晰

    - 使用机器学习库,如TensorFlow Lite,可能需要NDK来编译和运行本地库。 总之,NDK和JNI的结合为Android应用开发提供了强大的能力,通过这个亲测可行的例子,开发者可以快速了解并掌握NDK项目的搭建和运行过程,...

    android studio ndk demo

    - `app/src/main/jniLibs`:存放编译后的本地库,如`armeabi-v7a/libnative-lib.so`。 - `app/build.gradle`:配置NDK和CMake或ndk-build。 - `app/src/main/java/com/example/Demo2/MainActivity.java`:包含调用...

    静态导入so库文件

    总结,Android Studio中的静态导入so库涉及Android的本地开发支持,包括设置jniLibs目录、配置build.gradle文件、声明和实现native方法以及正确打包和运行。这个过程对于理解和优化Android应用性能,尤其是涉及图形...

    android ndk r8 windows

    5. **链接到Java代码**:在Java代码中,通过JNI头文件(自动生成或手动编写)来声明本地方法,并在运行时通过`System.loadLibrary()`加载本地库。 **NDK与SDK的配合:** 在Android Studio中,NDK R8可以与Gradle...

    安卓Android源码——史上最强NDK入门项目实战.zip

    在Java层,我们需要定义一个native方法,并使用`System.loadLibrary`加载对应的本地库。在C/C++层面,通过JNI头文件生成的函数原型来实现这些方法。JNI提供了多种函数,如`JNIEnv`指针用于访问Java对象和调用Java...

    Android引用百度地图jar包

    6. **处理so文件**:在Android应用中,某些功能可能需要本地库支持,这些本地库通常以.so文件形式存在。百度地图的so文件用于提供ARM架构下的本机代码。`armeabi`目录是Android存放特定架构本地库的标准路径。 7. *...

    com.jacob:1.19.rar 下载

    此外,由于Jacob是基于JNI(Java Native Interface)的,所以在不同JVM版本和操作系统环境下,可能需要使用不同的Jacob版本。 总结,解决com.jacob:1.19在Maven中的下载问题,主要是手动下载jar文件并配置为系统...

Global site tag (gtag.js) - Google Analytics