Android JNI c/c++调用java 无需新建虚拟机

时间:2022-07-01 11:29:49

近期通过研究SDL源码 得出android JNI  c/c++调用java 无需新建虚拟机: 具体步骤如下

第一步获得:两个参数 JNIEnv和jclass

void Java_com_Test_Audio_Init( JNIEnv* env,jclass cls, jobject thiz )
{
InitJNI(env,cls);
}
bool InitJNI(JNIEnv* env,jclass cls)
{
m_Env=env;
m_cls=cls;
}

第二步

获得java那边定义的函数的名字

Android JNI c/c++调用java 无需新建虚拟机

第三步 传递参数调用java 函数

char *str="god_is_a_girl.mp3";
char str[]="nihao";
jbyte *by = (jbyte*)str;
jbyteArray jarray = m_Env->NewByteArray(strlen(str));
m_Env->SetByteArrayRegion(jarray, , strlen(str), by);
///调用java函数
m_Env->CallStaticBooleanMethod(m_cls, midCreateGLContext,jarray);