Android-NDK へのポートの既存のプロジェクトからヘッダーをインポートしています。いくつかのケースでは、Java レイヤーから使用したいネイティブ ヘッダーで定義された列挙型があります。どうすればそれを行うことができますか?
理想的には、どうにかして定数を Java レイヤーに公開したいのですが、それを行う方法がわかりません。
最も明白な可能性は、Java と C++ の両方で列挙型を二重に定義することです。ただし、既存のヘッダーには、a) 明示的な番号付けがなく、b) #ifdef された要素があり、c) SVN 外部を通じて既存のプロジェクトと共有されます。したがって、列挙型を二重に定義することは、典型的なケースよりもかなり脆いようです。
次のアイデアは、ビルド時の code-gen を使用して、前処理されたヘッダーに基づいて Java で列挙型を作成することです。おそらく、Java 列挙型ではなく整数定数としてですか?
私が持っている 3 番目の最も曖昧なアイデアは、Java で列挙型を定義し、それらのオブジェクトを JNI グルーに渡し、FindClass()、GetStaticFieldID()、および GetStaticObjectField() の呼び出しと比較することです。次に、JNI グルーでそれらをネイティブ列挙型に再マップします。しかし、それはすべて非効率に思えます。
提案?