美团外卖Android平台化架构演进实践

> 美团外卖Android平台化架构演进实践- https://tech.meituan.com/meituan_food_delivery_android_architecture_evolution.html
-- 美团外卖Android客户端平台化架构,从底层到高层依次为平台层、业务层和宿主层:
 1.平台层的内容包括,承载上层的数据通信和页面跳转;提供外卖核心服务,例如商品管理、订单管理、购物车管理等;提供配置管理服务;提供统一的基础设施能力,例如网络、图片、监控、报警、定位、分享、热修、埋点、Crash上报等;提供其他管理能力,例如生命周期管理、组件化等。
 2.业务层的内容包括,外卖业务和垂直业务。
 3.宿主层的内容包括,Waimai App壳和美团外卖频道Waimai-channel壳,这一层用于Application的初始化、dex加载和其他各种必要的组件或基础库的初始化。

https://img-blog.csdn.net/20180828094206753?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NoYXJlVXM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

-- 架构里面提供了二种平级间的通信方式:scheme路由和美团自建的ServiceLoaders sdk。scheme路由本质上是利用Android的scheme原理进行通信,ServiceLoader本质上是利用的Java反射机制进行通信。
-- 三级工程结构,指的是工程→module→p工程的三级结构。我们可以将任何一个非常复杂的业务工程内部划分成若干个独立单元的module工程,同时独立单元的module工程,我们可以继续去划分它内部的独立p工程。因为module是具备编译时的代码隔离的,边界是不容易被打破的,它可以随时升级为一个工程。需要通信的p工程依赖module的主目录,base目录,通过base目录实现通信。工程和module具有编译上隔离代码的能力,p工程具有最小约束代码边界的能力,这样的设计可以使得工程内边界清晰,向下依赖。
  主工程集成业务库时,有两种依赖模式:aar依赖和源码依赖。默认是aar依赖,但是在平时开发时,经常需要从aar依赖切换到源码依赖,比如新需求开发、bugfix及排查问题等。正常情况我们需要在各个工程的build. 将compile aar手动改为compile project,如果业务库也需要依赖平台库源码,也要做类似的操作。
  业务库增多以后,构建流程也变得复杂起来,我们交付的产物有两种:外卖App的apk和外卖频道的aar。外卖App的情况会简单一些,在Jenkins上关联各个业务库指定分支的源码,直接打包即可。而外卖频道的情况则比较复杂,因为受到美团平台的一些限制,频道打包不能直接关联各个业务库的源码,只能依赖aar。按照传统做法,需要逐个打业务库的aar,然后统一在频道工程中集成,最后再打频道aar,这样效率实在太低。为此,我们改进了频道的打包流程。
  抛开技术方案,回到问题本身,去重新审视业务的痛点,列出要解决的问题,再回过头来看哪一个方案能够解决问题。虽然我们并不常常这么做,但某些时刻也会强制决策和实施,遇到问题再复盘和调整。
 

猜你喜欢

转载自blog.csdn.net/ShareUs/article/details/82117346