上海品茶

您的当前位置:上海品茶 > 报告分类 > PDF报告下载

2017年微信Android模块化架构重构实践.pdf

编号:92393 PDF 43页 2.76MB 下载积分:VIP专享
下载报告请您先登录!

2017年微信Android模块化架构重构实践.pdf

1、微信Android模块化架构重构实践?W回顾,微信-IALoEA架构历史W问题又来,模块化之后的“坑VW解决问题,重塑模块化W思考,取舍和选择Wv码之外,架构之内微信-IALoEA架构回顾P&.R简单分层架构P2.R多进程架构P(.R多子工程并行开发架构微信-IALoEA架构回顾?sdk/?libpluginlibnetscenelibmmuiimage loadercrashsfsxlogb务工程KGuCEI MAk基础工程 组y库MAk/W问题又来,模块化之后的“坑VW解决问题,重塑模块化W思考,取舍和选择Wv码之外,架构之内W回顾,微信-IALoEA架构历史原本好好的架构出lsh问题?s

2、dk/?image loadercrashsfsxlogb务工程KGuCEI MAk?libpluginlibnetscenelibmmui基础工程 组y库MAk/?libpluginlibnetscenelibmmui组y库基础工程问题出在哪?W我x在思考,模块化之后,这o问题是怎h来的?W先来看一张图朋友圈游戏公众号小程序搜索支u&*9&)9&2群聊表情联系r音k视频上报应用消息微信运动位置WBb指纹消息微信复杂的b务关系问题出在哪?A?B?Event?基础工程依赖依赖KubGEMD 1PBINW基础工程的膨胀 使用1PBIN总线作为通信的手段,为l共享1PBIN类型,1PBIN通常被下沉

3、到基础工程e 当需要共享一o数据结构,例如/DaNLoom6BmbBL,一样需要下沉v码 更进一步,一ob务v码需要被共享,例如/DaNLoomSNoLaCB会被很多b务使用,那hSNoLaCB和相关的5oCEc类,一起下沉到“基础工程Ve 越来越多的v码需要被“共享V,下沉问题出在哪Wg工程膨胀的原因 g工程b务功能的增加 模块的生命周期设计存在问题 进程启动的逻辑全都在g工程-ccouIN 初始化-ccouIN 注销程序启动程序退出模块生命周期问题出在哪W模块的“v码边界V有点问题 由nCLaAGB moAuGB的编译性能问题,我x将所有的工程都对接在一dmoAuGB上。m实证明,任何单纯

4、的编码约定,即使对此熟知的团队都无法保证v码不被破坏。被b务v码“逐渐污染V的基础工程,内部依赖同样错综复杂。模块化之后的“坑VW面对这o问题,我x意识到整d架构的v码正在不断被腐蚀 W这样的v码我x是否还能“忍忍V?重构契机W硬y同学希望跟进微信最新组y、协议、服务 W精简v码,移植b务模块,快速实现类似“微信相册V这样的p品功能 W这不是“忍忍V就能解决的问题W回顾,微信-IALoEA架构历史W问题又来,模块化之后的“坑VW解决问题,重塑模块化W思考,取舍和选择Wv码之外,架构之内目标?重塑模块化拆解目标?通信方式W正文级别&W正文级别 2 W正文级别(W正文级别)W正文级别*W不只使用m

5、y总线或协议通信,使用“S04V的形式暴露接口 my总线并不适合所有的通信方式,更适合广播,可作为补充 协议通信定i繁琐,适合需要序列化、有隔离的场景 配合301补全,开发方便通信方式注册3SBLPEcBregService(IMyService.class,myService);访问3SBLPEcBservice(IMyService.class).doServiceWork();通信方式TT简便的接口暴露W方便的接口暴露 不用每d模块都手动分cd工程 接口类的v码文y,和实现v码可w放在一起,但实现类并不会被外面的工程“引用V W我x的方式TT“.aKEV化通信方式TT简便的接口暴露ICo

6、ntactStorage.javaIContactStorage.apitable.dbtable.db.apiwechat.protowechat.proto.api通信方式TT简便的接口暴露settings.gradleinclude_with_api(:plugin-messenger)build.gradledependenciescompileApi(:plugin-messenger)设计目标?重新设计模块TT分层结构改造big ballofmudsdk/?mmkernelimage loadercrashsfsxlogb务模块微信kBLIBG组y库MAk/?重新设计模块TT最小化

7、kBLIBG工程的职责big ballofmudsdk/?mmkernelimage loadercrashsfsxlog微信kBLIBG?重新设计模块TT正确的生命周期设计-ccouIN 初始化-ccouIN 注销程序启动程序退出模块生命周期-ccouIN 初始化-ccouIN 注销程序启动程序退出模块生命周期更完整重新设计模块TT正确的生命周期设计重新设计模块TT加载阶段的变化W正文级别&W正文级别 2 W正文级别(W正文级别)W正文级别*dependency()configure()execute()PluginPluginDPluginBPluginEPluginAPluginC重新设

8、计模块TT加载阶段的变化dependency()configure()execute()PluginregService(IMyService.class,myService);newSFSTask().after(plugin(IPluginZero.class).before(this);W配置一o数据 W注册3SBLPEcB W插入.ooNTaMk重新设计模块TT加载阶段的变化dependency()configure()execute()PluginPluginDPluginBPluginEPluginAPluginCBootTaskABootTaskBBootTask设计目标?约束v

9、码TTKEIM工程结构WKEIM?约束v码粒度和小v码边界的利器 避免的超量module的创建,更轻量 WcoAB-cDBck applyplugin:com.tencent.mm.toolkit.codecheck?重塑模块化设计目标?看看重构效果W具体能做到的 满足l硬y同学x提出的需求,存在的问题都得w解决 一行v码的增量编译耗时可w减少+%架构设计不好量化效果,不过我x还是尝试做一dABmo来说明WB/DaN NaIo基n重塑后的模块化,一天之内可开发出的极精简版本微信TTWB/DaN NaIo安装包大小约(.*6.,完整版本的&%内存占用是完整版本的2*%*注:只计算不同部分的PSS

10、,0aGPEk PSS+NaNEPB PSS+.ABR mmaK PSSW回顾,微信-IALoEA架构历史W问题又来,模块化之后的“坑VW解决问题,重塑模块化W思考,取舍和选择Wv码之外,架构之内取舍和选择W热门的大前端 W插y化/沙盒化,模块动态性 W纯粹的模块化“远水不解近渴V 模块化与动态性分离 复杂度和兼容性的v价 微信过n复杂的数据关系 问题的根本在n更彻底的模块化设计、解耦、限制v码取舍和选择W热门的大前端 W插y化/沙盒化,模块动态性 W纯粹的模块化“远水不解近渴V 模块化与动态性分离 复杂度和兼容性的v价 微信过n复杂的数据关系 问题的根本在n更彻底的模块化设计、解耦、限制v码W回顾,微信-IALoEA架构历史W问题又来,模块化之后的“坑VW解决问题,重塑模块化W思考,取舍和选择Wv码之外,架构之内v码之外,架构之内W模块负责r制度 渐进式的v码审查文化,适合没有t一开始执行全员性质/oAB 9BPEBw的项目 改变修改和优化v码的动机,创造想法落地的机会 “v码归属感Vv码之外,架构之内W模块边界划分经验之谈 面对划定模块边界的细节问题,“讲一d符合逻辑的故mV是一种简单有效的划分标准 模块的一般组织方式,可w将模块分成三d部分:EmKGBmBINaNEoI工程、aKE工程、GEbLaLS工程

友情提示

1、下载报告失败解决办法
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站报告下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。

本文(2017年微信Android模块化架构重构实践.pdf)为本站 (云闲) 主动上传,三个皮匠报告文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三个皮匠报告文库(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。
会员购买
客服

专属顾问

商务合作

机构入驻、侵权投诉、商务合作

服务号

三个皮匠报告官方公众号

回到顶部