【问题标题】:Android replace system/lib/lib.so does not workAndroid 替换 system/lib/lib.so 不起作用
【发布时间】:2014-06-12 13:02:37
【问题描述】:

我想用我做了一些小改动的系统库替换系统库。两个库都使用相同版本的 cyanogenmod 源代码编译。我复制到 sdcard 的那个在早期的 CM 闪存上工作。

现在我尝试运行以下命令:

$ adb shell
shell@m0:/ $ su 
root@m0:/ # mount -o rw,remount /system
root@m0:/ # chmod 777 /system/lib/libwilhelm.so
root@m0:/ # cp /sdcard/libwilhelm.so /system/lib/libwilhelm.so
root@m0:/ # chmod 644 /system/lib/libwilhelm.so
root@m0:/ # mount -o ro,remount /system
root@m0:/ # reboot

但是,即使在重新启动后,旧的 libwilhelm.so 也会被使用

我知道这一点是因为我在未覆盖的版本中记录了一些内容 frameworks/wilhelm/src/sl_entry.c:

#include <android/log.h>
 #define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "frameworks/wilhelm/src/sl_entry.c", __VA_ARGS__))

// ...

SL_API SLresult SLAPIENTRY slCreateEngine(SLObjectItf *pEngine, SLuint32 numOptions,
    const SLEngineOption *pEngineOptions, SLuint32 numInterfaces,
    const SLInterfaceID *pInterfaceIds, const SLboolean *pInterfaceRequired)
{ 


    LOGI("qqqqqqqqqqqqqqqqqqqq in slCreateEngine");

 //... continue original code

然后,此日志在 sdcard 上的其他库中是不同的。因此,一旦我更换了库并重新启动,logcat 应该会显示其他内容,但它仍然会打印原始日志消息。

此外,似乎没有从其他位置读取该库:

root@m0:/ # find . -name "libwilhelm*"
./mnt/shell/emulated/0/libwilhelm.so
./system/lib/libwilhelm.so
find: ./proc/1897/task/2088/fd/49: No such file or directory
find: ./proc/1897/task/2088/fd/57: No such file or directory
find: ./proc/1897/task/2100/fd/42: No such file or directory
find: ./proc/2466/task/2471/fd/88: No such file or directory
find: ./proc/2466/task/2741/fd/85: No such file or directory
find: ./proc/2466/task/2741/fd/95: No such file or directory
./data/media/0/libwilhelm.so

我错过了什么?

【问题讨论】:

  • 我会在文件系统的其他地方寻找 .so 文件的其他副本。我会特别注意 apk 本身,包括 .so
  • @Gabe Sechan:我更新了答案
  • 您的日志记录如何?您在构建库时设置了什么日志级别?您从哪里记录(您如何验证您的日志调用将被执行)?
  • @Michael,我再次更新了问题(不是答案,我的错)。
  • 也许是这种情况,因为我必须编辑'system.img'而不是替换库?

标签: android linux shared-libraries


【解决方案1】:

原来frameworks/wilhelm/src/sl_entry.c 不是libwilhelm.so 的一部分,而是libOpenSLES.so 的一部分

此外,将库替换为更新脚本会更安全,该脚本可以从 TWRP 等恢复程序执行。脚本可能如下所示:

ui_print("mounting /system");
mount("ext4", "EMMC", "/dev/block/mmcblk0p9", "/system");
ui_print("/system now mounted");
ui_print("adding new shared library libOpenSLES.so");
package_extract_file("libOpenSLES.so", "/system/lib/libOpenSLES.so");
ui_print("done adding new shared library libOpenSLES.so");
ui_print("unmounting /system");
unmount("/system");
ui_print("/system now unmounted");
ui_print("finished");

【讨论】:

    猜你喜欢
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 2018-05-02
    • 2018-04-27
    • 2018-03-15
    • 2015-02-21
    相关资源
    最近更新 更多