我希望将系统库替换为我做了一些小改动的系统库。两个库都使用相同版本的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
我错过了什么?
答案 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");