如果我想在我的.apk文件在Linux二进制(如ffmpeg)来(仅适用于基于ARM的设备),这是能够分散非植根手机? 我知道这是可调用的Runtime.exec()的包含的二进制,但它是一个推荐的做法?
Answer 1:
你可以存储在二进制res/raw
或assets
文件夹中。 通过这种方式将被部署在设备上。 你应该“解压”,它在安装后,你的/data/data/your.package/files/
是一个有效的目标; /sdcard/
不是。 通常/data/local/
目的地不是你的应用程序访问,即使它是亚行的shell。 chmod 500
也未尝不可。
这就是说,libffmpeg.so用JNI包装比较容易在一个Android应用程序使用,且占用较少的系统资源。
更新,APRL 2014你就可以欺骗系统,并储存在您的二进制libs/armeabi
文件夹,并让安装程序提取这个二进制为您服务。 它将最终/data/data/your.package/lib/
文件夹,与+x
权限。 这个技巧还有一个很好的优势,它可以让系统自动选择正确的ABI来提取二进制:armeabi,armeabi-V7A,MIPS或x86。
关键是要按照共享库命名约定。 所以,当你把ffmpeg的可执行文件到libs/armeabi
,重命名为lib_ffmpeg_.so文件。 当然,你也会Runtime.exec()
使用全路径的文件,并新添加的前缀和后缀。
Answer 2:
我不认为你将能够让他们标记为+ X无根。
有关ffmpeg,它更通常创建一个JNI包装器libffmpeg。
文章来源: Packaging linux binary in Android apk