【问题标题】:Develop with LibVLC for android on Windows在 Windows 上使用 LibVLC for android 进行开发
【发布时间】:2014-12-15 12:56:59
【问题描述】:

我什至很难让demo application 与 Android-LibVLC 一起运行。

我只能找到用于 linux 的 documentation 并且无法让应用程序在我的设备上运行(尽管它可以编译)。

当我启动应用程序时,它会记录:

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

我已经使用 org.videolan.libvlc 目录类作为源根目录的一部分和 jni 目录在同一模块中编译了项目 APK,但失败了,我还将整个 VLC 模块作为单独的库包含在内模块并使其成为依赖项,这也失败了。

有没有人有一种行之有效的方法来从 Windows 配置/构建一个带有 LibVLC 的 android 项目?或指向说明/文档的链接? (我还没有找到任何东西)。

目标是将我的 android MediaPlayer 依赖类替换为支持更多文件类型/编解码器的库/实现。

【问题讨论】:

    标签: android libvlc


    【解决方案1】:

    在 Windows 中构建时,您会收到警告说 "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)
    

    我从here 下载了 vlc 的源代码,在提取源代码后我能够找到“extracted_pa​​th”\vlc-2.1.4\modules\codec\omxil\iomx.cpp。因此,如果您可以将 VLC_SRC_DIR 的包含路径更改为在 WINDOWS 机器上提取 vlc 源的目录,我认为您应该能够编译它。如果不使用运行 linux 的虚拟机来编译项目。它还需要存档库 (.a),您在 vlc 的源代码中找不到。因此,您必须首先构建 vlc 的源代码,然后将所有内容包含在项目中。我认为虚拟机中的 linux 是你最好的选择。

    【讨论】:

      【解决方案2】:

      那里有有趣的项目。 Unsatisfied Link 错误通常意味着, 找不到本机库(可能是共享对象或其他东西)。 您是否在项目的“jni”文件夹中从 Android NDK 运行“ndk-build”?

      您还说过,您将图书馆项目中的 Java-Sources 添加到您的 Java 来源。这可能不是正确的方法。考虑一下:

      1. 在这些 Java 类的基础上是 JNI 代码,它是用 C/C++ 编写的。 你要实现的,就是把这个所谓的native code编译成 可以在 Android 上加载/运行的库对象。为此,通常 写入位于“JNI”文件夹中的 Android.mk 文件并运行“ndk-build”以 建立这些资源。
      2. Java 中需要一些包装器/绑定代码,用于调用 那些本机 C/C++ 函数。 Java-Calls 的绑定到 C 函数由包名和类名完成。因此,如果您移动 围绕代码,您可能会破坏这些绑定。除非你 知道,你在做什么,因此我建议你离开 这样一个 Android 库项目,原样只包含该项目 通过 Properties -> Android from 进入您的应用程序项目 日食。

      另外,您可能想检查一下这个项目。 https://github.com/fscz/FFmpeg-Android

      【讨论】:

      • 我使用这个基于 ffmpeg 的媒体播放器库:github.com/wseemann/FFmpegMediaPlayer。它具有预构建的库,因此很容易上手,或者您可以编译它们
      • 不幸的是,这些都没有帮助,因为这是我们已经采取的步骤,包括将源代码原样用作库项目:(但感谢您深思熟虑的回复
      • 错误信息“Can't load vlcjni library”明确表示找不到库对象。检查库项目的“libs”文件夹内是否有文件夹“arm-v7a”“arm”等,它们是否包含文件 libvlcjni.so。这通常通过从 jni 文件夹中运行 ndk-build 来实现。构建是否成功运行?之后不要忘记刷新项目。然后刷新依赖库项目的项目并运行/启动应用程序。
      • 我现在在家,无法对此进行测试,但我会尽快进行。无论如何,我都会奖励你赏金,因为你试图提供帮助并且可以使用声望提升
      • 谢谢。我真的很感激。
      猜你喜欢
      • 2013-12-27
      • 2011-01-08
      • 1970-01-01
      • 2014-01-09
      • 1970-01-01
      • 1970-01-01
      • 2019-12-29
      • 2021-08-13
      • 1970-01-01
      相关资源
      最近更新 更多