.apkファイル(ARMベースのデバイスのみ)にLinuxバイナリ(ffmpegなど)を含めたい場合、これをルート化されていない電話に配布することは可能ですか?含まれているバイナリをRuntime.exec()で呼び出すことができることは知っていますが、これは推奨される方法ですか?
2 に答える
バイナリはフォルダ内res/raw
またはassets
フォルダ内に保存できます。このようにして、デバイスにデプロイされます。インストール後に「抽出」する必要があります。あなた/data/data/your.package/files/
は有効な宛先です。/sdcard/
ではありません。/data/local/
adbシェルの場合でも、アプリから通常の宛先にアクセスすることはできません。chmod 500
また大丈夫です。
とはいえ、JNIラッパーを使用したlibffmpeg.soは、Androidアプリでの使用が簡単で、システムリソースの使用量も少なくて済みます。
更新、2014年4月システムをだましてバイナリをlibs/armeabi
フォルダに保存し、インストーラにこのバイナリを抽出させることができます。最終的には、アクセス許可のある/data/data/your.package/lib/
フォルダーになります。+x
このハックにはもう1つの優れた利点があります。これにより、システムは正しいABIを選択して、armeabi、armeabi-v7a、mips、またはx86のバイナリを抽出できます。
秘訣は、共有ライブラリの命名規則に従うことです。したがって、 ffmpeg実行可能ファイルをに入れるときはlibs/armeabi
、ファイルの名前をlib_ffmpeg_.soに変更します。もちろん、Runtime.exec()
フルパスと新しく追加されたプレフィックスとサフィックスを使用してファイルも作成します。
ルートなしで+xとしてマークを付けることはできないと思います。
ffmpegでは、libffmpegのJNIラッパーを作成するのが一般的です。