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 サイトの他の関連記事を参照してください。