插件化设计概述(android)

一、             模块划分

  1. Basic模块包括:初始化接口、插件加载接口、插件更新接口和埋点接口。

a)         初始化接口:完成一些必要的初始化工作。

b)         插件加载接口:包括验证插件和加载插件的工作。

c)         插件更新接口:与服务端通信更新指定插件。

  1. Marketing模块:依赖Basic模块,实现具体的业务逻辑。

                       

接口组件 图1

 

插件活动 图2

 

Sdk加载序列 图3

二、             具体设计

  1. 插件信息规划

重点考虑插件加载机制,更新、安全防护和后续版本兼容等事项,需要考虑的点有,插件信息写入的位置,插件信息字段规划,字段名称与信息加密方式。

 

 

1)插件信息写入位置

  在jar中添加一个文件包括插件信息

  将插件信息写入zip文件格式内

2)插件信息防止篡改

  以非对称加密的方式,服务端以私钥加密插件信息,客户端以公钥解密

 

字段名称

字段意义

是否可选

 

PluginName

插件名称

否

 

PluginVer

插件版本

否

 

TargetLibVer

对应的lib版本

是

主要为了插件与lib的兼容性

MinLibVer

所需的lib最低版本

否

Entry

插件的入口点

是

后续如果实现自启动所需要的入口点配置

DexMD5

插件对应dex的md5

否

防止dex被篡改

Extra

额外信息键值对

是

 

 

  1. 插件校验流程

 

插件校验流程 图4

  1. 插件加载流程

见图3

 

  2. 插件更新流程

在sdk调起的时,尽快发起插件更新请求(建议在另外的进程进行更新防止正在运行逻辑出问题,造成更新无进行)。请求插件时应用的基本信息,插件信息,使服务端能按照一定条件,下发插件(后期可以加入灰度更新).