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

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

DDD
發布: 2024-11-03 20:33:29
原創
397 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板