【发布时间】: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