2009-07-30 4 views
0

のは、私は肝炎言ってみましょう:クライアントコードのJNIバインディングとクライアントコードをいつ再コンパイルするのですか?

  1. CライブラリlibfoolibfooにJNIバインディングの
  2. パッケージorg.foo.jni、および
  3. パッケージcom.user.of.fooを。

もちろん、libfoo変化org.foo.jniタッチは、私がorg.foo.jniのクラスを再コンパイルする必要がある機能の場合。また、明らかに、com.user.of.fooのメソッドがorg.foo.jniに変更された場合は、com.user.of.fooのクラスを再コンパイルする必要があります。私はバグを修正するlibfooを変更するが、インタフェースを変更しない場合でも...

  • 、私はorg.foo.jniのクラスを再コンパイルする必要がありますか?
  • インターフェイスをlibfooに変更しても、org.foo.jniから呼び出されない関数の場合のみ、org.foo.jniでクラスを再コンパイルする必要がありますか?
  • libfooの変更があるため、org.foo.jniのクラスを再コンパイルしても、インターフェイスをorg.foo.jniに変更しないと、com.user.of.fooのクラスを再コンパイルする必要がありますか?

答えて

3

私はバグを修正するために今libfooを変更するが、 インターフェイスを変更しない場合、私は org.foo.jniのクラスを再コンパイルする を持っているのですか?

いいえ。インターフェイスが変更されない場合は、Javaコード/インターフェイスコードを再コンパイルする必要はありません。これはJNIコードの機能の一部です。インターフェイスは同じままで、基本的なシステム固有の実装は変更可能です。

私は 、今libfooにインターフェイスを変更だけ org.foo.jniから呼び出されていない機能で、私はorg.foo.jniで クラスを再コンパイルする必要がない場合は?

IMOをする必要があるかどうか。あなたが間違っている場合、あなたは(UnimplementedMethod例外、IIRC)例外が発生しますが、クラスはおそらく

私は、理由 を調べてlibfooの何らかの変化の org.foo.jniのクラスを再コンパイルする場合、動作しますが、インターフェイス をorg.foo.jniに変更しないでください。 com.user.of.fooのクラスを再コンパイルする必要がありますか?

いいえ、あなたの最初の質問と同じ理由です。インタフェースのポイントは、2つが別々の懸念事項であり、個別に開発してコンパイルできることです。

JNIについて考える1つの方法は、シリアルポートの例を使用することです。シリアルポートの基礎となる実装はインターフェイスに準拠する必要があり、Javaからの呼び出しはインターフェイスに準拠している必要があります。2つは別々に(実際にはほとんど常に)開発され、異なる時に開発されることができます。インタフェースが変更された場合は、新しいインタフェースに更新するために両方とも変更する必要があります。

希望に役立ちます。

関連する問題