首頁  >  文章  >  後端開發  >  如何在 Android 中從 Native C 正確呼叫 Java 方法?

如何在 Android 中從 Native C 正確呼叫 Java 方法?

DDD
DDD原創
2024-11-03 20:33:29305瀏覽

How to Correctly Call a Java Method from Native C   in Android?

在Android 中從C 呼叫Java 方法

在Android 開發中,將原生C 函數與Java 元件整合是一個常見的需求。本文將解決嘗試從 C 呼叫 Java 方法時出現的特定問題。

問題:

當嘗試呼叫 Java 方法,特別是 messageMe 時,在執行 getJniString 方法期間,應用程式會從本機程式碼遇到 NoSuchMethodError 例外。

Java 程式碼:

<code class="java">public class MainActivity extends Activity {
    // ... (Java code to setup and load native library)

    public void messageMe(String text) {
        System.out.println(text);
    }
    // ... (Other Java code)
}</code>

本機C 程式碼(本機.cpp):

<code class="c++">// ... (Native C++ code to create a Java String)

// Get the class and method with the incorrect invocation
jclass clazz = env->FindClass("the/package/MainActivity");
jmethodID messageMe = env->GetMethodID(clazz, "messageMe", "(Ljava/lang/String;)V");
jobject result = env->CallObjectMethod(jstr, messageMe); // Incorrect invocation

// Corrected invocation
jobject result = env->CallObjectMethod(obj, messageMe, jstr);</code>

解決方案:

該錯誤是由於原生C 程式碼中錯誤呼叫CallObjectMethod 函數而導致的。要呼叫實例方法,您需要將物件作為參數傳遞給該方法。在本例中,物件是 obj,它代表 Java 類別的實例。

正確的呼叫應該是:
<code class="c++">jobject result = env->CallObjectMethod(obj, messageMe, jstr);</code>

以上是如何在 Android 中從 Native C 正確呼叫 Java 方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn