Разработка с помощью LibVLC для Android в Windows
Я изо всех сил пытался получить демонстрационное приложение с Android-LibVLC.
Я могу найти документацию для Linux и не могу заставить приложение работать на моем устройстве (хотя оно компилируется).
Когда я запускаю приложение, он записывает:
12-16 15:58:19.572 9121-9121/? E/VLC/LibVLC﹕ Can't load vlcjni library: java.lang.UnsatisfiedLinkError: Couldn't load vlcjni from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.compdigitec.libvlcandroidsample-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.compdigitec.libvlcandroidsample-1, /vendor/lib, /system/lib]]]: findLibrary returned null
12-16 15:58:19.667 9135-9135/com.compdigitec.libvlcandroidsample E/VLC/LibVLC﹕ Can't load vlcjni library: java.lang.UnsatisfiedLinkError: Couldn't load vlcjni from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.compdigitec.libvlcandroidsample-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.compdigitec.libvlcandroidsample-1, /vendor/lib, /system/lib]]]: findLibrary returned null
Я скомпилировал проект APK с классами каталога org.videolan.libvlc как частью корня источника и с jni-каталогом в том же модуле и не смог, я также включил весь модуль VLC в качестве отдельной библиотеки модуль и сделал его зависимым, это также не удалось.
Есть ли у кого-нибудь проверенный метод настройки/сборки проекта Android с помощью LibVLC, из окон? Или ссылку на инструкции/документацию? (Я ничего не смог найти).
Цель состоит в том, чтобы заменить мои зависимые классы на основе android MediaPlayer на библиотеку/реализацию, которая поддерживает больше типов файлов/кодеков.
Ответы
Ответ 1
При построении в окнах ваше предупреждение будет предупреждать "Android.mk:iomx-hc: non-system libraries in linker flags: -lgcc -lstagefright - lmedia -lbinder"
, вы получите их для нескольких файлов. И он также предупреждает
"Android NDK:This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES"
Поэтому, даже если вы получите вывод сборки, у него не будет необходимых файлов. И, следовательно, вы получаете сообщение об ошибке при запуске приложения.
Теперь, если вы посмотрите на Android.mk, вы найдете
include $(CLEAR_VARS)
LOCAL_MODULE := libiomx-gingerbread
LOCAL_SRC_FILES := ../$(VLC_SRC_DIR)/modules/codec/omxil/iomx.cpp
LOCAL_C_INCLUDES := $(VLC_SRC_DIR)/modules/codec/omxil $(ANDROID_SYS_HEADERS_GINGERBREAD)/frameworks/base/include $(ANDROID_SYS_HEADERS_GINGERBREAD)/system/core/include
LOCAL_CFLAGS := -Wno-psabi
LOCAL_LDLIBS := -L$(ANDROID_LIBS) -lgcc -lstagefright -lmedia -lutils -lbinder
include $(BUILD_SHARED_LIBRARY)
Я загрузил источник vlc из здесь и после извлечения источника я смог найти "extract_path" \ vlc-2.1.4\модули\кодек\omxil\iomx.cpp. Поэтому, если вы можете изменить путь включения для VLC_SRC_DIR в каталог, в котором источник vlc извлечен на машине WINDOWS, я думаю, вы должны скомпилировать его. Если вы не используете виртуальную машину, использующую linux для компиляции проекта. Также необходимы библиотеки архивов (.a), которые вы не найдете в источнике vlc. Таким образом, вам нужно будет сначала создать источник vlc, а затем включить все материалы в проект. Я думаю, что Linux на виртуальной машине - ваш лучший выбор.
Ответ 2
Интересный проект. Ошибка Unsatisfied Link обычно означает, что
Собственная библиотека (вероятно, общий объект или что-то еще) не найдена.
Вы запустили "ndk-build" из Android NDK в папке "jni" проекта?
Вы также сказали, что вы добавили Java-источники из Библиотечного проекта в Java
источники. Вероятно, это неправильный способ сделать это. Рассмотрим это:
- В основе этих Java-классов лежит JNI-код, написанный на C/С++.
То, что вы хотите достичь, заключается в том, что этот так называемый собственный код скомпилирован в
объект библиотеки, который можно загрузить/запустить на Android. С этой целью обычно
записывает файл Android.mk, расположенный в папке "JNI", и запускает "ndk-build" для
строить эти источники.
- В Java должен быть некоторый код Wrapper/Binding, который вызывает
те собственные функции C/С++. Связывание Java-вызовов с
C-функции выполняются именами пакетов и классов. Таким образом, если вы двигаетесь
вокруг кода, вы, вероятно, уничтожите эти привязки. Если только ты не
знаете, что вы делаете, я бы поэтому рекомендовал, чтобы вы ушли
такой проект библиотеки Android, как есть и просто включать проект
в ваш проект приложения через свойства → Android от
Затмение.
Кроме того, вы можете проверить этот проект. https://github.com/fscz/FFmpeg-Android