首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在android应用程序中使用预构建的本机二进制文件

在android应用程序中使用预构建的本机二进制文件
EN

Stack Overflow用户
提问于 2014-11-26 16:12:17
回答 1查看 1.9K关注 0票数 2

这个问题在不同的地方被提出,但似乎没有一个人简单详细地解释所需的内容。

到目前为止,我已经构建了一个用于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的新手,请说清楚,谢谢分享你的一些智慧。

EN

回答 1

Stack Overflow用户

发布于 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进行写/读操作。您还可以通过文件系统向已启动的进程传递数据,或从已启动的进程传递数据。例如,下面是如何在带根的设备上使用suexecute shell command from android

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27144101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档