我想知道较新的 Android 版本现在是否支持 LD_PRELOAD?
在 4.0 ICS 的时候它不是,并且在文档(NDK docs/SYSTEM-ISSUES.html)中仍然有:
No support for LD_LIBRARY_PATH, LD_PRELOAD, RTLD_LOCAL and many other options.
但是几天前,我在我的 Android 4.2 Galaxy Nexus 上使用了 LD_LIBRARY_PATH 并且它有效(!)。
提前致谢!
我想知道较新的 Android 版本现在是否支持 LD_PRELOAD?
在 4.0 ICS 的时候它不是,并且在文档(NDK docs/SYSTEM-ISSUES.html)中仍然有:
No support for LD_LIBRARY_PATH, LD_PRELOAD, RTLD_LOCAL and many other options.
但是几天前,我在我的 Android 4.2 Galaxy Nexus 上使用了 LD_LIBRARY_PATH 并且它有效(!)。
提前致谢!
虽然官方的 NDK-r9d 文档仍然这么说,但事实证明 LD_PRELOAD 确实适用于有根设备。跑
adb shell
setprop wrap.com.xyz.yourapp LD_PRELOAD=/path/to/your/library.so
stop
start
将库推送到设备后。我在 ANDROID-19 模拟器上成功尝试了它以提供函数的替代定义。
查看此链接 - http://cedricvb.be/post/intercepting-android-native-library-calls/
一般来说,LD_LIBRARY_PATH他已经在工程构建(又名 root 设备)上工作了很长一段时间。问题是这对生产构建没有帮助——不是因为加载器改变了,而是因为你的应用程序的环境是安全的。