2012-04-20 32 views
3
  1. 我建立一个混合模式的Android项目,该项目使用原生的ffmpeg
  2. 的利布斯是
    2.1。 libavutil.so - > libavutil.so.51
    2.2。 libavcodec.so - > libavcodec.so.54
    2.3。 libavformat.so - > libavformat.so.54
  3. 我的Java代码包括以下JNI部加载天然库:
    静态{
    的System.loadLibrary( “avutil”);
    System.loadLibrary(“avcodec”);
    System.loadLibrary(“avformat”);
    }
  4. 'libavcodec.so'取决于'libavutil.so.51'而不是'libavutil.so'。
  5. 运行我的活动时System.loadLibrary(“avcodec”);节选与“无法加载所需的库‘libavutil.so.51’为‘libavcodec.so’(图书馆libavutil.so.51'未找到)”
  6. 在我的Android.mk我有以下部分有天然库加入到APK:

    包括$(CLEAR_VARS)
    LOCAL_MODULE:= MYLIB
    LOCAL_SRC_FILES:= ../../../mylib/libmylib.so
    包括$(PREBUILT_SHARED_LIBRARY )

  7. 将libmylib.so替换为libmylib.so。%some num BER%导致构建失败,[LOCAL_SRC_FILES应指向与“所以”结尾的文件]


    铭记上述情况,我怎么能有libavcodec的加载W/O的依赖问题吗?
    • 我可以修复libavcodec.so依赖项来指向libavutil.so而不是libavutil.so.51吗?
    • 我可以更改Android.mk,以便能够打包libavutil.so.51(非.SO延长)吗?那么它会使用'System.loadLibrary'加载吗?

      任何帮助将不胜感激!

      Nadav在Sophin

回答

0

工作周围是简单地使用静态库,而不是动态库,然而,这是一个临时解决如因LGPL局限性SharedLibs对于商业用途是强制性的。

+0

有没有找到一个真正的解决方案呢?由于LGPL,我处于同一个漏洞并面临同样的限制。 – spartygw 2013-06-06 02:32:49

+1

好吧,我终于找到了解决方案,通过更改ffmpeg的发行版中的Makefile来生成没有版本后缀的库。所以我有真正的libavutil.so,libavcodec.so,libswscale.so和所有的工作在我的nexus 4! – spartygw 2013-06-06 04:21:45

+0

嗨买,我使用最新的FFMPEG时面临同样的问题,你的观点非常有用,但是我还没有完成,由于我不知道如何改变,你能帮我指出如何改变它吗? – Sean 2014-10-24 05:44:22