罗彧成:开发者要优雅地实现各种需求

个人简介 罗彧成,2006年参加工作, 专注音视频应用软件开发近十年,在音视频领域有较深的技术积累,前期在linux/windows ce平台从事音视频应用开发工作,2009年开始转到android平台; 主要涉及到音视频技术、应用架构设计,同时在车载网络、家庭网络协议也有丰富的开发经验。 2011年加入腾讯,先后参于过腾讯视频、QQ音乐、QQ电台等产品的android客户端开发工作。现负责QQ音乐Android客户端开发,继续致力于android平台应用开发及音视频技术实践。

QCon是由InfoQ主办的全球顶级技术盛会,每年在伦敦、北京、东京、纽约、圣保罗、杭州、旧金山召开。自2007年3月份首次举办以来,已经有包括传统制造、金融、电信、互联网、航空航天等领域的近万名架构师、项目经理、团队领导者和高级开发人员参加过QCon大会。

   

1. 各位InfoQ的网友大家好,现在我们是在QCon北京的现场,作客直播间的是腾讯数字应用部安卓开发组的负责人罗彧成先生。你最早是在Linux和WindowsCE平台底下开发,当时那个年代塞班挺火的,有没有过接触?

罗彧成:我前期是在一些手机厂商工作,那个时候国内的手机没有做塞班的,塞班基本上都是诺基亚在做。我当时做国内厂商的一些手机解决方案,那时候的智能手机基本上就是WinCE和Linux两个操作系统,我一直负责做一些音/视频的开发。

   

2. 音/视频应用里面,开发比较核心的技术是什么?是编解码算法吗?

罗彧成:随着历史的变迁,技术慢慢的调整。前期主要是实现播放器的功能,它不牵扯网络,只是播媒体文件,把声音播出来,解码是其中一个环节,它包括文件解析,解析完之后再解码,最后把PCM数据输出到硬件,是整个这样的过程。后期就不一样了,后期的播放器只是一个音乐类应用的核心功能,底层的一个支持,就是必须要有的东西,但这个已经不是APP里面最重要的了。最重要的东西很多,比如网络模块,图片模块,各种各样的管理模块,听歌识曲等功能。

   

3. 最近安卓5.1发布了,从1.0到5.1这么多版本,你觉得安卓开发跟之前有哪些变化?

罗彧成:变化非常大,我说几个节点。第一个是安卓1.5之前,安卓1.5之前那时候做应用,从0.9做应用的话,换了一个版本前一个应用可能就用不了了,改变特别大,它的稳定性,它的功能缺失都非常严重。从1.5到后面的2.2又是一个节点。从2.2以后,整个安卓系统开始趋向于稳定。从2.2到目前的5.0,在这段时间最大的变化,是它底层系统的支持,线程的管理,虚拟机性能的提高,特别是到了4.0以后,虚拟机的性能提高了非常多。还有用户最能直观感受到的是它的UI设计,特别是推出了扁平化设计以后,变化非常明显。

   

4. 对于开发者而言,你们还在用Java写程序吗?

罗彧成:其实在安卓开发里面,现在很多应用都使用Native开发了,就是NativeC。为什么用NativeC呢?因为在虚拟机上运行,它的效率还是比在Native上运行效率低很多的,特别是一些音乐的解码,都是放在Native层,不会放在Java层。对开发者来说,以前我们用C写代码很麻烦,写JNI接口很麻烦,编译也很麻烦,自己还要搭一个环境。随着安卓的更新,它的IDE的环境也持续改善。以前不支持C语言的编译,现在支持了,还出现了安卓Studio,在开发环境上改善了很多。

   

5. 安卓的内库是不是也越来越丰富了?调用是不是变得更简单了?

罗彧成:安卓系统原生的那部分变的很多。现在有很多开源的库,他们自己会建一些开源的架构,比如说图片引擎,网络引擎等,这些解决方案使开发变得更容易了。

   

6. 您在介绍中提到,要优雅地实现各种需求,提高性能和稳定性,你实现这种优雅的?

罗彧成:现在迭代速度非常快,做一个功能其实很简单,把它做上去就行了,那怎么优雅地做上去呢?优雅就是它的开发成本应该降到最低,它的性能应该比重构之前更好,这个功能做好后不能影响原来的性能,不能把性能降低。这取决于前期架构的设计。在做的过程中,还要注意一些事项,比如一个非常庞大的功能,它可能对性能造成影响,这个时候我们在前期会做一些需求方案的评审,技术实现方案的评审。评审过了开始实施,避免一开始就做进去,然后发现有有Bug,再重写代码等问题。

   

7. QQ音乐的整体框架经过了几次调整?

罗彧成:QQ音乐3.5做了一次大调整,4.0一次,5.0又一次。3.5的调整主要是整个产品的形态的调整,3.5之前iOS和安卓区别很大,3.5后整体改了一次,包括业务的修改,基本上等于重做了一个新的QQ音乐。4.0之后因为曲库的音乐格式越来越多了,用户的WiFi环境越来越好了,增加了无损品质,但那个时候大部分手机系统的播放器是不支持无损播放的,我们就自己做了一个播放器,我们还改造了云歌单,因为用户越来越多了,体量增加非常大。以前用户不习惯在手机上听在线歌曲,喜欢拷歌曲来听,但是从2013年以后,用户就习惯了在移动端上听歌,这个时候对云歌单的要求非常高,所以这一块做了调整。最近的调整就是5.0的调整,5.0主要调整的是UI框架,因为我们模块、界面都是各写各的,资源浪费很严重,代码复用率也不高,所以我们做了一个整体的UI架构的调整,在这个基础能更快地添加功能。

   

8. 这个框架调整的工作量如何,相当于重构吗?

罗彧成:我们调整这种代码的时候,不会在准确的时间上去改,怕影响发布的时间。通常会通过一个分支,在分支上去做一些重构的工作,等它重构完了,直接合过来,合流进来才发布。如果在主线上重构,会影响整个版本的发布时间,单独在一条分支上去做,做好之后再合回来。

   

9. 现在的框架是怎样的?各个功能模块之间的耦合度大吗?。

罗彧成:我们这里底层这一块都是非常独立的,比如播放器就是播放器,文件系统、各种图片引擎、网络引擎都是没有任何关联的。中间有一个层级有些关联,比如曲库,歌曲的描述在整个APP里面都是同一个数据结构,这里面任何改动都能影响到其他地方,因为这是基础,所以不可避免。其他业务模块耦合度不高,比如用户信息的管理,登录系统,歌单管理系统,音乐管家,听歌识曲,还有一些曲库收费的控制系统,都是相互独立的。

   

10. 因为这个框架的耦合度不是很大,重构的时候可以大刀阔斧,而不用担心整体框架调整带来的影响是吧?

罗彧成:对,在这里之后一个非常好的效果就是,在4.0之前,我们一个月出一个版本是很难的,一般都是两个月才出一个版本。改造之后,从4.0到目前的5.1中间有24个版本,迭代速度非常快。所有的应用在架构设计上理念是一样的,音乐App只是其中一个。

   

11. 我看您在演讲中提到GDPS及反劫持,想问一下音乐应用会遇到什么安全问题?

罗彧成:其实音乐应用安全问题非常多。比如登录,登录的时候是有用户信息的,这个时候会经常碰到一些被劫持之后跳转到其他地方的问题。还有就是我们内嵌的一些H5的页面,这些页面如果不去做一些安全措施,也可能会被第三方劫持,然后跳转到一些不管是广告还是恶意代码、木马的地方。劫持有恶意的,也有非恶意的,有些是运营商,当时碰到的就是辽宁那边的铁通有一片用户登录不了,然后发现他们的域名都跳转到他们的一个DNS服务器上去了,导致无法登录。在腾讯,发布的应用都会经过安全漏洞的测试,这个只是其中一部分,还有很多第三方劫持,一些进程的劫持,还有一些广播劫持,非常多。

   

12. 是不是因为安卓本身它的开放性,以及大家对安卓上面这种管理以及安全机制不完善,才出现这种问题?iOS是不是就比安卓问题少一些?

罗彧成:这是一个原因,因为安卓是开源的,里面的流程,原理,大家都能知道,就会有一些安全的问题。最近我们出现的一个比较大的问题就是,用户可以重打包,重打包是什么意思?修改我们代码里面的一些关键的东西,比如非绿钻的用户弄成绿钻的,当然这些APK在正规渠道上是下载不到的,一些非正规的渠道会提供,说明是绿钻破解版之类的。

   

13. 我想问一下您对移动开发的看法,因为现在业界有两种声音,一种是说我们Native开发要怎样怎样怎样,另一种声音就说走外部的方式来开发,你怎么看?

罗彧成:这个争论其实很久了。是H5来做好还是说用Native做好,其实两个是各有利弊,在音乐里面这两个也是并存的。H5的优势是灵活,要调整也非常快,不用通过发布新版本就能实现一些需求,像需要强运营的功能,比如说音乐管家的变化,还有一些活动的运营,活动发布这些东西就不适合Native,用H5就比较方便,也可以很快地调整,发布。但是它有一个不好的地方,就是它的交互,还有性能。拿性能来说,播放MV,听音乐,这些东西都要依赖系统的WebView,特别是现在一般在安卓上用系统的WebView来承载H5的开发,相对于Native来说,它的性能还是差很多,特别是MV的播放。

   

14. 你们有没有遇到WebView的一些安全问题?

罗彧成:对,一个是JS的劫持,这里面我们通过白名单来预防,只有在白名单里面的域名我们才会去跳转,如果是非白名单的,是不会做跳转的。QQ音乐里面,它的H5的页面,都是同一个域名下的,这个其实很简单,把它给加进去,就可以预防掉。还有一个就对JS接口的一些回调参数和校验码做代码混淆,现在发布的版本都会做混淆。

你可能感兴趣的:(罗彧成:开发者要优雅地实现各种需求)