2017-02-26 4 views
0

私はNDK共有ライブラリを持っていますので、いくつかのテストを行いたいと思います。私は現在、ライブラリにリンクするネイティブ実行可能ファイルを作成するためにgoogletestを使用し、README.NDKの指示に従っています。ダミー実行ファイルは、Androidエミュレータで実行できます。良い。Androidネイティブ実行ファイルでJNIEnvのインスタンスを取得する

さて、トリッキーなものは共有ライブラリは、例えば、JNIEnvのインスタンスの機能の多くを呼び出すことです:

  • env-> NewStringUTF()
  • ...

質問は、Androidのネイティブ実行可能ファイルがJNIEnvのインスタンスを取得するにはどうすればいいですか?

1つの方法は、以下に説明する呼び出しAPIを使用することです。 http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/invocation.html

しかし、私はNDKのjni.h中を見て、そしてこのAPIの使い方を許可しないようだ:

/* 
* VM initialization functions. 
* 
* Note these are the only symbols exported for JNI by the VM. 
*/ 
#if 0 /* In practice, these are not exported by the NDK so don't declare them */ 
jint JNI_GetDefaultJavaVMInitArgs(void*); 
jint JNI_CreateJavaVM(JavaVM**, JNIEnv**, void*); 
jint JNI_GetCreatedJavaVMs(JavaVM**, jsize, jsize*); 
#endif 

任意の提案が高く評価されています!

(私は私が間違っている場合ので、私を修正してくださいAndroidに新しいです。ありがとう!)

答えて

0

これはAttachCurrentThread()を介して行われます。

スレッドが既に接続されている場合はこれを呼び出すのは問題ありません。

+0

ありがとうございますが、AttachCurrentThreadにはJavaVMが必要です。しかし、上記のコードスニペットが示すように、JNI_CreateJavaVMは許可されていません... – ZillGate

関連する問題