【HarmonyOS NEXT】从泄露的QQ.hap中分析QQ使用了哪些技术,为什么要用?
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使用文档:ohpm.openharmony.cn/#/cn/detail…
2.2 webview 调试脚本
众所周知,鸿蒙中想要使用Devtools工具调试前端Webview 比较麻烦,QQ编写了一个快捷的sh脚本,可用来调试Webbview
2.3 应用启动框架AppStartup
AppStartup是鸿蒙官方出的应用启动框架,类似Android中的JetPack App Startup,主要解决APP启动时初始化多个任务用的,可以支持任务的异步启动,加快应用启动速度。同时,通过在一个配置文件中统一设置多个启动任务的执行顺序以及依赖关系,让执行启动任务的代码变得更加简洁清晰、容易维护。
官方使用文档:developer.huawei.com/consumer/cn…
2.4 APNG
APNG是Mozilla公司出的,动态可移植网络图形(英语:Animated Portable Network Graphics,缩写APNG)是一种继承自便携式网络图形(PNG)的文件格式,它允许像GIF格式一样播放动态图片,并且拥有GIF不支持的24位图像和8位透明性。 它还保留了与非动画PNG文件的向后兼容性。
鸿蒙中使用APNG文档:ohpm.openharmony.cn/#/cn/detail…
2.5 Xlog 日志框架
libqlog_kit.so,Xlog mars 中的一个子组件,是mars 是微信官方的终端基础组件,是一个使用 C++ 编写的业务性无关,平台性无关的基础组件。
Xlog 优点
xlog相比其它日志模块,有如下优点:
- 高性能高压缩率
- 不丢失任何一行日志
- 避免系统卡顿
- 避免CPU波峰
- 支持数据加密
2.6 lottie-动画库
lottie是一个适用于OpenHarmony的动画库,它可以解析Adobe After Effects软件通过Bodymovin插件导出的json格式的动画,并在移动设备上进行本地渲染。
鸿蒙中使用lottie文档:ohpm.openharmony.cn/#/cn/detail…
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的鸿蒙跨平台开发实践:juejin.cn/post/740485…
个人猜测部分页面使用了KMP实现,类似腾讯视频的方案,当然也不排除,只是使用可KMP写业务逻辑
3. 总结
C++ 才是王道
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术