Использование встроенного двоичного кода в приложении для 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