java - 将现有的 C++(.h 和 .cpp)文件转换为适用于 Android 的 java

标签 java c++ android

<分区>

我正在 Eclipse 下为 Android 开发。我有一些我希望在我的 Android 应用程序中使用的 C++(.h 和 .cpp)文件。我读过Programmming in C/C++ with the Java Native Interface现在我知道如何制作 .so 文件并将其导入 Android。但主要问题是:

是否有任何工具可以将 c++(.h 和 .cpp)文件转换为我可以编译和创建 .so 库的 java 样式文件?我听说过 JNI - javah 和 javac 这些工具可以帮助我吗?如果可以,如何帮助我?


已编辑:

javah 是一个有用的工具,可以从给定的类创建 C 风格的头文件。生成的头文件用 C 术语描述类文件。尽管可以手动创建头文件,但这几乎总是一个坏主意。 javah 确切地知道 Java 类型和对象如何映射到 C 类型。例如,Java 中的 int 映射到 C 中的 long,而 Java 中的 long 映射到 native 代码中的 64 位值 _int64。这个javah怎么用?

有人知道如何在 android 应用程序中使用 .so 库中实现的函数吗?如果有人有代码示例或有用的文章链接,请提供。

提前致谢!

最佳答案

您不会“将 C++ 文件转换为 java 样式”。您需要围绕现有的 C++ 代码创建一个 JNI 包装器。这个JNI wrapper其实是Java可以调用的C++代码。

包装器是指您不必修改现有的 C++ 代码库。这个包装器,或者更好的说法是这个绑定(bind) 通常应该非常薄。包装器代码仅用于公开现有功能,而不是实现它们。最好将实现保留在(可移植的)C++ 代码库中。

如果代码库不是太大,那么我建议您手动编写此包装器,如 The JavaTM Native Interface Programmer's Guide and Specification 中所述。

现在,如果您尝试绑定(bind)大型库,可能会出现问题。所以,关于工具,我没用过,但看看SWIG ,以及相关的SWIG Java documentation .

根据首页描述,您要的是:

SWIG is typically used to parse C/C++ interfaces and generate the 'glue code' required for [Java, Python, PHP, ...] to call into the C/C++ code.

javah 在某些情况下可能很有用,但这不是您所要求的。它从 Java 类中的 native 声明中提取 JNI 样板代码。至于javac,是Java编译器,无关紧要。

关于java - 将现有的 C++(.h 和 .cpp)文件转换为适用于 Android 的 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5949557/

相关文章:

python - 使用 Python Ctypes 和 C++ 时如何解决段错误?

c++ - 如何在 while 循环中使用 .erase()?

java - Android 语言环境困惑?

android - Android 的 Http 库比较。哪个是首选?

java - Google Search Appliance Feed 错误

java - 在 Maven 中使用不同版本的库构建模块

java - Mongo 副本集 - 客户端是否需要了解所有这些?

c++ - 简单虚拟机安全、高效的底层数据类型

java - Spring 3.1.0 mvc 绑定(bind) modelattribute 以及 requestbody

java - 如何处理fcm通知数据而不需要点击android中的通知弹出窗口