我正在从现有项目中导入标头以将其移植到 Android-NDK。在少数情况下,我想从 Java 层使用本机头文件中定义的枚举。怎么能做到这一点?
理想情况下,我只想以某种方式将常量公开给 Java 层,但我看不到这样做的方法。
最明显的可能性是在 Java 和 C++ 中双重定义枚举。但是,现有的标头 a) 没有明确的编号,b) 具有 #ifdef'ed 的元素,并且 c) 通过 SVN Externals 与现有项目共享。因此,双重定义枚举似乎比典型情况更脆弱。
下一个想法是使用一些构建时代码生成基于预处理的标头在 Java 中创建枚举——可能只是作为整数常量而不是 Java 枚举?
我的第三个也是最模糊的想法是在 Java 中定义枚举,将这些对象传递给 JNI 粘合,并让它与 FindClass()、GetStaticFieldID() 和 GetStaticObjectField() 的某些调用进行比较;然后让 JNI 胶水将它们重新映射到本机枚举。不过,这一切似乎都是低效的。
建议?