IO重定向
其实所谓的“重定向”不过就是替换一下要访问的路径。插件程序的所有数据都是放在宿主程序的目录下的,方便统一管理。
因此,当插件访问“/data/data/插件包名/xxx”时,需要把路径替换成“/data/data/插件宿主包名/Plugin/插件包名/data/插件
包名/xxx”。具体是实现在LibCoreHookHandle里,libcore主要是一些系统调用的实现(如open(), remove(), mkdir()等等),
因此需要在进行系统调用之前把路径替换掉。
结构图
LibCoreHookHandle的结构图如下,
HookFactory的installHook方法有关LibCoreHook的代码如下,
installHook(new LibCoreHook(context), classLoader);
LibCoreHook的createHookHandle方法如下,
protected BaseHookHandle createHookHandle() {
return new LibCoreHookHandle(mHostContext);
}
LibCoreHook的onInstall方法如下,
protected void onInstall(ClassLoa