- 定义java与c的接口
public class Test
{
public static native String test(int a);
}
- 基于上步定义的接口,生成c的头文件
- 基于c的头文件,实现和封装
#include <stdlib.h>
#include <string.h>
jstring stoJstring(JNIEnv* env, const char* pat)
{
jclass strClass = env->FindClass("Ljava/lang/String;");
jmethodID ctorID = env->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V");
jbyteArray bytes = env->NewByteArray(strlen(pat));
env->SetByteArrayRegion(bytes, 0, strlen(pat), (jbyte*)pat);
jstring encoding = env->NewStringUTF("utf-8");
return (jstring)env->NewObject(strClass, ctorID, bytes, encoding);
}
jstring JNICALL Java_com_test_Test_test(JNIEnv * p, jclass c, jint a)
{
char buf[32] = {0};
sprintf(buf,"input is %d" , a);
return stoJstring(p , buf);
}
- 生成对应的c库
- 设置环境变量
- 编写测试文件
public class Main
{
public static void main(String args [])
{
System.loadLibrary("test");
System.out.println("output:" + Test.test(100));
}
}