app发展到一定规模,就面临方法数超过65535的问题,前路怎么走,是像美团或者微信那样拆分成多个dex还是像淘宝,携程那样拆成多个bundle,怎么向前走?
没有完美的架构,只有合适的架构。但是类似电商业务的app还是比较适合做多bundle方案,因为一个app中包含很多业务,而且业务都在快速迭代,除了核心链路,业务之间没有直接联系,这些业务都是由各个小团队负责,拆分成多bundle以后,加快了编译速度和启动速度,还可以做懒加载,按需加载,动态部署,做多bundle方案需要团队对app启动过程,Activity如何加载,Resource资源加载,DexClassloader,OSGI等有详细的了解,而且还需要对打包工具定制,需要详细了解Android app打包流畅。这方面目前目前有两个方案:
1.携程最近开源的:https://github.com/CtripMobile/DynamicAPK 实现简单,不负责,代码数量也不多,还包括了打包工具。
2.另外一个类似手淘Atlas架构的:https://github.com/bunnyblue/ACDD,比携程的复杂,功能更强,支持so库,Proxy等。
腾讯系的App都是采用多dex方案,没有在那边上班过,不知道原因,但是对比手淘的更新频率和微信的更新频率,也能理解为什么他们采用了多dex方案。多dex方案在实践中也是需要去了解上述多bundle方案的一些Android底层技术,Google有一个官方的多dex支持方案,但是在具体实施过程中会碰到一些问题,可以参考美团和微信的方案,他们在这方面有较多的实践:
美团:http://tech.meituan.com/mt-android-auto-split-dex.html
QQ空间终端团队还有一个针对多dex方案的热补丁技术:http://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=400118620&idx=1&sn=b4fdd5055731290eef12ad0d17f39d4a&scene=0#wechat_redirect
多dex热补丁项目:https://github.com/dodola/HotFix