在预编译的C ++和Java for Android之间可以传递什么类型的数据?

时间:2016-12-14 00:24:47

标签: java android c++ opencv

我正在开发一个目前在python中制作原型的OpenCV项目,但我想在Android中开展工作。

我认为从直接java开始然后将其转移到Android会更好,但是用于java的OpenCV似乎没有像Python和C ++那样完全实现(例如它没有imshow) )。所以现在我不确定从Python到Java的转换会有多么简单。

因为在使用OpenCV时Python对C ++过去相对容易,所以我想到了其他选项。我看到你可以在Android中运行预编译的C ++代码,因此这可能是一个选项。我看到的问题是我不确定我能否传递我需要的数据。在Android Java和预编译的C ++之间进行通信时会出现什么样的限制?预编译的C ++是否允许访问文件系统,因此它可以读取图像?

1 个答案:

答案 0 :(得分:0)

您可以传递java支持的任何数据。显然你不能按原样传递C ++类(尽管你可以传递一个指针,保持Java,然后将它传递给C ++,它可以再次使用)。

在C ++方面,通过JNI API,您可以完成使用Java代码所能完成的所有工作。但是,它需要额外的工作和对线程绑定,JNI上下文和JNI / Java内存管理的清晰理解。

在Java方面,您可以传递给C函数字符串,基本类型(简单)或复杂类型,然后使用JNI访问字段,调用方法,抛出异常等等。

关于内存管理存在一些缺陷,如果从C ++ / JNI中分配Java堆,请仔细阅读有关分配,生命周期和引用类型的内容。

特定于Android,您可能还想阅读一些JNI Tips

Android原生可以访问IO和文件系统,至少具有与常规Android Java apk相同的功能。您可以在此处查看示例和讨论File Operations in Android NDK

相关问题