插件化设计概述(android)
一、 模块划分
- Basic模块包括:初始化接口、插件加载接口、插件更新接口和埋点接口。
a) 初始化接口:完成一些必要的初始化工作。
b) 插件加载接口:包括验证插件和加载插件的工作。
c) 插件更新接口:与服务端通信更新指定插件。
- Marketing模块:依赖Basic模块,实现具体的业务逻辑。
接口组件 图1
插件活动 图2
Sdk加载序列 图3
二、 具体设计
- 插件信息规划
重点考虑插件加载机制,更新、安全防护和后续版本兼容等事项,需要考虑的点有,插件信息写入的位置,插件信息字段规划,字段名称与信息加密方式。
1)插件信息写入位置
在jar中添加一个文件包括插件信息
将插件信息写入zip文件格式内
2)插件信息防止篡改
以非对称加密的方式,服务端以私钥加密插件信息,客户端以公钥解密
字段名称 |
字段意义 |
是否可选 |
|
PluginName |
插件名称 |
否 |
|
PluginVer |
插件版本 |
否 |
|
TargetLibVer |
对应的lib版本 |
是 |
主要为了插件与lib的兼容性 |
MinLibVer |
所需的lib最低版本 |
否 |
|
Entry |
插件的入口点 |
是 |
后续如果实现自启动所需要的入口点配置 |
DexMD5 |
插件对应dex的md5 |
否 |
防止dex被篡改 |
Extra |
额外信息键值对 |
是 |
|
- 插件校验流程
插件校验流程 图4
- 插件加载流程
见图3
2. 插件更新流程
在sdk调起的时,尽快发起插件更新请求(建议在另外的进程进行更新防止正在运行逻辑出问题,造成更新无进行)。请求插件时应用的基本信息,插件信息,使服务端能按照一定条件,下发插件(后期可以加入灰度更新).