Использование встроенного двоичного кода в приложении для Android

Этот вопрос поднимался в разных местах, но ни один из них не дает простого подробного объяснения того, что требуется.

До сих пор я собрал собственный двоичный файл ffmpeg для использования в Android, сборка в порядке.

Я поместил бинарный файл в мой каталог project / lib / armeabi-v7a / и переименовал его в libffmpeg.so, чтобы он мог быть собран системой упаковки, как советовали в других постах.

Теперь проблема в том, что для libffmpeg.so или ffmpeg требуются некоторые другие библиотеки, которые обычно находятся в собственном ( ffmpeg) каталоге lib. когда я запускаю его с помощью Runtime.getRuntime().exec(команда), он вызывает те библиотеки, которые находятся не в нужном месте или вообще не были обнаружены системой упаковки Android.

поэтому я скопировал все библиотеки, которые требуются ffmpeg, в тот же / lib / armeabi-v7a /, но все еще безуспешно.

Ища в Stackru, я нахожу сообщения об использовании jni aproach, и другие говорят, что они могут сделать это без jni. Какой самый простой способ использовать готовый двоичный файл, который требует других библиотек в Android?

Кроме того, возникает вопрос о файлах Android.mk и Application.mk, когда они нужны, только в том случае, если кто-то пытается создать собственный код C/C++ в Android или он также должен использоваться при сборке предварительно собранных библиотек и двоичных файлов. вовлечены. А также, если они мне понадобятся для этого случая, где эти файлы должны быть помещены в проект?

Я очень новичок в Android, пожалуйста, будьте ясны и убедительны, спасибо за то, что поделились своей мудростью.

1 ответ

Я могу дать вам несколько ссылок:

Как использовать файл внешней библиотеки C/C++ при работе с JNI
включить файл.h в файл Java в Android, используя jni в качестве исходной папки файла.h?
несколько (моей и сторонней) нативных библиотек в Android NDK
Android NDK - создайте две собственные разделяемые библиотеки, вызывающие друг друга

Прежде всего, как вы хотите вызвать нативный код?

У вас есть 2 варианта:

1) Вызов функций библиотеки через обертку: класс, который определил набор собственных функций. Вам придется конвертировать структуры данных между представлением Java и представлением C. Объект Java отображается на очень специфический вид структуры данных C, и структуры C не могут быть обычно доступны из Java. Таким образом, для каждой вызываемой функции C/C++ есть оболочка, которая реализует нативную функцию Java.

2) Вы можете вызвать команду оболочки. Android - это Linux, и вы можете общаться с ним через adb shell, Вы можете передавать аргументы командной строки, записывать / читать в / из stdin / stdout запущенного процесса. Вы также можете передавать данные в / из запущенного процесса через файловую систему. Например, это как использовать su на рутированном устройстве: выполнить команду оболочки из Android

Другие вопросы по тегам