1. 背景

2024年10月15日晚上各大微信群和QQ群都在疯传QQ.hap ,最为火热的截图是,各种做QQbot 机器人的人兴奋的不得老,原因是:QQ.hap 解包后可以看到QQ的消息结构体使用的是protobuf,protobufdu对应的im_msg_body.proto 中描述了各种微信消息的类型和注释。

2. 分析QQ使用了哪些技术,为什么用?

笔者在拿到QQ.hap后,发现鸿蒙版的QQ其实使用了很多有意思的技术

2.1 protobuf

Protobuf是Protocol Buffers的简称,它是Google公司开发的一种数据描述语言,是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化 。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。

2.2 protobuf 优点

序列化后体积相比Json和XML很小,序列化反序列化速度很快,总之就是吊打JSON,在鸿蒙中可使用@ohos/protobufjs 库使用。
protobufjs使用文档:https://ohpm.openharmony.cn/#/cn/detail/@ohos%2Fprotobufjs

2.2 webview 调试脚本

众所周知,鸿蒙中想要使用Devtools工具调试前端Webview 比较麻烦,QQ编写了一个快捷的sh脚本,可用来调试Webbview

2.3 应用启动框架AppStartup

AppStartup是鸿蒙官方出的应用启动框架,类似Android中的JetPack App Startup,主要解决APP启动时初始化多个任务用的,可以支持任务的异步启动,加快应用启动速度。同时,通过在一个配置文件中统一设置多个启动任务的执行顺序以及依赖关系,让执行启动任务的代码变得更加简洁清晰、容易维护。

官方使用文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/app-startup-V5

2.4 APNG

APNG是Mozilla公司出的,动态可移植网络图形(英语:Animated Portable Network Graphics,缩写APNG)是一种继承自便携式网络图形(PNG)的文件格式,它允许像GIF格式一样播放动态图片,并且拥有GIF不支持的24位图像和8位透明性。 它还保留了与非动画PNG文件的向后兼容性。

鸿蒙中使用APNG文档:https://ohpm.openharmony.cn/#/cn/detail/@ohos%2Fapng

2.5 Xlog 日志框架

libqlog_kit.so,Xlog mars 中的一个子组件,是mars 是微信官方的终端基础组件,是一个使用 C++ 编写的业务性无关,平台性无关的基础组件。

Xlog 优点

xlog相比其它日志模块,有如下优点:

  • 高性能高压缩率
  • 不丢失任何一行日志
  • 避免系统卡顿
  • 避免CPU波峰
  • 支持数据加密

2.6 lottie-动画库

lottie是一个适用于OpenHarmony的动画库,它可以解析Adobe After Effects软件通过Bodymovin插件导出的json格式的动画,并在移动设备上进行本地渲染。

鸿蒙中使用lottie文档:https://ohpm.openharmony.cn/#/cn/detail/@ohos%2Flottie

lottie 优点

  • 支持跨平台,开发成本较低,一套Lottie动画可以在Android/IOS/Web多端使用。
  • 性能好,端上除了解析json,基本没有其他耗性能的操作;并且相比于需要存储较多图片的帧动画,Lottie可以节省比较多的内存空间。
  • 可以从服务端配置URL实现,不需要APP发版就可以实现更新。

2.7 Compose Multiplatform -跨端UI框架

Compose Multiplatform 是基于 Kotlin 和 Jetpack Compose 构建的跨平台开发框架,旨在简化多平台应用程序的开发流程。开发者可以使用相同的代码库来构建适用于不同平台的用户界面,并充分利用 Kotlin 语言的表达能力和可靠性。这意味着开发者可以通过 Compose Multiplatform 编写一次代码,并将其部署到 iOS、Android、桌面和 Web 等多个平台上,从而降低开发成本、提高效率和加快上线速度。

其它基于Kotlin Multiplatform的鸿蒙跨平台开发实践:https://juejin.cn/post/7404858270513152000

个人猜测部分页面使用了KMP实现,类似腾讯视频的方案,当然也不排除,只是使用可KMP写业务逻辑

3. 总结

C++ 才是王道

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐