美文网首页
插件化原理

插件化原理

作者: 浪里_个郎 | 来源:发表于2020-04-30 17:13 被阅读0次

    比较阿里开源组件化和插件化框架的区别

    name 模块化开发 模块间路由 动态加载 热修复 兼容性问题
    组件化ARouter 支持 支持
    插件化Atlas 支持 支持 支持 支持

    总的来说,组件化框架功能单一,专心于模块化开发,但没有黑科技,不存在Android版本的兼容问题。而插件化框架功能强大,最关键的是具备热修复、模块动态加载、删除的能力,但因为需要hook系统组件,所以存在可能的兼容性问题。
    Atlas的热修复使用的是自家的Andfix,基于Native hook。

    插件化实现原理

    插件化是体现在功能拆分方面的,它将某个功能独立提取出来,独立开发,独立测试,再插入到主应用中动态加载。以此来规避主应用规模超限。通过代理或Hook来实现。

    代理

    打开插件中Activity需要的资源

    要正常打开插件中的Activity,需要以下资源:
    1,通过DexClassLoader加载插件apk
    2,通过包管理器,获取当前已加载的类信息
    3,通过AssetManager获取插件apk中的资源
    4,通过壳app中的代理Activity,提供上下文Context和生命周期管理(插件中的四大组件因为并没有注册到壳app的AndroidManifest.xml,所以并不具备生命周期)

    插件生命周期管理

    通过代理Activity启动和同步插件Activity的生命周期

    Hook

    hook方式实现插件化

    Hook其中的第一步或第十步实现插件Activity启动。

    通过hook的方式启动插件Activity需要解决如下问题:
    a、插件Activity如何绕开Manifest中注册的检测
    b、如何创建Activity实例,并同步生命周期
    我们通过VirtualApk插件化框架来看其实现方案:
    a、预先在Manifest中注册各种启动模式的Activity占坑,启动时hook第1步,将Intent根据启动模式替换成预先在Manifest占坑的Activity,这样就解决了Manifest中注册的检测
    b、hook第10步,使用插件的ClassLoader反射创建插件Activity,之后Activity的生命周期回调都通知给插件Activity,这样就解决了创建Activity并同步生命周期的问题

    动态加载小tips

    1,关于dex的生成
    我们可以用dx工具,将jar包转成dex文件
    2,dex的加载过程
    通过DexClassLoader加载dex文件,然后解析其中的class、method等

    参考:
    https://www.jianshu.com/p/7e4958d02094

    相关文章

      网友评论

          本文标题:插件化原理

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