JavaAndroid开发经验谈Android开发

JNI开发系列(三、JNI调用Java方法)

2017-10-29  本文已影响32人  长空_ca51

记得第一节的简单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方法的流程就结束了,后面章节的内容会是原理部分和 深入底层的实现

上一篇 下一篇

猜你喜欢

热点阅读