<分区>
我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。
我正在 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编译器,无关紧要。