美文网首页
NDK开发中,jni调用java中的方法

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

作者: 毛神 | 来源:发表于2016-08-10 17:10 被阅读0次

    首先来说下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中的方法

          本文链接:https://www.haomeiwen.com/subject/fpjjsttx.html