JNI 入门

作者: pj0579 | 来源:发表于2019-10-14 17:32 被阅读0次

    在对性能要求比较高的地方会用到JNI,Java Native Interface,Java本地接口,使得Java可以与与其他语言交互。
    简单的使用:

    编写一个Java文件
    public class JNIUtil {
        static {
            System.loadLibrary("JNIUtil");
        }
        public static native String getString(String s);
    }
    
    新建C++文件
    #include <jni.h>
    extern "C"
    // 方法名固定Java_包名_类_方法名
    // 参数固定 JNIEnv *env, (jobject 实例方法或者 jclass 类方法)
    JNIEXPORT jstring JNICALL Java_com_github_xu_gank_util_JNIUtil_getString
            (JNIEnv *env, jobject obj, jstring s) {
        // c++ 使用
        char *t;
        t = (char *) env->GetStringUTFChars(s, 0);
        return (env)->NewStringUTF(t);
    }
    
    

    放上Java基础数据类型 与 C++的对照表


    image.png

    引用类型 对照表


    image.png

    但是单独编写这两个文件还不能使用,还需要cmake的使用
    通常新建文件起名 CMakeLists.txt内容如下 放在任意位置

    cmake的最小版本
    cmake_minimum_required(VERSION 3.6)
    add_library( #so库的名称
                 JNIUtil
                 # Sets the library as a shared library.
                 SHARED
                 # 源文件地址
                 app/src/main/jni/JNIUtil.cpp )
    

    moudle的gradle.build - android 添加

    ndk {
                moduleName 'JNIUtil'
                abiFilters 'x86', 'armeabi'
            }
    

    然后点击Moudle Link C++ moudle的gradle.build - android自动添加cmake文件

    externalNativeBuild {
            cmake {
                path file('../CMakeLists.txt')
            }
        }
    

    到这里就可以使用了。

    相关文章

      网友评论

        本文标题:JNI 入门

        本文链接:https://www.haomeiwen.com/subject/higrmctx.html