在安卓应用中使用预构建的本地二进制文件

 2023-01-21    250  

问题描述

这个问题已经在不同的地方提出,但似乎没有一个简单地详细说明所需的内容.

到目前为止

在安卓应用中使用预构建的本地二进制文件

我已经将二进制文件放入我的项目/lib/armeabi-v7a/目录中,并将其重命名为libffmpeg.因此,如其他帖子中的建议,包装系统可以将其拾取.

现在问题是libffmpeg.so或ffmpeg需要其他一些通常在其(ffmpeg)自己的lib目录中的库.当我使用runtime.getRuntime().执行(命令)运行它时,它会呼叫那些其他库,这些库要么不在正确的位置,要么根本没有被Android包装系统拾取.

因此,我复制了FFMPEG需要的所有库中/lib/armeabi-v7a/,但仍然没有成功.

在stackoverflow中搜索时,我发现使用JNI Ablect的帖子,其他人则说他们可以在没有JNI的情况下做到这一点.什么是使用Android中需要其他诽谤的预制二进制的最简单方法?

然后,还有一个问题是android.mk和application.mk文件,何时需要它们,只有当一个人试图在Android中构建本机C/C ++代码时,或者当预先构建时也应使用它涉及图书馆和二进制文件.而且,如果我在这种情况下需要将这些文件放入项目中?

是否需要它们?

我是Android的新手,请透露并结束,感谢您分享您的一些智慧.

推荐答案

我可以给您一些链接:

如何使用外部C/C/C ++与JNI合作时库文件
使用JNI作为.h文件的源文件夹中的Android中的Java文件?
多重(我和第三方)在Android中ndk
android ndk- android ndk-使两个本地共享图书馆互相呼唤

首先,您要如何调用本机代码?

您有2个选项:

1)通过包装器来调用库函数:定义一组本机函数的类.您将必须在Java表示和C表示之间转换数据结构. Java对象映射到非常特定的C数据结构,通常无法从Java访问C结构.因此,对于每个调用的C/C ++函数,都有一个包装器实现Java本机函数.

2)您可以调用shell命令. Android是Linux,您可以通过adb shell与之通信.您可以通过命令行参数,从开始过程的stdin/stdout中写入/读取/阅读.您还可以通过文件系统传递到启动过程的数据.例如,这是在扎根设备上使用su的方法:
execute shell命令来自Android

以上所述是小编给大家介绍的在安卓应用中使用预构建的本地二进制文件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26320.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。