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