SharedLib依赖@混合模式APK

时间:2012-04-20 13:35:31

标签: android ffmpeg android-ndk

  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”); 除了“无法为'libavcodec.so'加载所需的库'libavutil.so.51'(图书馆' 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 number导致构建失败,[LOCAL_SRC_FILES应指向以“.so”结尾的文件]

    考虑到上述情况,如何在没有依赖性问题的情况下加载libavcodec?
    • 我可以修改libavcodec.so依赖项以指向libavutil.so而不是libavutil.so.51吗?
    • 我可以更改Android.mk以便能够打包libavutil.so.51(非.SO扩展名)吗?它是否可以使用'System.loadLibrary'加载?
      任何帮助将不胜感激!!!

      Nadav at Sophin

1 个答案:

答案 0 :(得分:0)

解决方法只是使用静态库而不是动态库,但这是暂时的解决方法,因为LGPL限制了SharedLibs是商业用途必需的。