这个问题在不同的地方被提出,但似乎没有一个人简单详细地解释所需的内容。
到目前为止,我已经构建了一个用于android的本地二进制ffmpeg,构建还可以。
我已经将二进制文件放在我的项目/lib/armeabi-v7a/目录中,并将其重命名为libffmpeg.so,这样打包系统就可以提取它,正如其他文章中所建议的那样。
现在的问题是libffmpeg.so或ffmpeg需要一些其他的库,这些库通常位于( ffmpeg)自己的lib目录中。当我使用Runtime.getRuntime().exec(命令)运行它时,它会调用其他库,这些库要么不在正确的位置,要么根本没有被安卓打包系统拾取。
因此,我将ffmpeg所需的所有库复制到相同的/lib/armeabi-v7a/中,但仍然没有成功。
在Stackoverflow中搜索,我发现使用jni aproach的帖子,其他人说他们可以不使用jni。在android中使用需要其他库的预构建二进制文件的最简单方法是什么?
然后还有Android.mk和Application.mk文件的问题,什么时候需要它们,是只在试图在android中构建本地C/C++代码时才需要,还是应该在涉及预构建库和二进制文件时也使用它们。另外,如果我在这种情况下需要它们,那么这些文件应该放在项目中的什么位置?
我是android的新手,请说清楚,谢谢分享你的一些智慧。
发布于 2014-11-26 16:42:27
我可以给你一些链接:
How to use external C/C++ library file while working with JNI
include .h file into java file in android using jni as source folder of .h file?
multiple (my and 3rd-party) native libraries in Android NDK
Android NDK - make two native shared libraries calling each other
首先,您希望如何调用本机代码?
您有两个选项:
1)通过包装器调用库函数:定义了一组本机函数的类。您必须在Java表示和C表示之间转换数据结构。Java对象映射到一种非常特殊的C数据结构,而C结构通常不能从Java访问。因此,对于每个调用的C/C++函数,都有一个实现Java本机函数的包装器。
2)您可以调用shell命令。Android就是Linux,你可以通过adb shell与它通信。您可以传递命令行参数,对已启动进程的stdin/stdout进行写/读操作。您还可以通过文件系统向已启动的进程传递数据,或从已启动的进程传递数据。例如,下面是如何在带根的设备上使用su:execute shell command from android
https://stackoverflow.com/questions/27144101
复制相似问题