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

 林嘉文志鸿圣文 发布于 2023-02-13 12:16

我必须修改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中的代码?

1 个回答
  • 您将无法替换原始库,因为当您尝试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.

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

    doLoad从这里https://android.googlesource.com/platform/libcore/+/41d00b744b7772f9302fdb94dddadb165b951220/luni/src/main/java/java/lang/Runtime.java

    findLibrary这里http://developer.android.com/reference/dalvik/system/BaseDexClassLoader.html#findLibrary(java.lang.String)

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

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

    2023-02-13 12:18 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有