美文网首页
JNI容易踩坑的细节记录

JNI容易踩坑的细节记录

作者: 谢俊烽 | 来源:发表于2019-12-31 17:58 被阅读0次

一、关于sig签名

   const char * sig = "(Ljava/lang/String;I)V";
    jmethodID setNameAndAge = env->GetMethodID(student_class, "setNameAndAge", sig);
    jstring name2 = env->NewStringUTF("小学生");
    env->CallVoidMethod(student, setNameAndAge, name2, 88);

这个方法传了2个参数,第一个是String:Ljava/lang/String;,第二个是int:I;
切记中间不能有空格;

二、构造方法获取

//获取有参数的构造方法
    const char *sig = "(Ljava/lang/String;I)V";
//    const char *method = "<init>";
    jstring name = env->NewStringUTF("小学生");
    jmethodID init = env->GetMethodID(studentClass, "<init>", sig);
    jobStudent = env->NewObject(studentClass, init, name, 31);

其中GetMethodID(studentClass, "<init>", sig);第二个参数可以不用const char *method = "<init>";虽然会爆红,因为java代码找不到这个方法名,但是可以运行,建议还是写个method吧,去掉红色的强迫症。

三、全局释放

 env->DeleteGlobalRef(studentClass);
    studentClass = NULL;

第二行必须加上,不然就是会出现悬空指针;

四、关于return

JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *javaVm, void *pVoid) {
//    return JNI_VERSION_1_6;
}

如果没有return是不会爆红的但是,你会找不到bug然后疯掉。。。

void method(JNIEnv *env, jobject instance, jstring text) {
}

这个是可以不用return的,但是下面这个

void * method(JNIEnv *env, jobject instance, jstring text) {
      return 0;
}

是要return 的,而且只能return 0;不然,呵呵。。。

五、关于JNIEnv的获取

jint result = javaVm->GetEnv(reinterpret_cast<void **>(&jniEnv), JNI_VERSION_1_6);
jint result = javaVm->AttachCurrentThread(&jniEnv, 0);//线程中获取

在线程中获取是要第二行写法,不然会获取不到

相关文章

  • JNI容易踩坑的细节记录

    一、关于sig签名 这个方法传了2个参数,第一个是String:Ljava/lang/String;,第二个是in...

  • Windows下GithubPages博客快速搭建

    Windows下开发坑总是比较多的,但是本人没Mac,只好踩一遍坑记录下。本文主要是安装过程&踩坑记录,故不对细节...

  • 日常bug记录

    想记录日常碰到的bug,坑踩多了,以后应该碰到坑就比较容易处理或者会少踩坑,后面会慢慢记录bug,截图bug以及最...

  • 踩坑JNI

    使用Android studio3.4.1,即最新版时。使用cmake调用opencv3.2的jni库,出现 go...

  • 安卓开发通过JNI调用本地方法

    今天开发中第一次接触到对jni方法的调用,特此记录在开发踩过的坑。 java通过JNI调用c/c++编写的本地方法...

  • 微信支付 code -2 首查位置推荐

    前言 说到微信相关,相信很多开发者都或多或少的踩过坑,如果没有记录甚至很容易二次踩坑,特此记录,留作纪念 ,嘿嘿...

  • org.springframework.

    记录web开发踩过的坑 记录一个后端的小细节, springboot repository创建时, 定义的方法一定...

  • JNI入门踩坑

    要用Java 8 。10把javah这个工具给移除了

  • 一道多线程编程面试题

    看到一道多线程面试题,看起来很简单但是仔细想想有些细节很容易踩坑,因此记录一下。 题目来源:https://jue...

  • 2020-10-19随笔 踩坑0传值

    踩坑:当值传入0时,if条件判断时候会自己转换,记录踩坑。

网友评论

      本文标题:JNI容易踩坑的细节记录

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