可以在App中覆盖系统.so库

ero*_*y4u 8 android android-ndk stagefright android-mediaplayer

我必须修改Android Media Player的Http Live Streaming实现.该实现在stagefright库 http://androidxref.com/4.0.4/xref/frameworks/base/media/libstagefright/httplive/LiveDataSource.cpp下

我认为这些库将编译为libstagefright.so,它应该是Android系统的一部分.

我的问题是,如果我对这个库进行一些更改并编译一个新的libstagefright.so.如果我在我的新应用程序中加载这个新的libstagefright.so并调用媒体播放器,它是否会使用我的新libstagefright.so中的代码?

sou*_*kah 7

您将无法替换原始库,因为当您尝试loadLibrary它时将从内部加载库/system/lib.因此,除非您替换它(在无根设备上无法替换),否则您将无法加载自定义代码.

https://github.com/android/platform_system_core/blob/66ed50af6870210ce013a5588a688434a5d48ee9/rootdir/init.environ.rc.in设置LD_LIBRARY_PATH默认.如果可用,从这些路径加载它.如果没有,那么lib将搜索您的应用程序目录; 但不是相反.

libwebkit.so过去在各种主流设备上试过这个并且没有任何运气来加载而不是加载它/system/lib.

您可以通过以下方式了解更多信息:

出于安全原因,我很确定你无法替换默认的类加载器.

但是,您可以做的是直接分叉媒体播放器并加载修改后的内容libstagefright-modified.so.可能还有其他解决方案,没有看过Media Player的代码.