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

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

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

然后我們?cè)贑++的代碼文件中加入callJavaInstaceMethod的對(duì)應(yīng)方法,如下圖:

在此方法中我們進(jìn)行了對(duì)Java方法的調(diào)用。上面這段代碼的關(guān)鍵點(diǎn)我已經(jīng)勾出來(lái)了,使用程序首先env->FindClass根據(jù)類名com/iflytek/wcquan/jnitest/NdkTest找到類,然后使用env->GetStaticMethodID類中的找到方法,接著再通過(guò)env對(duì)象的CallStaticVoidMethod方法來(lái)完成最終的調(diào)用過(guò)程。

其中,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方法的簽名。

最后一步,我們?cè)贛ainActity.java中來(lái)調(diào)用了,如下圖:

運(yùn)行后,我們可以看到

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

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

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

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