AndroidネイティブC/C++でJavaコードを呼び出すには2つの方法があります。
Javaアプリは最初にネイティブ関数を呼び出します。ネイティブ関数は、JavaVMとJNIEnvを保存し、それらを使用してJavaコード(JavaクラスXなど)を呼び出します。
ネイティブ関数は同じ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を使用する必要がある場合、どうすれば問題を解決できますか?