作者
大家好,我叫祥子;
自己15年毕业于广东药科大学,于2018年8月参加37手游安卓团队,曾经上任于网易担任安卓开发工程师;
目前是37手游安卓团队负责人,除日常团队相关办理外,空闲喜欢专研安卓相关技能,由于一直深信 “技能办理” 是一定要持续关注技能,保持对技能的热情,这样才不会是空中楼阁…
背景
前面咱们了解了热修相关理论:安卓热修篇-Shadow思维篇-插桩式插件化
一起也针对理论做了个实战Demo巩固相关常识:安卓热修篇-插桩式插件化方案-Demo篇
现在咱们结合前面所学的常识,怎样把热修技能运用在SDK,投入生产;
没有热修前,SDK迭代形式(事务侧)
(1)事务提需求,修改SDK,以支撑事务功用
(2)技能接到需求,进行开发/测验/发版别等
(3)事务上线,把带有新SDK内容的安卓包上架,用户下载运用
从上面的流程能够看出,当下形式有几个短板:
-
正常情况下,新功用老用户体会不到
-
如果为了老用户体会,强制更新,那么用户损害较大
-
周期比较长,从内部开发到上线用户覆盖需求比较长的时间,影响事务营收速率
-
做A/B测验不方便
没有热修前,SDK的工程是怎样样的?
这儿是一个虚拟出来的demo工程,和实践项目类同,不影响讲解思维
假设咱们的SDK项目工程如下:
对应的依靠关系如下:
app模块:模拟客户的运用工程,运用SDK测验等
SDK相关:
- sqsdk模块:SDK和客户的交互层
- features1模块:SDK内部功用1的模块
- features2模块:SDK内部功用2的模块
在发布状态下,会把(sqsdk模块 +features1模块 +features2模块) 导出aar或者jar的方法,给到客户运用(也便是app模块)
代码戳这>>
热修完成,原来工程架构应该怎样调整?
修改需求满足哪些条件?
- 对内,兼容没有修改前SDK的迭代流程(由于实践的项目中,是多人协作的,日常生产不断迭代,不可能由于热修版别,而让日常的迭代停滞,等热修版别好了之后再迭代日常内容)
- 对外,客户的交互层方面,老的接口不修改(由于许多客户都在用),一起确保最终,给客户接的SDK只有一套,而不是两套
接下来看下工程架构的改变~
sqsdk模块 + features1模块 + features2模块(插件)
- 原SDK内容,这儿把它当成一个插件;
- 这样做的原因是,日常事务迭代一般改动的内容都是在这些当地,尽量不去改动这一块的架构等,进一步完成上面说的《对内,兼容没有修改前SDK的迭代流程》;
- 那么这儿要完成上面的,就有一个问题需求处理:怎样封装成插件?(下面会说,这儿先留个概念先)
pluhost 模块(宿主)
这个是一个宿主模块,首要效果如下:
- 对内方面,加载插件,并且在客户调研接口的时候,调用插件的详细完成;一起导出aar或者/jar给到客户对接
- 对外方面,提供对外接口给客户
commonpluhostandsqsdk 模块
这个模块是插件和宿主的公共模块,首要是一些接口兼容等内容(下面会说,这儿先留个概念先)
其他模块(plugin等不展开,详细能够看下面的工程源码)
模块分类大致如上,那么现在来看看模块的依靠关系:
红色框
- 简介:这是一个插件模块
- 工程方面:以前是一个lib模块,导出aar/jar方法给客户直接运用;现在是一个app模块,导出一个插件apk的方法,给到宿主运用;
- 接口方面:以前是暴露《SqWanCore》给客户运用;现在不直接对外(客户),而是给宿主调用,所以里边的对外类会修改(《SqWanCore》改为《SqWanCoreImpl》作为完成者)
-
- 留意:这儿类的修改,是有技巧的,为了兼容以前的形式,那么会用到gradle插件方法修改,详细看下面源码模块的buildSrc
蓝色框
- 简介:这是一个宿主模块
- 工程方面:这个是新添加的一个模块,会引用插件apk,并且完成插件的加载
- 接口方面:这儿会保持以前对客户的接口,也便是《SqWanCore》,然后客户能够不怎样修改直接兼容到;宿主里边则转调插件里边的详细完成
绿色框
- 简介:这是一个模拟客户的app工程
- 工程方面:依靠宿主导出的jar/aar,进行运用
代码戳这儿>>
结束语
进程中有问题或者需求交流的同学,能够扫描二维码加好友,然后进群进行问题和技能的交流等;