两种解决方案:
若是封装函数后再调用java层函数时就会出现错误方法一是采用将java函数改为静态方法;
(1)
java 层函数原型
public static void JavaTest(int x ,int y ,int size)
{
Log.e("JavaTest", "x="+x+"y="+y+"size="+size);
}
首先定义路径:
红的部分是 包名/类名
static const char *classPathName = "com/example/myjni/MyNativeLib";
c层的方法
jmethodID c_jmothods;
jclass clazz =env->FindClass(classPathName);
if (clazz == NULL)
{
LOGE("clazz == NULL");
}
else
{
c_jmothods = env->GetStaticMethodID(clazz, "JavaTest","(III)V");
}
if (c_jmothods == NULL)
{
LOGE("c_jmothods == NULL");
}
env->CallStaticVoidMethod(clazz,c_jmothods,110,11,112);
方法2:
可以不用改变原来的函数 及不需要时静态方法
此时java 层函数原型
public void JavaTest(int x ,int y ,int size)
{
Log.e("JavaTest", "x="+x+"y="+y+"size="+size);
}
jclass clazz = env->FindClass(classPathName);
jmethodID mid = env->GetMethodID(clazz, "<init>", "()V");
jmethodID post_event = env->GetMethodID(clazz, "JavaTest", "(III)V");
jobject jobt = env->NewObject(clazz, mid);
env->CallVoidMethod(jobt, post_event, 100,99,199);