2012-04-20 31 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