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