jniでの作業は、数か月間は私の日常業務になるようです。JavaとC++の混合プロジェクトの処理を簡素化するツールはありますか?
接着剤*.hファイルを再生成し、ネイティブライブラリを自動的に再構築することは可能ですか?または、maven、ant、gradle、anything_else用のスクリプトを作成する必要がありますか?経験はありますか?
jniでの作業は、数か月間は私の日常業務になるようです。JavaとC++の混合プロジェクトの処理を簡素化するツールはありますか?
接着剤*.hファイルを再生成し、ネイティブライブラリを自動的に再構築することは可能ですか?または、maven、ant、gradle、anything_else用のスクリプトを作成する必要がありますか?経験はありますか?
JavaCPPをチェックしてください!そのページには他の解決策もリストしています... C++からJavaを使おうとするときに役立つJaceもあります。
あなたは経験について尋ねています。したがって、私の経験では、非常によく設計された要件、動作、およびオブジェクトのライフサイクルから始める必要があります。これにより、インターフェイスが成熟し、将来的にはほとんど変更されないはずです。その結果、接着剤ヘッダーファイルを変更する必要はめったになく、単純なワンショットjavahで十分です。私が知っているように、すべてがそれほど機敏に聞こえるわけではありませんが、JNIは急速な開発環境以外のすべてです。
1日に2回インターフェースを変更し、メソッドを追加および削除し、「それが役立つかどうかを確認するためだけに」署名を変更することは、地獄への確実な道です。メモリ管理に関して2つの非常に異なる世界を接続しているため、JVMは非常に簡単に神経質になる可能性があります。スレッドセーフはさらにレベルアップしています。前述のヘルパーソリューションは、間違いなく巧妙なソフトウェアですが、JNIが簡単であるという誤った認識を与える可能性があります。次に、JVMはどこからともなく例外を出し始め、オブジェクトはランダムに初期化されなくなり始めます...
数ヶ月前、私は同じ質問に直面しました。Java / C ++の相互運用機能が今復活しているようで、あなたはパイオニアの1人のようです。
JavaのC++オブジェクトを使用しているだけの場合は、JNAの方が優れたソリューションになる可能性があります。
C ++からJavaを使用している場合、私はまだ成熟したライブラリに遭遇していません。機能的には完全ですが、JNIはC apiです(意図的に、設計の根拠を読んだ場合)。あなたがそれのためにたくさんのコードを書き込もうとしているなら、私はそれの周りに裸の、、...ハンドルを明示的なリソースにラップするC++フレームワークを書くのにお金がかかるとjobject
思いjnienv
ますjclass
。
本当の問題は、C++とJavaがコールバックなどを使用して協力しなければならないときに発生します...それがあなたの意図である場合はバックルアップしてください...
SWIGを使用してグルーコードを自動的に生成し、makeターゲットを使用してネイティブライブラリを再構築できます。同じ目的でANTのc++タスクを使用することもできます。