Android替换系统/ lib / lib.so不起作用

时间:2014-06-12 13:02:37

标签: android linux shared-libraries

我希望将系统库替换为我做了一些小改动的系统库。两个库都使用相同版本的cyanogenmod源编译。我复制到SD卡上的那个工作在早期的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

然后,此日志在SD卡上的其他库中不同。因此,一旦我更换了库并重新启动,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

我错过了什么?

1 个答案:

答案 0 :(得分:0)

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

此外,通过可以从TWRP等恢复程序执行的updater脚本替换库更安全。该脚本可能如下所示:

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");