3

如果我想在我的 .apk 文件中包含一个 linux 二进制文件(如 ffmpeg)(仅适用于基于 ARM 的设备),这是否可以分发给非 root 手机?我知道可以使用 Runtime.exec() 调用包含的二进制文件,但这是推荐的做法吗?

4

2 回答 2

9

您可以将二进制文件存储res/raw在文件夹中或assets文件夹中。这样,它将部署在设备上。您应该在安装后“提取”它,您/data/data/your.package/files/的目的地是有效的;/sdcard/不是。您的应用程序无法访问通常的/data/local/目的地,即使它是针对 adb shell 的。chmod 500也很好。

也就是说,带有 JNI 包装器的 libffmpeg.so 更易于在 Android 应用程序中使用,并且占用的系统资源更少。


更新,2014 年 4 月您可以欺骗系统,并将二进制文件存储在libs/armeabi文件夹中,然后让安装程序为您提取此二进制文件。它将最终在具有权限的/data/data/your.package/lib/文件夹中。+x这个 hack 还有一个很好的优势,它可以让系统选择正确的 ABI 来提取二进制文件:armeabiarmeabi-v7amipsx86

诀窍是遵循共享库命名约定。因此,当您将ffmpeg可执行文件放入.so 时libs/armeabi,将文件重命名为lib_ffmpeg_.so。自然,您还将Runtime.exec()使用文件的完整路径,以及新添加的前缀和后缀。

于 2013-02-26T21:30:47.243 回答
1

我不认为你不能在没有 root 的情况下将它们标记为 +x。

使用 ffmpeg,为 libffmpeg 创建 JNI 包装器更为常见。

于 2013-02-26T16:05:47.260 回答