記得第一節(jié)的簡單Demo吧间螟,那是JNI開發(fā)的典型流程,是Java調(diào)用C++的流程损肛,那這一節(jié)我們來看看C++代碼調(diào)用Java方法厢破,我們還是使用上次那個(gè)Demo吧。
首先治拿,我們在NDKTest.java中添加兩個(gè)靜態(tài)方法摩泪,一個(gè)方法用于本次測試的入口,一個(gè)方法用于提供給C++代碼調(diào)用的劫谅,如下圖:
然后我們在C++的代碼文件中加入callJavaInstaceMethod的對應(yīng)方法见坑,如下圖:
在此方法中我們進(jìn)行了對Java方法的調(diào)用。上面這段代碼的關(guān)鍵點(diǎn)我已經(jīng)勾出來了捏检,使用程序首先env->FindClass根據(jù)類名com/iflytek/wcquan/jnitest/NdkTest找到類荞驴,然后使用env->GetStaticMethodID類中的找到方法,接著再通過env對象的CallStaticVoidMethod方法來完成最終的調(diào)用過程贯城。
其中熊楼,GetStaticMethodID方法的參數(shù)是這樣的:
jmethodID GetStaticMethodID(jclass clazz,const char* name,const char* sig)
第一個(gè)參數(shù)是指類,就是要找的哪個(gè)類能犯;第二個(gè)參數(shù)調(diào)用的方法名,? 參數(shù)三是方法的簽名鲫骗,例子中其中(Ljava/lang/String;)V是calledByJni方法的簽名犬耻。
最后一步,我們在MainActity.java中來調(diào)用了执泰,如下圖:
運(yùn)行后枕磁,我們可以看到
整個(gè)C++調(diào)用Java方法的流程就結(jié)束了,后面章節(jié)的內(nèi)容會是原理部分和 深入底層的實(shí)現(xiàn)