在应用开发中,网易云音乐如何兼顾质量和效益

在应用开发中,质量和效益是非常关键的因素。网易云音乐作为用户人数突破4亿,成就移动音乐传奇的应用,是如何在开发中兼顾质量和效益的?网易云音乐Android负责人梁建将为您解读。

框架赋能

image

典型的开发框架从上往下分为三层,分别是业务层、服务层、能力层,三者之间是垂直依赖的关系,且业务层之间的水平模块不互相依赖,这样的分层有助于不同APP和同一APP间进行代码互用。

能力层跟业务逻辑完全没有关系,可以直接迁移,服务层可以按需定制,最上面的业务层则是开发者最熟悉的业务模块。

插件化

插件属于业务层的组件,行业中的设计方案很多,网易云音乐在插件设计时主要考虑三点因素:

设计简单

开箱即用、用完即止,最好是原生方案。

维护成本

当一个APP有非常多插件的时候,维护成本是非常重要的问题。有些插件可能依赖宿主的代码或资源,会对应用造成很大的不确定性。

性能

要求插件具有很好的运行效率。

网易云音乐插件设计实现:

image

首先,插件主体载体是Fragment,非常轻量,可以嵌在任何一个Activity里面。只要预埋一个Activity,就可以启动任何一个插件模块。网易云音乐把UI组件和代码冗余打包到插件包中,这样虽然增加插件体积,但会减少维护成本。

对于图片、网络这些能力层的功能,网易云音乐则使用服务接口来提供。这样一方面是为了减少依赖,另一方面可以让开发者在插件开发时保持和传统APP开发相同的习惯。

服务接口主要使用两种方式,一种是路由,一种是服务注册。为了尽可能避免进行对象的序列化和反序列化,网易云音乐把Meta层下沉到底部,开发者可以直接面向接口编程,同时建议插件尽量不依赖代码,也尽量不要固定宿主的资源ID或者修改插件的ID前缀,以免造成冗杂。

得益于非常轻量的原生插件实现,网易云音乐运行效率非常高。

组件化

image

上层业务组件水平模块之间不相互依赖,也为组件化提供了很好的支持。如上图,在开放一个动态功能时,只需将动态业务组件和核心业务组件打包在一起,便形成了一个动态业务壳;开发评论组件时,同样是把评论组件和核心业务组件打包在一起。这样的设计可以支持热拔插,提高业务线的并行开发效率,同时可以极大地减少编译速度。

全链路开发流程

image

全链路开发流程作为一个平台,串起了开发过程中的很多节点。那么,这套流程是如何保证开发效率的呢?

卡点

开发流程被分配到每个节点,每个节点都有各自的任务和责任。通过节点分配,将节点痛点逐一击破,极大地提高开发效率。

自动化

自动化是整个平台的核心,所有的自动化测试都是为了质量而生。自动化有一个非常重要的应用场景——自动打点,这是开发者的痛点,打点占用了开发太多时间。云音乐通过编译期进行代码注入自动生成打点,极大地提高了效率,减少了人工出错的可能性。

闭环

无论是版本数据,还是上线以后对数据指标的监控,云音乐通过数据发展趋势反哺于开发质量形成闭环。

以网络治理为例:客户端的网络问题非常复杂,云音乐通过观察线上网络指标来辅助策略的调整。通过ABTest实验,以观察网络连通性是否提升,再通过观察数据,调整网络优化策略,以此往复,形成闭环。

image

思考和建议

1.警惕拿来主义

不同方案适用于不同公司的问题,直接拿过来使用可能会有一些不良反应,所以一定要结合各APP的实际情况来仔细分析。

2.简单设计

简单设计意味着很多,更简单的设计意味着更高效的运行、更少的维护成本,简约往往并不简单。

3.量化指标

没有数据就没有话语权,没有数据就会失去方向,只有有了量化指标,才能呈现一个闭环。

4.勤思考 多沟通

需要开发者勤思考,多与他人沟通交流。例如在 “分享图标”的设计上,不同的应用会做一些差异化的设计。但如果设计过度,导致与其他大部分应用有较大差异,使用户无法识别出“分享图标”时,会造成分享率降低的后果。

*本文根据梁建讲师在安卓绿色联盟开发者大会现场的议题分享整理而成。

想了解更多,请点击观看讲师精彩现场视频>>>>

https://v.qq.com/x/page/o08043yugqw.html

安卓绿色联盟会根据每期技术沙龙议题输出精彩技术干货文章,分享讲师PPT,为未能现场参加技术沙龙的您提供另一个干货学习机会。

猜你喜欢

转载自my.oschina.net/u/3791970/blog/2980152