我正在Eclipse下为Android开发。我有一些c ++(.h和.cpp)文件,我希望在我的Android应用程序中使用。我已阅读Programmming in C/C++ with the Java Native Interface,现在我知道如何制作.so文件并将其导入Android。但主要问题是:
是否有任何工具可以将c ++(.h和.cpp)文件转换为java样式文件,我可以编译和创建.so库?我听说过JNI - javah和javac可以帮助我,如果它们可以如此,
编辑:
javah是一个有用的工具,可以从给定的类创建C样式的头文件。生成的头文件以C语言描述类文件。虽然可以手动创建头文件,但这几乎总是一个坏主意。 javah确切地知道Java类型和对象如何映射到C类型。例如,Java中的int映射到C中的long,而Java中的long映射到本机代码中的64位值_int64。如何使用这个javah?
任何人都有如何使用Android应用程序中的.so库中实现的函数?如果有人有代码示例或有用的文章链接,请提供。
提前致谢!
答案 0 :(得分:7)
您没有“将C ++文件转换为Java样式”。您需要围绕现有的C ++代码创建JNI包装器。这个JNI包装器实际上是可以由Java调用的C ++代码。
通过包装器,我的意思是您不必修改现有的C ++代码库。这个包装器,或更好地说这个绑定通常应该非常薄。包装器代码仅用于公开现有功能,而不是实现它们。最好将实现保留在(可移植的)C ++代码库中。
如果代码库不是太大,那么我建议您手动编写此包装器,如The JavaTM Native Interface Programmer's Guide and Specification
中所述现在,如果您尝试绑定大型库,则可能会出现问题。因此,关于工具,我没有使用它,但请查看SWIG和相关的SWIG Java documentation。
根据主页描述,这就是你要求的:
SWIG通常用于解析C / C ++ 接口并生成'胶水 代码'[Java,Python,PHP, ...]调用C / C ++代码。
javah在某些情况下很有用,但它不是你要求的。它从Java类中的本机声明中提取JNI样板代码。关于javac,它是Java编译器,这是无关紧要的。
答案 1 :(得分:3)
在为Android开发时,您不仅限于使用Java 语言。为什么不直接使用C ++?参见例如Android NDK。