记得第一节的简单Demo吧,那是JNI开发的典型流程,是Java调用C++的流程,那这一节我们来看看C++代码调用Java方法,我们还是使用上次那个Demo吧。
首先,我们在NDKTest.java中添加两个静态方法,一个方法用于本次测试的入口,一个方法用于提供给C++代码调用的,如下图:
然后我们在C++的代码文件中加入callJavaInstaceMethod的对应方法,如下图:
在此方法中我们进行了对Java方法的调用。上面这段代码的关键点我已经勾出来了,使用程序首先env->FindClass根据类名com/iflytek/wcquan/jnitest/NdkTest找到类,然后使用env->GetStaticMethodID类中的找到方法,接着再通过env对象的CallStaticVoidMethod方法来完成最终的调用过程。
其中,GetStaticMethodID方法的参数是这样的:
jmethodID GetStaticMethodID(jclass clazz,const char* name,const char* sig)
第一个参数是指类,就是要找的哪个类;第二个参数调用的方法名, 参数三是方法的签名,例子中其中(Ljava/lang/String;)V是calledByJni方法的签名。
最后一步,我们在MainActity.java中来调用了,如下图:
运行后,我们可以看到
整个C++调用Java方法的流程就结束了,后面章节的内容会是原理部分和 深入底层的实现