3

AndroidネイティブC/C++でJavaコードを呼び出すには2つの方法があります。

  1. Javaアプリは最初にネイティブ関数を呼び出します。ネイティブ関数は、JavaVMとJNIEnvを保存し、それらを使用してJavaコード(JavaクラスXなど)を呼び出します。

  2. ネイティブ関数は同じJavaクラスXを呼び出します。この場合、Javaコードを実行するためにJVMが必要です。JNI_CreateJavaVM()を使用してこれを行うことができます。

上記の2つの方法で作成されたJVMは異なることがわかりました。

これがJavaクラスXです。

public class X
{
    public X()
    {
        Log.d("X", "X()");
    }
}

Log.d()は、方法1で正常に実行できます。ただし、方法2で、logcatから次のエラーメッセージが表示されます。「ネイティブLandroid / util / Log; .println_native(IILjava / lang/Stringの実装が見つかりません; java / lang / String;)I "

JNI_CreateJavaVM()から取得したJNIEnvが何かを見逃していると思います。方法2を使用する必要がある場合、どうすれば問題を解決できますか?

4

1 に答える 1

1

com.android.internal.util.WithFramework のコードが役立つかもしれません。ここで私の同様の質問を参照してください

于 2012-10-21T22:17:37.717 に答える