灵活的jni项目

时间:2012-06-10 11:41:02

标签: java c++ java-native-interface

似乎与jni合作将成为我几天的日常生活。是否有一些工具可以简化处理混合Java + C ++项目的工作?

是否可以重新生成glue * .h文件并自动重建本机库?或者我应该为maven,ant,gradle,anything_else编写一些脚本? 有经验吗?

4 个答案:

答案 0 :(得分:2)

查看JavaCPP!我还列出了该页面上的其他解决方案......当尝试使用C ++中的Java时,还有Jace

答案 1 :(得分:1)

几个月前,我遇到了同样的问题。似乎Java / C ++互操作刚刚复兴,而且你是开拓者之一。

如果您只是使用Java中的C ++对象,JNA可能是更好的解决方案。

如果您使用的是C ++中的Java,我还没有遇到过成熟的库。虽然功能上相当完整,但 JNI是一个C api (故意,如果您阅读设计原理)。如果您要为它编写大量代码,我认为编写一个围绕它的C ++框架将包括裸jobjectjnienvjclass ...句柄是值得的。明确的资源。

当C ++和Java必须使用回调等合作时,真正的问题就出现了......如果这是你的意图,请扣上......

答案 2 :(得分:1)

您在询问体验。所以我的经验是,您应该从设计良好的需求,行为和对象生命周期开始。这应该会产生一个成熟的界面,将来会发生很小的变化。结果是你需要很少更改胶水头文件,简单的一枪javah就足够了。这一切听起来都不是很敏捷我知道,但JNI除了快速的开发环境外都是其中的一切。

每天更改界面两次,添加和删除方法以及更改签名“只是为了查看它是否有帮助”是一条通往地狱的必经之路。在内存管理方面,你正在连接两个截然不同的世界,JVM很容易变得紧张。线程安全性又提高了。上面提到的辅助解决方案,虽然它们无疑是一个聪明的软件,但可能会让你误以为JNI很容易。然后JVM开始为你提供异常,你的对象将开始随机发放,等等......

答案 3 :(得分:1)

您可以使用SWIG自动生成粘合代码,并拥有make目标来重建本机库。您也可以将ANT的c ++任务用于相同的目的。