自己做的一个很大的App,突然接到要把其中一个核心功能,拉出来,提供给第三方做sdk接入。
一想就头大,之前都是一个人搞,也没有模块化。而且该功能关联相当的多,很是复杂。
*第一阶段:
先想办法把功能封装出来,两个目标,一,封装不影响自身app;二,封装sdk尽量精简;
第一步:把依赖库拉出来,全局公用类,来出来做了一个lib module,生成aar
第二步:把几个全局都需要的第三方插件module都独立出来。生成aar
第三步:把该功能,所有代码、页面、模板、资源文件等,都拉出来,同时对此功能进行了封装,初始化等工作,做一个module,依赖前两个module。
此处,因为和其他功能有很多关联,于是定义了一些回调和Handler,实现对sdk外部相关跳转等,不确定相应的回调机制。然后打包成aar。
最后,主工程,依赖以上三步的module,保证了自己app的正常推进。
同时,实现了一个demo工程,将1、2、3步生成的aar接入进来,按照3module的封装,进行demo接入跳转。
经过上面,算是实现了简单的封装,和demo;但是多个aar合并,却尝试受阻。尝试fat-aar,结果只支持gradle 2.x....崩溃,试了一天,退版本带来一堆问题,后来放弃。索性就几个aar一起用吧(gradle3.x版本合并aar,谁知道好办法欢迎告诉我,多谢啊)
-------------
*第二阶段:
合作商接入时,觉得大了,一些他们用不上的辅助功能想要去掉,比如内部包含的各种推送渠道。
第一时间,删除了引用和代码,满足了第三方调用。
但这时问题来了,我的app还需要这几个东西啊。怎么办,不想分两个版本代码,也不想天天改来改去的。于是深入研究了一下。
发现productFlavors
之前也没用过,但是一了解,发现特适合这种情况,于是按照此方式修改,接入,ok。
注意:
代码中有差异的,要在app/src目录中,创建与main同级的文件(文件名与productFlavors里的命名一样),然后各自实现,注意main中就不要保留,否则会报重复。
--------------
谨以此,记录一下。