在对性能要求比较高的地方会用到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')
}
}
到这里就可以使用了。
网友评论