ホームページ  >  記事  >  バックエンド開発  >  Android でネイティブ C から Java メソッドを正しく呼び出す方法は?

Android でネイティブ C から Java メソッドを正しく呼び出す方法は?

DDD
DDDオリジナル
2024-11-03 20:33:29368ブラウズ

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 関数の呼び出しが間違っているために発生します。インスタンス メソッドを呼び出すには、オブジェクトを引数としてメソッドに渡す必要があります。この場合、オブジェクトは Java クラスのインスタンスを表す obj です。

修正された呼び出しは次のようになります。

<code class="c++">jobject result = env->CallObjectMethod(obj, messageMe, jstr);</code>

以上がAndroid でネイティブ C から Java メソッドを正しく呼び出す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。