美文网首页
Replugin 浅谈

Replugin 浅谈

作者: eagle006 | 来源:发表于2018-01-09 16:57 被阅读0次

    一、replugin  是360 第2代插件库(上一代是droidplugin) ,兼容性、稳定性及侵入性方面都做了很大改良和优化,当然DroidPlugin 也是一个优秀的插件库(作者张勇也是技术大牛,在Android插件化领域,很影响力)

    先说一下RePlugin的主要优势哈

    1.十分灵活:主程序无须在Android市场升级,支持四大组件

    2.及其稳定:hook点仅有一处(classLoader),崩溃率低于万分之一

    3.兼容性比第1代库大幅度提示,几乎覆盖所有4.4及其以上Android系统

    二、套话说到这,聊点核心技术哈

    1.关于classLoader打破双亲委派 (classLoader加载class 先查看父classloader是否加载过,递归,如果直到根classLoader也没加载过,就自己加载咯),宿主用的classloader 实际是pathclassloader,插件用的是dexclassLoader 加载外部apk或dex。看了部分源码我的理解是宿主加载依然用系统的pathclassload 把宿主占坑的四大组件 加载进来,从这个PluginContainer对应集合里找出要调用的插件中的四大组件,因为插件的东西相对于宿主apk 而言是外部的,只能扩展dexclassLoader去加载插件里对应的四大组件。宿主和插件,是平行的关系。宿主给自己找了一些兄弟,这些兄弟帮自己加载不属于宿主中的四大组件。Hook点仅有一处(ClassLoader)。

    2.、拿startActivity  For example

    启动插件Activity可以从RePlugin.startActivity开始,startActivity经历了Factory、PmLocalImpl,其实大部分启动的逻辑其实主要在PmInternalImpl中。关键在于loadPluginActivity。这里获取了插件对应的坑位,然后保存了目标Activity的信息,通过系统启动坑位。因为已经Hook住了ClassLoader,在loadClass时再加载出目标Activity,这样坑位中承载的,便是绕过系统打开的目标Activity(插件里的activity)。如下或许帮助理解:

    RepluginActivity-->Factory.startActivity-->PmlLocalImp.startActivity-->PmlInternalImpl.startActivity

    -->PmlLocalImpl.loadPluginActivity-->宿主系统startactivity--》pluginActiivty等--》回到宿主PmBase的PmlInternalImpl

    相关文章

      网友评论

          本文标题:Replugin 浅谈

          本文链接:https://www.haomeiwen.com/subject/izipwxtx.html