<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ### 14.4 JNI調用Java方法的流程 JNI調用Java方法的流程是先通過類名找到類,然后再根據方法名找到方法的id,最后就可以調用這個方法了。如果是調用Java中的非靜態方法,那么需要構造出類的對象后才能調用它。下面的例子演示了如何在JNI中調用Java的靜態方法,至于調用非靜態方法只是多了一步構造對象的過程,這里就不再介紹了。 首先需要在Java中定義一個靜態方法供JNI調用,如下所示。 public static void methodCalledByJni(String msgFromJni) { Log.d(TAG, "methodCalledByJni, msg: " + msgFromJni); } 然后在JNI中調用上面定義的靜態方法: void callJavaMethod(JNIEnv *env, jobject thiz) { jclass clazz = env->FindClass("com/ryg/JniTestApp/MainActivity"); if (clazz == NULL) { printf("find class MainActivity error! "); return; } jmethodID id = env->GetStaticMethodID(clazz, "methodCalledByJni", "(Ljava/lang/String; )V"); if (id == NULL) { printf("find method methodCalledByJni error! "); } jstring msg = env->NewStringUTF("msg send by callJavaMethod in test.cpp."); env->CallStaticVoidMethod(clazz, id, msg); } 從callJavaMethod的實現可以看出,程序首先根據類名com/ryg/JniTestApp/MainActivity找到類,然后再根據方法名methodCalledByJni找到方法,其中(Ljava/lang/String; )V是methodCalledByJni方法的簽名,接著再通過JNIEnv對象的CallStaticVoidMethod方法來完成最終的調用過程。 最后在Java_com_ryg_JniTestApp_MainActivity_get方法中調用callJavaMethod方法,如下所示。 jstring Java_com_ryg_JniTestApp_MainActivity_get(JNIEnv *env, jobject thiz){ printf("invoke get in c++\n"); callJavaMethod(env, thiz); return env->NewStringUTF("Hello from JNI in libjni-test.so ! "); } 由于MainActivity會調用JNI中的Java_com_ryg_JniTestApp_MainActivity_get方法,Java_com_ryg_JniTestApp_MainActivity_get方法又會調用callJavaMethod方法,而callJavaMethod方法又會反過來調用MainActivity的methodCalledByJni方法,這樣一來就完成了一次從Java調用JNI然后再從JNI中調用Java方法的過程。安裝運行程序,可以看到如下日志,這說明程序已經成功地從JNI中調用了Java中的methodCalledByJni方法。 D/MainActivity: methodCalledByJni, msg: msg send by callJavaMethod in test.cpp. 我們可以發現,JNI調用Java的過程和Java中方法的定義有很大關聯,針對不同類型的Java方法,JNIEnv提供了不同的接口去調用,本章作為一個JNI的入門章節就不再對它們一一進行介紹了,畢竟大部分應用層的開發人員并不需要那么深入地了解JNI,如果讀者感興趣可以自行閱讀相關的JNI專業書籍。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看