JNI開發(fā)系列(三、JNI調(diào)用Java方法)

記得第一節(jié)的簡單Demo吧,那是JNI開發(fā)的典型流程,是Java調(diào)用C++的流程,那這一節(jié)我們來看看C++代碼調(diào)用Java方法,我們還是使用上次那個Demo吧。

首先,我們在NDKTest.java中添加兩個靜態(tài)方法,一個方法用于本次測試的入口,一個方法用于提供給C++代碼調(diào)用的,如下圖:

然后我們在C++的代碼文件中加入callJavaInstaceMethod的對應(yīng)方法,如下圖:

在此方法中我們進(jìn)行了對Java方法的調(diào)用。上面這段代碼的關(guā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)

第一個參數(shù)是指類,就是要找的哪個類;第二個參數(shù)調(diào)用的方法名,? 參數(shù)三是方法的簽名,例子中其中(Ljava/lang/String;)V是calledByJni方法的簽名。

最后一步,我們在MainActity.java中來調(diào)用了,如下圖:

運行后,我們可以看到

整個C++調(diào)用Java方法的流程就結(jié)束了,后面章節(jié)的內(nèi)容會是原理部分和 深入底層的實現(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容