工程。RePlugin是一套完整的、稳定的、适合全面使用的,占坑类插件化方案,由360手机卫士的RePluginTeam研发,也是业内首个提出”全面插件化“概念的软件。文件夹里是工程,用户可以直接在文件夹中打开。
时隔4年。本文再次来聊聊Shadow 这个0 hook的插件库。目前看来,确实是腾讯这个Shadow 插件库做到0 hook api实现插件化。在腾讯内部也是广泛使用,其设计上解藕的非常好,可以独立升级插件的插件依赖库很少造成冲突,可以几个版本的Shadow插件混用不造成异常。
如果还在观望的朋友,相信阅读完本文可以对这个插件库有更多的信心。当然如果是到海外,Google市场,可能需要自己斟酌一二再使用Shadow。毕竟对于Google来说动态更新这个行为也不是它希望的。
不熟悉插件化原理的,可以阅读我之前写插件文章 横向浅析Small,RePlugin两个插件化框架 ,在里面深刻的描述了3年前的插件化的原理。
有什么问题可以来本文 >
一、replugin 是360 第2代插件库(上一代是droidplugin) ,兼容性、稳定性及侵入性方面都做了很大改良和优化,当然DroidPlugin 也是一个优秀的插件库(作者张勇也是技术大牛,在Android插件化领域,很影响力)
先说一下RePlugin的主要优势哈
1十分灵活:主程序无须在Android市场升级,支持四大组件
2及其稳定:hook点仅有一处(classLoader),崩溃率低于万分之一
3兼容性比第1代库大幅度提示,几乎覆盖所有44及其以上Android系统
二、套话说到这,聊点核心技术哈
1关于classLoader打破双亲委派 (classLoader加载class 先查看父classloader是否加载过,递归,如果直到根classLoader也没加载过,就自己加载咯),宿主用的classloader 实际是pathclassloader,插件用的是dexclassLoader 加载外部apk或dex。看了部分源码我的理解是宿主加载依然用系统的pathclassload 把宿主占坑的四大组件 加载进来,从这个PluginContainer对应集合里找出要调用的插件中的四大组件,因为插件的东西相对于宿主apk 而言是外部的,只能扩展dexclassLoader去加载插件里对应的四大组件。宿主和插件,是平行的关系。宿主给自己找了一些兄弟,这些兄弟帮自己加载不属于宿主中的四大组件。Hook点仅有一处(ClassLoader)。
2、拿startActivity For example
启动插件Activity可以从RePluginstartActivity开始,startActivity经历了Factory、PmLocalImpl,其实大部分启动的逻辑其实主要在PmInternalImpl中。关键在于loadPluginActivity。这里获取了插件对应的坑位,然后保存了目标Activity的信息,通过系统启动坑位。因为已经Hook住了ClassLoader,在loadClass时再加载出目标Activity,这样坑位中承载的,便是绕过系统打开的目标Activity(插件里的activity)。如下或许帮助理解:
RepluginActivity-->FactorystartActivity-->PmlLocalImpstartActivity-->PmlInternalImplstartActivity
-->PmlLocalImplloadPluginActivity-->宿主系统startactivity--》pluginActiivty等--》回到宿主PmBase的PmlInternalImpl
以上就是关于360replugin文件夹里边放的是什么全部的内容,包括:360replugin文件夹里边放的是什么、Shadow源码解析、Replugin 浅谈等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)