2014-11-26 3 views
1

этот вопрос поднят в разных местах, но ни один из них не дает простого подробного объяснения того, что требуется.Использование предварительно построенного бинарного файла в приложении android

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

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

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

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

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

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

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

+0

исполняемому FFmpeg предлагает интерфейс высокого уровня, что сами библиотеки не предлагают, поэтому при использовании 'ffmpeg' исполняемым делает вещи проще для вашего приложение, которое было бы лучше, чем JNI. Пожалуйста, уточните ваши потребности. –

+0

Привет @Samuel, да, используя только исполняемый файл ffmpeg, я бы хотел, только один файл без всех внешних библиотек. Проект приостановлен, если у вас есть дополнительная информация, было бы признательно, спасибо. – user280026

ответ

0

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

How to use external C/C++ library file while working with JNI
include .h file into java file in android using jni as source folder of .h file?
multiple (my and 3rd-party) native libraries in Android NDK
Android NDK - make two native shared libraries calling each other

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

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

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

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

+0

Мне бы хотелось узнать, как добавить другие библиотеки или файлы .so, которые нужно запустить в двоичном формате, то есть где я, застрял, потому что у меня уже есть встроенная библиотека, мне все еще нужны все файлы заголовков? – user280026

+0

Теперь я использую System.loadlibrary (avdevice), чтобы загрузить нужные библиотеки и, похоже, нашел там место, поэтому позвольте мне посмотреть, как это происходит. Я woudd дать jni метод попробовать без сомнения, когда у меня есть код C/C++, который я хотел бы использовать на android – user280026

+0

Пожалуйста, вопрос по-прежнему открыт, это поможет другим, если кто-то может составить простой понятный язык, что нужно, я Также уверен, что для этого может быть/должно быть более одного метода. – user280026

Смежные вопросы