4

我正在从现有项目中导入标头以将其移植到 Android-NDK。在少数情况下,我想从 Java 层使用本机头文件中定义的枚举。怎么能做到这一点?

理想情况下,我只想以某种方式将常量公开给 Java 层,但我看不到这样做的方法。

最明显的可能性是在 Java 和 C++ 中双重定义枚举。但是,现有的标头 a) 没有明确的编号,b) 具有 #ifdef'ed 的元素,并且 c) 通过 SVN Externals 与现有项目共享。因此,双重定义枚举似乎比典型情况更脆弱。

下一个想法是使用一些构建时代码生成基于预处理的标头在 Java 中创建枚举——可能只是作为整数常量而不是 Java 枚举?

我的第三个也是最模糊的想法是在 Java 中定义枚举,将这些对象传递给 JNI 粘合,并让它与 FindClass()、GetStaticFieldID() 和 GetStaticObjectField() 的某些调用进行比较;然后让 JNI 胶水将它们重新映射到本机枚举。不过,这一切似乎都是低效的。

建议?

4

1 回答 1

1

我会制作一组完全独立的 Java 枚举,并在两者都可用的 JNI 级别上映射它们。确保在枚举类上运行 javah,以便为它们的序数获得一些#defines。

于 2012-11-20T22:37:04.110 回答