让天下没有难写的APP——构建移动应用开源项目【2017微信公开课】

大家下午好,很高兴今天能够有机会在这里和大家聊聊微信开源这件小事。从2015年开始,我们和华南理工、中山大学两所学校开展了一个合作,在这两所学校中开通了相关的课程,在这门课程中来自微信的技术团队10来位同事一起从零开始将我们在客户端开发的点点滴滴的经验编成课程,并且我们自己去学校给同学讲述,我们花了很多时间和精力在里面,大家都很累,其实这是持续要做投入的事情,可能你们会好奇说为什么微信做着做着要跑到学校开课程。

一、为什么要做开源

中国有句古话说得好,授人以鱼不如授人以渔,我们说微信其实在这么多年的发展中对外部、对合作伙伴开放了很多合作平台,让第三方开发者、设计师和商户都一起共享微信生态建立后的成果,我们有时候也在想,作为技术人员实现了这些平台之后,我们有很多业务技术实力在里面,我们能不能把一些思想和更本质的东西传递给大家,我们试着提出了一个小目标,让天下没有难写的APP。

这句话很短,但想实现并没有那么容易,我们在这两所学校开设的课程中,我们认为传递移动开发经验到底有哪些途径可以做。首先是文章,我们通过建立微信公众号,将微信的技术团队和WEB开发者打造成一个团队,把相关的技术传递出去,在文章之外我们还做讲演,来自微信一线团队的各个部门的讲师将微信开发过程中最直接的想法和WEB的开发者进行思想上的碰撞。

做完这两件事情,除了口头上讲述一些内容,我们有没有更本质的东西要做。回归本原,我们说做技术思想的传播,工程师之间最好交流的方法就是写代码,所以我们最后选择了微信做技术开源这件事情。

大家可能会好奇说,微信做技术开源,我们应该注重什么,从表层上说我们开发出来的代码是写的很好的,很工整的,可读性是有考量的。微信开源的高标准,高要求只能通过表层展示出来吗?经过思考,我们觉得微信开源的高标准和严要求体现在四个方面:

二、微信技术开源怎么做?

第一个关键词价值,做有价值的事情,无论对于用户还是开发者,我们说有价值,是说我们微信开源的技术项目一定来自微信一线的业务产品开发,不是任何人凭空设想出来的东西,所有开放出来的这些移动方向的技术内容都支撑着微信如此大规模产品和业务。

第二个关键词优势,我们说微信最大的优势是什么?其实是有非常多海量的用户,移动开发领域中,这个优势有什么帮助?意味着我们可以在很多别的开发者,根本没有发现或者遇到过的复杂问题的时候,我们都早已经解决掉了,在移动开发领域这一些问题很多,比如系统兼容性问题、比如用户多样化的网络环境等等。

第三个关键词活力,微信开源的项目必须来自微信,最后必须在微信落地,我们说开源项目最怕什么?最怕没人维护,通过产品迭代,这些开源的项目持续的更新,给他们一个心跳的机制,使他们依然有活力。

第四个关键词易用,易用怎么理解呢?作为一个程序员,我可以花上很多的时间研究微信开放的技术源码的技术思想和设计,我们其实想说,对于不是很有技术实力的开发人员,是否能从微信的开源项目中依然获益呢?答案是肯定的。他可以将微信开源的项目引入在自己的APP中,将微信很多的能力运用在自己的APP中。

三、微信技术开源做什么?

1、Tinker 热补丁技术

我们的代码你可以引用,可以与上游的代码进行合并,接下来我们面临的问题就是做什么,还记得我们说移动终端开发课程吗?这门课程中,我们经过盘点,开发APP的三座大山分别是UI框架、数据库和网络。因此微信第一批的项目在这三个项目选定了,我们定了MMDB移动数据库和Mars跨平台网络组建。Tinker已经在9月份对外开源了。

我们怎么做的Tinker?Tinker的价值在哪里?Tinker是移动热补丁。我们先看这样的流程,PC时代的应用开发交付,在一个应用开发完之后,通过开发者自己的网站交给用户下载,用户持续安装好可以使用,如果有更新的时候,用户可以通过应用内升级这个过程,但移动开发时代我们有一些改变,我们多出了应用角色,从用户的角度看确实是好的,方便用户使用应用,但开发者需要提交到APP商店,经过复杂的审核流程,最终交付给用户。如果我们的流程都这么简单可能还好一些,在一些复杂的生态里面,局面就变成了这样。

每一个版本的迭代和更新都需要审核交给用户,如果说这个流程,其实在我们版本规划比较正常的时候是不会有太多问题的,我们都提倡敏捷开发,这个过程中,敏捷开发和快速迭代,BUG出现的机率非常高,我们的APP都有BUG,如果我们都像这上面的表框这样的话,可能需要很长时间,交给用户的时候,用户可能不用你的应用了。

其实热补丁就是在这样的环境下诞生的,不断的生成上线交付给用户,其实都是开发环节的最后一个部分,我们看这个流程,其实可以简化成这样。我们重新变回了PC交互时代,开发者可以零距离触达用户,这就是热补丁技术的价值。

我们明确了热补丁有什么价值,为什么微信做Tinker?其实在Tinker诞生之前,行业里面已经出现了或多或少的开源、闭源的技术。我的同事说热补丁不是请客吃饭那么容易的。微信Tinker追求工程化可用性,这是Tinker研发之初,我们设置的目标,什么叫工程化可用性?主要是稳定性、兼容性、高效性。

Tinker通过微信客户端多个版本迭代,已经覆盖了数亿用户,稳定性和兼容性得到了保障,微信使用Tinker到现在,已经覆盖了安卓4.0到7.1所有的用户,Tinker在开发的过程中,我们会发现,我们要做一些更好的性能,除了没有使用行业内标准算法之外,我们微信有自己的算法,可以使补丁变的非常小。我们其实不敢说微信的Tinker在行业里面的热补丁技术是最好,但我们敢说微信的Tinker的热补丁是让每一个人用起来最放心的项目,微信的Tinker的优势也在于此。

活力,不得不提起一个尖锐的问题,在大公司里面做开源项目,开源通常意味着这个项目的结束。优秀的开源项目意味着开始,和大公司里的开源项目做法天生有一些冲突。

第一大公司里面做开源项目其实是有一些短期KPI导向的短期项目,开源项目需要持续的人力投入在其中。第二个问题,每一个团队里面员工开发的精力是有限的,做技术研究的时候,需要花很多时间在供应商的开发,这是从员工方面看开发精力的冲突。第三大公司内通常有完备的开发体系,而这些开发是封闭的,很难说和外部的开源体系对接起来。

今天看这个问题,我们也想过很暴力、很简单的想法,比如说团队10个人,这10个人可以做功能开发,如果为了解决这个问题,再招10个员工砸在开源项目上,大公司可能最不缺的就是人力,问题是在大公司里面看上去是可以解决的,但放在微信上面,我们觉得行不通,微信讲究小团队作战,讲究精兵策略,不浪费一兵一卒。

为了解决这个问题,我们在开发Tinker项目的过程中,大概用了快一年的时间解决,其实解决问题的方法很简单,简而言之,将微信的开发团队改造成一个开源化的开发模式。

我们通过对内部系统的改造,使内部的开发和外部的开发模式基本没什么不同,我们做到了一份代码,既可以在微信中使用,也可以在外部的开发者中使用,这科技减少额外的人力投入。

其次我们还收获了很多价值,外部的开发者还可以给我们提供一些我们没有发现的问题,对于微信来说是一个很好的优化bug的渠道,最重要的一点,做开源化的改造,我们在人的思想上做出了最终的变化。我使得我的开发团队可以接触外部的开发技术,看似没有高大上的工作,他们用思想重新包装,呈现出更加优秀的可以呈现出去的组件,通过这个过程,我将我的团队学习能力做了最大能力的提升。

最后一个问题易用,你们可能会说如何使用Tinker,其实很简单,三个方法,第一可以直接在github•com上直接使用,第二可以通过二进制的方式方式。最近我们发现有一些第三方平台喜欢用Tinker,如果你们接入了第三的SDK,你们可以免去使用Tinker的步骤。

我们发现在Tinker项目上这么多时间的坚持和努力没有白费,Tinker成为了微信开源历史上非常重要的里程碑。

2、跨平台网络基础组件——Mars

还记得我们刚才说移动开发领域有三座大山,其中一座所有人做APP迈不过去的就是网络,微信我们叫做Mars火星。

网络是基石,这个基石很多人说我在APP可以使用,可以使用系统的KPI可以实现网络需求。同时微信在这里将Mars作为跨平台的开发组件,事实上可以保证最小的逻辑去减少不同开发者实现,可能引用BUG机率。

第三微信优势,微信有海量覆盖,这可以帮助我们解决海内用的莫名其妙的网络问题,这些问题在座的很多人永远不会遇到。通过微信团队多年的积累和努力,我们愿意把这些内容沉淀下来,Mars源自微信,从微信的6•32版本中正式回归到微信中,大家使用的版本中已经使用了Mars。大家可以看到我在也里摆了一个电脑,我们现场演示一下,一个live demo,这是一个基础的技术使用,我们可以将Mars代码引入其中,其次我们定义下,一定要有服务器、一定要有访问的端口,是一个通常的网络应用模型。

回到开源话题上来,我们说开源不仅是一种态度,更是一种能力,我们希望通过微信的开源做一些改变,我们希望通过微信的开源打通我们内部的团队,和外部社区结合在一起,一方面我们把微信传递给了大家,另一方面也想把大家的思想传递进来。

我们希望可以通过这种方式将微信的价值观,将微信的技术体系跟随着人的流动一起输出出去,通过这种方式影响更多开发者,谢谢大家!

扫描下载现场分享PPT

微信终端开源的正确打开姿势 ——构建移动应用开源项目

原文发布于微信公众号 - 腾讯大讲堂(TX_DJT)

原文发表时间:2016-12-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ThoughtWorks

数字化企业的数据自服务

什么是数据自服务 数据在企业中的处理过程,能清晰地映射出康威定律对IT系统的影响。在各个部门分别建设IT系统、组织内部大量存在信息筒仓(silo)的年代,数据的...

36160
来自专栏SDNLAB

解惑边缘计算

云计算是计算服务的集中化,以最简单的形式利用共享数据中心基础设施和规模经济来降低成本。然而由于路由器跳数,虚拟化技术的引入带来的数据包延迟或数据中心内的服务器延...

545130
来自专栏互联网数据官iCDO

原创:善用GA的高级细分,买到更“值”的社交流量

作者:互联网数据官 原创作者 孙维 最近运营的同事来找我,分析一个和分享行为有关的数据。事情是这样的,为了鼓励用户分享内容到微信等社交平台,运营制定了奖励机制:...

39480
来自专栏猿天地

聊聊我眼中的微服务

2018年7月19日,我的处女作《Spring Cloud微服务-全栈技术与案例解析》开卖了。这是一个值得纪念的日子,也是对自己平时学习的考核。

13830
来自专栏软件测试经验与教训

软件测试思想浅谈

34360
来自专栏ThoughtWorks

敏捷QA,从入门到放弃|TW洞见

今日洞见 文章作者、部分图片来自ThoughtWorks:刘建华。本文封面来自网络。 本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks...

42880
来自专栏罗超频道

微博开推的内容开放协议,会再造一个互联网吗?

内容创业浪潮正在深刻改变互联网的形态:基于URL的WEB已不再是主流形式,反而是一个个内容平台,正在形成大量的“内容孤岛”:微博、微信、今日头条、百家号、企鹅号...

357100
来自专栏云计算D1net

IT人员如何成为一名云计算工程师

75240
来自专栏加米谷大数据

大数据、人工智能与云计算的融合与应用

40370
来自专栏理论坞

如何做别人眼中专业的交互设计师

最近发现网上可以学习的交互知识和如何去做交互设计的内容还是比较匮乏,所以想将自己这些年做互金行业的一些交互知识经验贡献出来,希望给一些刚入行的朋友看到能有所收获...

19930

扫码关注云+社区

领取腾讯云代金券