android - 在 Android apk 中打包 linux 二进制文件

标签 android android-ndk ffmpeg android-build

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

最佳答案

您可以将二进制文件存储在 res/rawassets 文件夹中。这样它将部署在设备上。您应该在安装后“提取”它,您的 /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-v7amips、或 x86

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

关于android - 在 Android apk 中打包 linux 二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15093663/

相关文章:

android - 上下文切换是否占用了大量时间?

FFMPEG - 制作稳定且零填充的帧计数器

windows - 将 PNG 序列从目录转换为 MP4

audio - ffmpeg 默认音频编解码器,而不是使用 acodec 选项指定它

带有 Nav Drawer 和 Action Bar Up Navigation 的 Android 导航组件不同步

c++ - 使用 android NDK 获取硬件浮点

android - 陀螺仪传感器漂移和正确的角度估计

需要 Android NDK NativeActivity 内存管理?

java - Arraylist 元素在最后一个索引之后重复

java - android 如何处理url中的空格