前言
最近在腾讯课堂里面看了一遍关于插件化的一门课程《解密支付宝如何在不安装淘票票的情况下加载淘票票原生App》,借此机会,自己尝试着去学习下!
插件化优点
- 宿主和插件分开编译
- 并发进行开发
- 动态更新插件
- 按需下载模块,第一次加载比较慢
- 方法数和变量数 65536问题
插件化步骤
- 插件化分为宿主应用和插件应用
- 新建Project - 也就是宿主应用
- 新建一个Module,具有生命周期接口,宿主跳插件应用需要遵守一些标准规范
- 新建Table Module - 也就是插件应用,同时在BaseActivity里面实现生命周期接口
- Module通过attach方法注入上下文context,因为插件apk未安装,所以不能直接使用插件的上下文
- 插件里面重写setContextView(),getWindowManger,getClassLoader这些需要使用上下文的方法,然后使用注入的that进行替换super调用
- 在宿主app里面创建ProxyActivity,通过插桩的方式进行注册插件的Activity。ProxyActivity里面获取跳转传入的className,同时重写getClassLoader和getResource的方法,替换为PluginManager创建的ClassLoader和Resource
- 创建PluginManager,单例的形式创建,实现loadPath方法,去加载apk(DexClassLoader)。因为 未安装就不能通过getClassLoader的方式Class.forName这样的方式了
- 加载未安装apk(DexClassLoader)
- 插件二级Activity的地方回传到宿主APP里面,BaseActivity里面startActivity
详细Demo查看Github-GoachAlipay