Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包装一个c++;使用jni的库 我成功地将一个C++库添加到了Android 2.3.6源树中。 现在我想包装我的库以便从java使用 我在网上搜索了很多关于实现这一点的步骤,但我找到的几乎所有的例子都是hello world的例子和简单的例子。。。 从这些例子中,我明白了,我必须创建一个java文件,调用我需要的前缀本机函数,然后生成头文件并实现C++文件。_Android_C++_Android Ndk_Java Native Interface - Fatal编程技术网

包装一个c++;使用jni的库 我成功地将一个C++库添加到了Android 2.3.6源树中。 现在我想包装我的库以便从java使用 我在网上搜索了很多关于实现这一点的步骤,但我找到的几乎所有的例子都是hello world的例子和简单的例子。。。 从这些例子中,我明白了,我必须创建一个java文件,调用我需要的前缀本机函数,然后生成头文件并实现C++文件。

包装一个c++;使用jni的库 我成功地将一个C++库添加到了Android 2.3.6源树中。 现在我想包装我的库以便从java使用 我在网上搜索了很多关于实现这一点的步骤,但我找到的几乎所有的例子都是hello world的例子和简单的例子。。。 从这些例子中,我明白了,我必须创建一个java文件,调用我需要的前缀本机函数,然后生成头文件并实现C++文件。,android,c++,android-ndk,java-native-interface,Android,C++,Android Ndk,Java Native Interface,但我不明白如何用这种方式调用我的库函数。 这些头和我的函数之间有什么联系。。? 我现在真的很困惑,我不知道如何开始 因此,如果有人能告诉我,如果我理解了你的问题: >,就可以告诉我包装C++库(已经集成在AOSP) < P>的步骤: 让你说,这个方法有一个C++库< /p> int cPlusPlusMethod{ // Your c++ implementation } 基本上你要做的是: 创建所需的java方法 本机int javaMethod() >P>按照您在链接中看到的步骤,创

但我不明白如何用这种方式调用我的库函数。 这些头和我的函数之间有什么联系。。? 我现在真的很困惑,我不知道如何开始
因此,如果有人能告诉我,如果我理解了你的问题:

>,就可以告诉我包装C++库(已经集成在AOSP)

< P>的步骤:

让你说,这个方法有一个C++库< /p>

int cPlusPlusMethod{
  // Your c++ implementation
}
基本上你要做的是:

  • 创建所需的java方法

    本机int javaMethod()

  • >P>按照您在链接中看到的步骤,创建C++头,您将有如下类似的内容:

    JNIEXPORT jint JNICALL Java_yourPackageName_yourJavaClass_javaMethod(JNIEnv*)

    现在你有一个C++报头,上面有你需要的所有方法的声明。编写一个C++文件,实现该头并复制粘贴库的C++实现。 JNIEXPORT jint JNICALL Java\u yourPackageName\u yourJavaClass\u javaMethod(JNIEnv*env){ //你的C++实现 }

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

    从android项目根文件夹执行ndk构建,就这样

    也许这不是最聪明的方法,但至少对我来说是有效的。
    显然,如果你有库源文件,如果你说的是静态库,那么我无法帮助你。

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

    这一系列的博客文章似乎特别有用:


    您可能还会发现包装器自动生成器很有用。有一个我在这里没有尝试过的:

    谢谢。你是说写一个C++文件来实现那个头,复制粘贴C++的库实现,复制和粘贴它的代码,或者我必须把变量类型转换成JNI类型(比如JSnG,……)?我认为您必须仅对传递给java本机方法的变量使用jni类型。对于所有其他方法(以及方法中声明的变量),您应该能够使用标准c/c++类型。。这里还可以查看jni类型说明: