开发微信鸿蒙版,需要经历什么?

直至现在,「微信鸿蒙版」这五个字,依然被赋予着太多意义。

这是一款产品,也不仅仅是一款产品。开发它的本质,是让两个高速前进,相互影响的复杂系统,彼此磨合和熟悉,像是执行一场空中加油任务。

不管外界如何评价和鞭策,这款产品本身,依然需要研发团队一个键一个键敲出来,从内核,到架构,到内测,到公测,再到一轮一轮的 debug,他们要在不到一年的时间里,走完微信14 年的路。

回顾鹅厂所做过的产品里,也许从未有过一款,被如此放在放大镜下凝视。每一次上架,每一个 bug,乃至于每一个里程碑,几乎都预定当天热搜。

站在正式版发布的1 月 9 日,或许这一切都可以风轻云淡地说:the show must go on。但这过去的 295 天里,他们的经历,我们认为值得记录下来,分享给关心微信鸿蒙版的用户朋友们。

2024年3月,集结 

鹅厂指派了从塞班(Symbian)时期就负责微信开发工作的团队,来主导微信鸿蒙版。从塞班到智能手表、车机、Linux PC 端的微信,这个团队在内部素以擅长攻克不同环境、不同语言的开发工作著称。

同样很重要的一点是,得益于智能手表端微信的研发工作,微信和华为的两个团队是老相识,这也让双方的对接更加顺畅紧密起来。从三月贯穿到四月,两边通过拉通会、分享会学习鸿蒙系统研发框架,不定时组织技术专题讨论。

双方都很清楚,这不是一场三天两夜就能解决的小规模战斗,而是旷日持久的兵团级战役。兵马未动,粮草先行,敲下第一行代码之前,还有许许多多的工作需要准备。

2024年4月,基建 

万丈高楼平地起,基建是最重要的第一步。

搞基建,“三通一平”(通电/通路/通水/土地平整)是基本要求,进取一些,可以做到“五通一平”(加入通讯/排污),再进一步,还有“七通一平”(加入通气/有线电视),乃至于“十通一平”(加入宽带/铁路/暖气)。通得越多,越有利于后期扩展和长远发展。

经过塞班、手机、手表等各种终端上的长期打磨,这个团队积累了一套名为Alita(阿丽塔)的跨平台内核。这也为鸿蒙版微信的基建打下了基础。这个阶段的重中之重是,快速熟悉鸿蒙系统,移植基础库,让 Alita 内核能够在鸿蒙系统上运行起来,和华为一边沟通、一边验证推进。

 2024年5月,架构 

接下来考验的是架构能力。开发团队需要设计好鸿蒙微信客户端的架构、编写好各模块文档,支撑各业务进场后能够高效开发。

这一步的难点,在于充分预判到业务之间的复杂解耦,既要降低各业务之间的依赖性,又要提高整体的稳定性,还要留出高可扩展性,属于典型的“我全都要”难题。

这就好比从零开始建设一座城市,要预估到这座百年之后超级都市的人口规模、交通状况、人居需求、产业结构、商业发展等因素,以及提前平衡这些因素之间的关系,需要具备极大的前瞻视角。

技术团队继续摇人,招聘也快马加鞭推进。TAPD(腾讯敏捷产品研发平台)流程图里,他们的首个目标是做出一个基础版本,保证用户能实现收发消息、语音通话等最基础、也是最重要的功能。

 2024年6月,磨合 

进入了真正的手搓环节。flutter(跨平台应用程序开发框架)、liteapp(专为移动端设计的跨平台开发框架)等,都是这个阶段的关键工作。

为了这桌“年夜饭”,技术小哥们一边在厨房切菜烧饭,一边去客厅招呼各方沏茶倒水,让支付和VoIP(语音通话技术)等基础能力陆续凑上一桌。

除了内外部密切的技术沟通,微信和华为团队对彼此的技术标准保持了互相尊重。以相册选图发送功能为例,在 Android 系统上,选图需要获取整个相册权限,也就是说应用可以访问用户的所有照片。在鸿蒙上的选图功能,为了保障用户隐私,微信采用的是 Picker 控件的方式,相册照片的展示和选择逻辑都由 Picker 控件提供,微信只能读取到用户勾选的照片。

 第一个里程碑,bug 如约而至 

赶在6月21日前,团队做好了第一个内部体验版本,包含收发消息、通话功能。和2011年1月21日发布的 iOS和安卓版的微信1.0版本相比,多了语音消息发送。

你可能会不以为然:大动干戈这么久,就整了个这毛坯房?

其实这里蕴含的开发思路,是验证最小可用的原则,本质上是对第一阶段研究鸿蒙语言和系统的成果验收。重要的是把基本功练好,才能为后续的开枝散叶打好底子。

但即便是如此普通的版本,也出了个闪退型 bug,最后查出来是系统的底层 API 问题:同样的代码逻辑,在 iOS 和安卓上能用,但在鸿蒙上行不通。两边团队为此绞尽脑汁,交了两个星期的学费,最后还是靠着某位技术小哥灵光一现想到的。

这个 bug也像是一场结业考试,经此一役,开发进入了快节奏。

微信集合了众多产品功能,各功能间又有复杂的交互和依赖关系,比如小程序的开发就涉及到与支付功能的打通,而支付能力又需要与基础会话功能打通。在完成基建的前提下,基础、支付、小程序……能进场的业务模块都陆续进了场。一个共同的目标是——10月8号鸿蒙公测那天,做出一个新版本。这个版本,将新增微信支付、朋友圈等功能。

 2024年10月8日:喜欢您来 

10月8日,微信鸿蒙原生版开启内测邀请,尝鲜版本包含基础社交通讯音视频通话、朋友圈、微信支付的二维码收/付款等功能。

内测开启,意味着微信和其他所有适配原生鸿蒙的第三方App一样,从内测到应用尝鲜再到公测,走上了鸿蒙系统第三方软件开发的三部曲。

为什么要限量内测而不是一口气开放下载呢?

在全新的平台上,要支撑海量用户、高并发通讯需求,同时涉及支付、小程序、视频等多个大功能模块,还要满足极高频使用下的稳定性,是很大的挑战。

所以,用内测 → 找bug → 修bug → 加大内测的方式,是一个更符合软件开发规律的方式。

经历了4天紧张的测试和debug,包括微信支付在内的多个功能经过严格测试流程后,合入大版本,10 月 12 日,微信鸿蒙原生版正式开始公测。

2024年10月~11 月:这都能遇到灰产啊啊啊

公测放量过程中,有一次实际登陆人数不到放量总数的十分之一?

某平台上竟然有人公然售卖测试名额?

一系列插曲打破了原定的放量节奏,双方共同排查后发现,原来有人把安装包拿去二手平台牟利。应用商店完善机制后,把漏洞补上。

安装包都能拿来卖,也堪称是国产软件开发史上浓墨重彩的一笔。

微信鸿蒙版在尝鲜专区上线了2万测试名额,但后台显示,登录数据一直较低,我们和华为一同复盘发现,因为有人用脚本去抢名额,触发了应用商店的安全机制,同时扰乱了应用商店的计数逻辑,导致大概90% 的放量被拦截,最终实际下载的用户只有 10%左右。

又是浓墨重彩的一笔......

如何让用户尽可能体验到微信测试版本?

开发微信鸿蒙版,需要经历什么?

在基本保障尝鲜专区不断档的情况下,11 月 6 日,双方紧急协商,华为将微信鸿蒙版的测试名额大幅扩容,微信再次邀请扩容后的用户分批有序参与内测,共同完善新版本的各种体验。

在不断收集用户反馈、历经数次迭代后,目前的版本已经可以使用视频号、聊天引用、发文件等功能,所有鸿蒙用户也都可以直接下载,更多功能在持续上线。

 2025年1月9日:不止是微信 

吸收了广大用户的反馈和多轮debug后,鸿蒙版微信顺利结束公测,1月9日正式版本上线。你除了能稳定下载和使用微信外,还可以用到 QQ、腾讯视频、腾讯新闻、QQ 音乐等App。

自今年起,腾讯20多款产品通过敏捷开发,实现鸿蒙系统的适配工作,更多腾讯的产品适配也在路上。

一个发生在2024年10月29日的插曲,某种程度上,可以反映微信鸿蒙版开发团队的工作情形和协作流程。

19:20,项目组微信支付团队发现,即将要上架的最新尝鲜版的微信,小部分用户转账入口出现bug,点击后无反应。

20:15,客服团队同步后台客诉情况。

20:57,微信支付团队初步定位,有问题的代码是今日合入导致的,疑似是LiteApp(跨端的框架,微信转账是鸿蒙第一个使用这个框架的功能)的问题。

21:31,进一步定位问题,发现在一些极端情况下, LiteApp的文件缓存写入被系统提示权限不足,联系华为技术团队一起定位。

21:47,支付技术团队完成最新内测版微信的修复,合入后,提交版本给测试团队。

22:32,支付技术团队复盘问题,提出后续改进措施。

22:41,微信基础技术团队向华为应用商店提审新版本内测包。

22:54,向华为应用商店提审尝鲜版。

23:30,最新尝鲜版微信通过审核,上架尝鲜专区,转账问题修复。

微信公众平台曾有一句 slogan 深入人心:再小的个体,也有自己的品牌。同样的,再小的问题,放在微信上,都会被亿量级地扩大。

开发微信鸿蒙版,需要经历什么?

我们知道,永远等不来“完美交付”这一天。灰度测试、持续迭代,让产品在和用户的互动中得到改进,是腾讯一直以来的产品理念。

感谢微信用户、鸿蒙用户始终跟我们站在一起,7x24小时反馈bug、提出优化意见。如果把新产品开发比做一场足球赛,那希望你们一直都在,做我们敏捷开发“球队”的第12人。

.rich_media_content{--news-tabel-th-night-color: #444444;--news-font-day-color: #333;--news-font-night-color: #d9d9d9;--news-bottom-distance: 22px}.rich_media_content p:not([data-exeditor-arbitrary-box=image-box]){letter-spacing:.5px;line-height:30px;margin-bottom:var(--news-bottom-distance);word-wrap:break-word}.rich_media_content{color:var(--news-font-day-color);font-size:18px}@media(prefers-color-scheme:nodark){body:not([data-weui-theme=light]):not([dark-mode-disable=true]) .rich_media_content p:not([data-exeditor-arbitrary-box=image-box]){letter-spacing:.5px;line-height:30px;margin-bottom:var(--news-bottom-distance);word-wrap:break-word}body:not([data-weui-theme=light]):not([dark-mode-disable=true]) .rich_media_content{color:var(--news-font-night-color)}}.data_color_scheme_dark .rich_media_content p:not([data-exeditor-arbitrary-box=image-box]){letter-spacing:.5px;line-height:30px;margin-bottom:var(--news-bottom-distance);word-wrap:break-word}.data_color_scheme_dark .rich_media_content{color:var(--news-font-night-color)}.data_color_scheme_dark .rich_media_content{font-size:18px}.rich_media_content p[data-exeditor-arbitrary-box=image-box]{margin-bottom:11px}.rich_media_content>div:not(.qnt-video),.rich_media_content>section{margin-bottom:var(--news-bottom-distance)}.rich_media_content hr{margin-bottom:var(--news-bottom-distance)}.rich_media_content .link_list{margin:0;margin-top:20px;min-height:0!important}.rich_media_content blockquote{background:#f9f9f9;border-left:6px solid #ccc;margin:1.5em 10px;padding:.5em 10px}.rich_media_content blockquote p{margin-bottom:0!important}.data_color_scheme_dark .rich_media_content blockquote{background:#323232}@media(prefers-color-scheme:nodark){body:not([data-weui-theme=light]):not([dark-mode-disable=true]) .rich_media_content blockquote{background:#323232}}.rich_media_content ol[data-ex-list]{--ol-start: 1;--ol-list-style-type: decimal;list-style-type:none;counter-reset:olCounter calc(var(--ol-start,1) - 1);position:relative}.rich_media_content ol[data-ex-list]>li>:first-child::before{content:counter(olCounter,var(--ol-list-style-type)) '. ';counter-increment:olCounter;font-variant-numeric:tabular-nums;display:inline-block}.rich_media_content ul[data-ex-list]{--ul-list-style-type: circle;list-style-type:none;position:relative}.rich_media_content ul[data-ex-list].nonUnicode-list-style-type>li>:first-child::before{content:var(--ul-list-style-type) ' ';font-variant-numeric:tabular-nums;display:inline-block;transform:scale(0.5)}.rich_media_content ul[data-ex-list].unicode-list-style-type>li>:first-child::before{content:var(--ul-list-style-type) ' ';font-variant-numeric:tabular-nums;display:inline-block;transform:scale(0.8)}.rich_media_content ol:not([data-ex-list]){padding-left:revert}.rich_media_content ul:not([data-ex-list]){padding-left:revert}.rich_media_content table{display:table;border-collapse:collapse;margin-bottom:var(--news-bottom-distance)}.rich_media_content table th,.rich_media_content table td{word-wrap:break-word;border:1px solid #ddd;white-space:nowrap;padding:2px 5px}.rich_media_content table th{font-weight:700;background-color:#f0f0f0;text-align:left}.rich_media_content table p{margin-bottom:0!important}.data_color_scheme_dark .rich_media_content table th{background:var(--news-tabel-th-night-color)}@media(prefers-color-scheme:nodark){body:not([data-weui-theme=light]):not([dark-mode-disable=true]) .rich_media_content table th{background:var(--news-tabel-th-night-color)}}.rich_media_content .qqnews_image_desc,.rich_media_content p[type=om-image-desc]{line-height:20px!important;text-align:center!important;font-size:14px!important;color:#666!important}.rich_media_content div[data-exeditor-arbitrary-box=wrap]:not([data-exeditor-arbitrary-box-special-style]){max-width:100%}.rich_media_content .qqnews-content{--wmfont: 0;--wmcolor: transparent;font-size:var(--wmfont);color:var(--wmcolor);line-height:var(--wmfont)!important;margin-bottom:var(--wmfont)!important}.rich_media_content .qqnews_sign_emphasis{background:#f7f7f7}.rich_media_content .qqnews_sign_emphasis ol{word-wrap:break-word;border:none;color:#5c5c5c;line-height:28px;list-style:none;margin:14px 0 6px;padding:16px 15px 4px}.rich_media_content .qqnews_sign_emphasis p{margin-bottom:12px!important}.rich_media_content .qqnews_sign_emphasis ol>li>p{padding-left:30px}.rich_media_content .qqnews_sign_emphasis ol>li{list-style:none}.rich_media_content .qqnews_sign_emphasis ol>li>p:first-child::before{margin-left:-30px;content:counter(olCounter,decimal) ''!important;counter-increment:olCounter!important;font-variant-numeric:tabular-nums!important;background:#37f;border-radius:2px;color:#fff;font-size:15px;font-style:normal;text-align:center;line-height:18px;width:18px;height:18px;margin-right:12px;position:relative;top:-1px}.data_color_scheme_dark .rich_media_content .qqnews_sign_emphasis{background:#262626}.data_color_scheme_dark .rich_media_content .qqnews_sign_emphasis ol>li>p{color:#a9a9a9}@media(prefers-color-scheme:nodark){body:not([data-weui-theme=light]):not([dark-mode-disable=true]) .rich_media_content .qqnews_sign_emphasis{background:#262626}body:not([data-weui-theme=light]):not([dark-mode-disable=true]) .rich_media_content .qqnews_sign_emphasis ol>li>p{color:#a9a9a9}}.rich_media_content h1,.rich_media_content h2,.rich_media_content h3,.rich_media_content h4,.rich_media_content h5,.rich_media_content h6{margin-bottom:var(--news-bottom-distance);font-weight:700}.rich_media_content h1{font-size:20px}.rich_media_content h2,.rich_media_content h3{font-size:19px}.rich_media_content h4,.rich_media_content h5,.rich_media_content h6{font-size:18px}.rich_media_content li:empty{display:none}.rich_media_content ul,.rich_media_content ol{margin-bottom:var(--news-bottom-distance)}.rich_media_content div>p:only-child{margin-bottom:0!important}.rich_media_content .cms-cke-widget-title-wrap p{margin-bottom:0!important}
查看原图 152K
本文章为原创、翻译或编译,转载请注明来自陕西瑞畅福源建筑材料有限公司