Replugin插件化框架原理简介

本文详细介绍了Replugin插件化框架的原理,包括为何需要插件化、插件化的不稳定因素及其解决方案。重点讨论了Replugin如何通过Hook技术实现稳定插件化,如PathClassLoader、Dex和资源的处理,以及Context的非Hook策略。此外,文章还探讨了坑位方案、Service处理和ContextManager的角色,展示了Replugin在设计上的灵活性和稳定性。
摘要由CSDN通过智能技术生成

转载请注明链接: https://blog.csdn.net/feather_wch/article/details/88148286

Replugin插件化框架原理简介

版本号:2019-03-11(23:05)


简介

为什么需要插件化?

1、为什么需要插件化?

  1. 发布不够灵活
  2. 安装包过大
  3. 模块不够独立,耦合度高。

导致插件化不稳定的根源在哪?

2、导致插件化框架不稳定的根源在哪?

  1. Hook太多—修改了太多的系统API
  2. 市面上可以hook的内容:
  3. AMS
  4. Instrumentation
  5. System-Services
  6. PackageManager
  7. ContextImpl
  8. Resources

3、哪些情况可能会导致Hook引起稳定性问题?

  1. Android升级
  2. ROM修改
  3. Hook的使用不当,Hook点选择不正确

4、Hook要越少越好!

5、总结插件化稳定的方法

  1. Hook一处:宿主的ClassLoader
  2. DexClassLoader原生
  3. Resources原生
  4. PluginContext非Hook,new出来的
  5. 坚持真正、长久的稳定大量适配过、非长久的稳定是伪稳定

如何解决不灵活的问题?

1、灵活的目标

  1. 插件组件随意增改
  2. 新插件直接用
  3. 主程序长期不发版本
  4. 自由设置进程

大项目才使用插件化?

1、大项目才使用插件化?

  1. 插件 = 免安装应用
  2. 基础放在主程序中,放心
  3. 迁移成本高

2、全面插件化

  1. 自由、独立发布
  2. 应用“积木化”
  3. 宿主/插件交互简单

Hook技术

PathClassLoader的Hook

1、RePlugin如何通过Hook实现插件化?

  1. 仅仅Hook ClassLoader
  2. 最终使用本身的RepluginClassLoader
Application.mBase.mPackageInfo.mClassLoader
    = new RepluginClassLoader();

2、RePlugin Hook的ClassLoader仅仅更改了loadClass,其他的都直接透传。

  1. 系统原生的四大组件等内容,通过Hook的RepluginClassLoaderloadClass()方法转换成插件所需要的内容,并交给系统。
  2. loadClass()里面有PitManager、HookingClassManager进行处理

3、ClassLoader一定要继承自PathClassLoader

  1. 防止 Android 7.x 因使用 addDexPath 而有问题。
  2. 除此之外,此 ClassLoader 所在位置也非常稳定。目前来看,从 Android 2.1 至今都没有发生过位置、名称上的变化,可以长期使用。

Dex的Hook

3、RePlugin中不对Dex进行Hook

  1. 使用原生的DexClassLoader
  • 为了支持使用宿主类࿰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猎羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值