【问题标题】:How to use LD_PRELOAD with Android's mediaserver?如何将 LD_PRELOAD 与 Android 的媒体服务器一起使用?
【发布时间】:2016-05-05 12:33:38
【问题描述】:

我可以将 LD_PRELOAD 与普通的原生应用程序一起使用,例如ls:

LD_PRELOAD=/path/to/my/library.so ls

经过一番搜索,我还可以通过设置此类属性将它与 java 应用程序一起使用:

adb shell setprop wrap.com.some.app LD_PRELOAD=/path/to/my/library.so

但是我有兴趣将 LD_PRELOAD 与 mediaserver 进程一起使用。这很棘手,因为它一直在后台运行。如果你杀了它,它会自动重新启动。我可以通过以下方式开始“第二个实例”:

LD_PRELOAD=/path/to/my/library.so /system/bin/mediaserver

它会加载我的库,尽管“第二个实例”不会用于任何播放。始终原始媒体服务器将处理媒体操作。 那么有什么方法可以将 LD_PRELOAD 与 mediaserver 一起使用,而无需修改设备上的 init.rc 文件?

【问题讨论】:

    标签: android linker ld-preload


    【解决方案1】:

    事实证明,有一种方法可以做到这一点。 我必须做以下事情:

    adb root
    adb remount
    adb pull /system/bin/mediaserver
    echo "LD_PRELOAD=/path/to/my/library.so /system/bin/mediaserver_orig" > mediaserver
    adb shell mv /system/bin/mediaserver /system/bin/mediaserver_orig
    adb push mediaserver /system/bin/mediaserver
    

    然后我杀死了 mediaserver,它(令人惊讶地)没有自动启动,所以我也不得不手动启动它:

    adb shell
    /system/bin/mediaserver &
    

    无论如何都可以这样做,所以如果没有人有更好的答案,我会接受我的回答。

    只有一个警告 - 当我返回之前的状态时:

    adb shell mv /system/bin/mediaserver_orig /system/bin/mediaserver
    

    并重新启动设备,mediaserver 仍未自动启动!因此,这不是您希望在您关心的设备上执行的操作,因为在这种状态下,如果您不手动启动 mediaserver,设备将无法完成引导。虽然这个现象可能是因为我在玩chown,所以可能与描述的过程无关,反正你已经被警告了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 2021-05-27
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多