适用于android的C ++库

时间:2014-01-20 16:21:55

标签: java android c++ eclipse android-ndk

我使用SDK在eclipse中编写了多个应用程序。我之前也使用过C ++。现在我被要求安排一些旧的C ++代码被包装到一个java库中,或者至少有一个java接口,这样其他android程序员(不懂C ++)就可以在他们的代码中使用它。

我已经看过各种各样的例子和讨论,使用NDK将C ++代码编写成完整的独立应用程序,但绝不是库。

如果使用我的库的android程序员甚至不需要知道或安装NDK本身会更好。

有人可以确认我想要做的事情是可能的。如果是这样,怎么样?

2 个答案:

答案 0 :(得分:1)

您需要编写JNI(Java Native Interface)代码才能访问该库。在您的Java类中,您将拥有一个方法,例如:

private native final int doStuff();

将对应于使用NDK编译的.cpp文件中的函数。调用Java方法时将调用此C ++函数。

看一下这篇文章:http://mobile.tutsplus.com/tutorials/android/ndk-tutorial/

这是一个开源项目,我正在做这件事:https://github.com/svenoaks/SoundTouch-Android。看一下soundtouch-jni.cpp文件以及它与SoundTouch.java文件中的调用的对应关系。

在编写适当的方法之后,您可以将C ++库和JNI代码编译为二进制.so文件,以便用户无需了解NDK。然后,该项目可以像常规的Android库项目一样使用。

如果您想要定位x86设备以及ARM体系结构,则需要在Application.mk文件中启用x86来构建它 - 请查看http://software.intel.com/en-us/articles/creating-and-porting-ndk-based-android-apps-for-ia#using-x86-ndk-toolset

答案 1 :(得分:1)

is a way to do it与Eclipse(ADT):

  

您可以创建一个Android库项目并让开发人员   将该库项目添加到其主项目中。任何本地库   如果有的话,该项目将被纳入主项目   已经内置到其lib目录中。它不像一个整洁   jar,但它和我们常规的android库一样   导出java代码和资源的项目。

对于AndroidStudio,包装略有不同,请参阅this discussion。请注意,AS目前是一个移动目标;我们都希望它能在得到官方支持之前得到体面的支持。