2011-12-15 8 views
0

私が知りたかったのは、アンドロイドにC/C++コードが書かれているアプリケーションがあるとします。このコードを実行すると、ネイティブのCライブラリが必要になります。 DVMはこれらのライブラリとどのように通信しますか?ライブラリからリソースを取得するためにBinderを使用していますか?このコード部分はJVMで実行されません。これがどこに実行されていない場合、どのように?また、JVMとネイティブライブラリの間にリンクがありますか?JVMとネイティブライブラリ間の通信

答えて

1

コミュニケーションとはどういう意味ですか? .soがVMにロードされると、vmはシンボルを解析し、もしあればJavaのネイティブメソッドにバインドします。基本的にVMは.soとは話しません。 バイトコードワールドは、VMプロセス内の構造化メモリに似ています。ネイティブメソッドは、VMの一部であるjni環境ルーチンを読み書きすることができます。

+0

ありがとう、私は今それを得ることができます。もう一つ。 JNIはJVMの権利で使用されていますか?アンドロイドでDalvik VMに使用されているものと同じものは何ですか?どのネイティブライブラリをメモリにロードするかはどのように決定されますか?私が知る限り、DVMコアでは、プログラムを実行している間にlibsが読み込まれます。 –

+1

Dalvik VMはJNIも実装しています。 Javaクラスは、System.loadLibrary(name)を呼び出してVMに.soをロードするように要求することがあります。 – pinxue

関連する問題