首页  >  文章  >  后端开发  >  如何在 Android 中从 Native C 正确调用 Java 方法?

如何在 Android 中从 Native C 正确调用 Java 方法?

DDD
DDD原创
2024-11-03 20:33:29307浏览

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