NDK开发中,jni调用java中的方法

首先来说下jni怎么调用java中的方法吧,近来才开始研究NDK,很多不顺啊

有大牛博客传送门:http://blog.sina.com.cn/s/blog_62b2318d0101h5j1.html

举个例子,

在我的java文件com/example/hellojni/HelloJni.java中有一个方法,是静态的

public static int add(int x, int y){

Toast.makeText(ctx, (x + y) + "~~~~" , Toast.LENGTH_SHORT).show();

return x+y;

}

那么在jni中调用的话,步骤是如下:

jstring

Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz )

{

// 获取类

jclass AnalyzeCidUtil = (*env)->FindClass(env,"com/example/hellojni/HelloJni");

if (NULL == AnalyzeCidUtil) {

return (*env)->NewStringUTF(env, "-1");

}

// 获取类add静态方法

jmethodID add = (*env)->GetStaticMethodID(env,AnalyzeCidUtil, "add", "(II)I");

if (NULL == add) {

(*env)->DeleteLocalRef(env,AnalyzeCidUtil); // 删除类指引

return (*env)->NewStringUTF(env, "-2");

}

// 调用静态int方法

int result = (*env)->CallStaticIntMethod(env,AnalyzeCidUtil, add, 3, 5);

char str[] = "Hello from JNI ! ";

sprintf(str, "%s%d", str, result);

return (*env)->NewStringUTF(env, str);

}

我从网上拷贝下来运行,发现很正常,然后就阅读代码,发现其中有一个东西,完全不知道是啥:(II)I

也就是GetStaticMethodID方法的第三个参数

可能是少见多怪吧,这就是本文的重点咯

按照前面大牛的传送门的指导

我总结了下,这个(II)I其实就是我们要调用的方法的参数和返回值

前面的括号加上两个I表示:有两个参数,并且是INT类型

括号后面的I表示:返回值是INT类型

大牛在文章中还提到了,boolean类型对应的是Z,void对应的是V

结合以上,我做了一个统计,请看下图

NDK开发中,jni调用java中的方法_第1张图片

其中主要要提防的是,如果是非基础类型的话,后面会多一个分号;

注意到就没事了

你可能感兴趣的:(NDK开发中,jni调用java中的方法)