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

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

DDD
リリース: 2024-11-03 20:33:29
オリジナル
398 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート