2

我已经成功地将一个 c++ 库添加到了 android 2.3.6 源代码树中。现在我想包装我的库以便从java中使用我已经在网上搜索了很多关于这样做的步骤但是我发现的几乎所有示例都是hello world示例和简单示例......来自这些示例我知道我必须创建一个 java 文件,调用我需要的本地函数,前缀为 native ,然后生成头文件并实现 c++ 文件。

但我不知道如何以这种方式调用我的库函数。这些标题和我的功能之间有什么联系..?我现在真的很困惑,我不知道如何开始所以,如果有人能告诉我包装 c++ 库的步骤(已经集成在 aosp 中),我将不胜感激

4

2 回答 2

3

这是一个相当复杂的问题,可能超出了这里简短回答的范围。那么,最好的办法可能是引导您找到一些比您目前找到的更好的文档。

这一系列博客文章似乎特别有用:http ://thebreakfastpost.com/2012/01/21/wrapping-ac-library-with-jni-introduction/

您可能还会发现包装器自动生成器很有帮助。有一个我在这里没有尝试过:http ://www.teamdev.com/jniwrapper/features/

于 2013-03-28T17:23:21.447 回答
2

如果我理解你的问题:

假设您有一个使用此方法的 c++ 库

int cPlusPlusMethod{
  // Your c++ implementation
}

基本上你需要做的是:

  1. 创建您需要的 java 方法

    本机 int javaMethod();

  2. 按照您在找到的链接中看到的步骤创建 c++ 标头,您将拥有类似的内容:

    JNIEXPORT jint JNICALL Java_yourPackageName_yourJavaClass_javaMethod(JNIEnv *);

  3. 现在你有了一个包含所有你需要的方法声明的 c++ 头文件。编写一个实现该头文件的 c++ 文件并复制粘贴该库的 c++ 实现。

JNIEXPORT jint JNICALL Java_yourPackageName_yourJavaClass_javaMethod(JNIEnv *env){ // 你的 c++ 实现 }

(您必须包含所有需要的导入并将 lib 的其他文件放在“jni”文件夹中。)

从你的 android 项目根文件夹执行 ndk-build ,就是这样。

也许这不是最聪明的方法,但至少对我来说它有效。显然,如果您有库源文件,如果您正在谈论静态库,那么这将有效,那么我无法为您提供帮助。

于 2013-03-28T17:09:57.637 回答