Если я хочу включить двоичный файл Linux (например, ffmpeg) в свой файл .apk (только для устройств на базе ARM), возможно ли его распространение для телефонов без рута? Я знаю, что можно вызвать включенный двоичный файл с помощью Runtime.exec(), но рекомендуется ли это?
Упаковка бинарника linux в apk для Android
Ответы (2)
Вы можете хранить двоичный файл в папке res/raw
или в папке assets
. Таким образом, он будет развернут на устройстве. Вы должны «извлечь» его после установки, ваш /data/data/your.package/files/
является допустимым местом назначения; /sdcard/
нет. Обычное место назначения /data/local/
недоступно для вашего приложения, даже если оно предназначено для оболочки adb. chmod 500
тоже нормально.
При этом libffmpeg.so с оболочками JNI проще использовать в приложении для Android и требует меньше системных ресурсов.
Обновление, апрель 2014 г. Вы можете обмануть систему и сохранить двоичный файл в папке libs/armeabi
и позволить программе установки извлечь этот двоичный файл для вас. Он окажется в папке /data/data/your.package/lib/
с правами доступа +x
. У этого хака есть еще одно приятное преимущество: он позволяет системе выбрать правильный ABI для извлечения бинарного файла для: armeabi, armeabi-v7a, mips, или x86.
Хитрость заключается в том, чтобы следовать соглашению об именах общих библиотек. Итак, когда вы помещаете исполняемый файл ffmpeg в libs/armeabi
, переименуйте файл в lib_ffmpeg_.so. Естественно, вы также Runtime.exec()
будете использовать для файла полный путь, а также новые добавленные префикс и суффикс.
Я не думаю, что вы сможете пометить их как + x без рута.
При использовании ffmpeg обычно создается оболочка JNI для libffmpeg.