使用头文件将C语言中的标准实现通过预编译映射到自己定义的函数中,并在自己定义的函数中调用java函数来实现,这一思路怎么实现呢
首先,通过.h定义函数替换C库中的函数,比如将C中的fopen替换为test_print,新建test.h 文件
//
// Created by crow on 2022/6/1.
//
#ifndef CCDEMO_TEST_H
#define CCDEMO_TEST_H
#endif //CCDEMO_TEST_H
#include <stdio.h>
#define fopen test_print
新建test.c实现定义的test_print方法,在c里面通过jni调用java代码,要获取JavaVM,然后通过JavaVM获取到当前线程的JNIEnv,代码如下
//
// Created by crow on 2022/6/1.
//
#include "test.h"
#include <jni.h>
#include <string.h>
JavaVM *javaVm;
jstring charToJstring(JNIEnv *env, const char *pat) {
jsize len = strlen(pat);
jclass strClass = (*env)->FindClass(env, "java/lang/String");
jstring encoding = (*env)->NewStringUTF(env, "utf-8");
jmethodID jmethodId = (*env)->GetMethodID(env, strClass, "<init>","([BLjava/lang/String;)V");
jbyt