QQ APP技术架构分析报告
目录
- 一、核心结论
- 二、Hippy跨端框架分析
- 三、Shadow插件化框架
- 四、小程序生态
- 五、UE4游戏引擎
- 六、PAG动画框架
- 七、Lottie动画
- 八、原生库技术栈
- 九、应用架构特点
- 十、第三方SDK集成
- 十一、技术架构总结
- 十二、总结
一、核心结论
QQ APP采用了混合技术架构,主要使用Hippy(腾讯自研跨端框架)作为跨端框架,同时结合了原生开发、插件化、小程序、游戏引擎等多种技术方案。
技术栈概览
- Hippy- 腾讯自研的跨端框架,主要的跨端技术
- Shadow插件化- 腾讯Shadow插件化框架,支持动态加载
- 小程序- 支持QQ小程序生态
- UE4游戏引擎- 用于游戏和3D场景
- PAG动画- 腾讯PAG动画框架,用于高性能动画渲染
- Lottie- 用于复杂动画效果
- 原生开发- Kotlin/Java原生开发
- 多原生库集成- 视频、音频、图片、网络、安全等
二、Hippy跨端框架分析
2.1 Hippy核心证据
Hippy资源文件(assets/hippy目录):
ssr/vendor_ssr.js- Hippy SSR(服务端渲染)相关
分析:QQ使用了腾讯自研的Hippy框架作为跨端解决方案。Hippy是腾讯开源的高性能跨端框架,支持React和Vue两种开发模式。
2.2 Hippy架构特点
核心优势
- 高性能:使用原生渲染,性能接近原生
- 跨平台:支持Android、iOS、Web
- 开发效率:支持React/Vue语法,开发体验好
- 动态更新:支持Bundle热更新
使用场景
从资源文件可以看出,QQ在以下场景使用Hippy:
- 服务端渲染:SSR支持,提升首屏加载速度
- 跨端页面:需要跨平台复用的页面
三、Shadow插件化框架
3.1 Shadow核心证据
原生库:
libshadowhook.so - Shadow Hook库Shadow资源(assets目录):
assets/shadow/- Shadow插件化相关资源assets/qshadow-plugins/- Shadow插件目录
3.2 Shadow架构分析
Shadow是腾讯开源的Android插件化框架:
核心特点
- 完全插件化:插件可以独立安装、更新
- 宿主与插件隔离:插件运行在独立进程中
- 支持四大组件:Activity、Service、BroadcastReceiver、ContentProvider
- 热更新能力:支持插件热更新
使用场景
从目录结构可以看出,QQ使用Shadow实现:
- 功能模块插件化:将功能模块以插件形式加载
- 动态更新:支持插件独立更新,无需更新主应用
- 游戏插件:
qshadow-plugins/yungame/游戏相关插件
四、小程序生态
4.1 小程序核心证据
小程序资源(assets/mini目录):
QCSC.js- QQ小程序核心脚本QGameAndroid.js- QQ小游戏Android支持QGameOpenDataContext.js- 小游戏开放数据域QGameWorkerContext.js- 小游戏Worker线程QLogic.js- 小程序逻辑层QPageFrame.html- 小程序页面框架QRemoteDebug.js- 远程调试支持QVConsole.js- VConsole调试工具QView.js- 小程序视图层QWebview.js- WebView封装QWorker.js- Worker线程支持
小程序原生库:
libMiniAppCore.so - 小程序核心库 libwxaopenruntimejni.so - 小程序运行时JNI4.2 小程序架构分析
QQ小程序支持完整的微信小程序生态:
核心能力
- 完整运行时:支持小程序完整生命周期
- 小游戏支持:支持小游戏开发
- 开放数据域:支持小游戏开放数据域
- Worker线程:支持多线程开发
- 远程调试:支持远程调试能力
使用场景
- 业务小程序:部分业务功能以小程序形式实现
- 第三方小程序:支持第三方开发者开发小程序
- 小游戏:支持小游戏生态
五、UE4游戏引擎
5.1 UE4核心证据
UE4原生库:
libUE4.so - UE4游戏引擎核心 libUE4Bundle-Splittables.so - UE4 Bundle分割支持UE4资源:
assets/UE4CommandLine.txt- UE4命令行配置
5.2 UE4架构分析
Unreal Engine 4是Epic Games开发的游戏引擎:
核心特点
- 高性能3D渲染:强大的3D图形渲染能力
- 跨平台:支持Android、iOS等平台
- 完整游戏开发工具链:提供完整的游戏开发工具
使用场景
QQ在以下场景使用UE4:
- 3D场景:3D虚拟场景展示
- 游戏功能:游戏相关功能
- AR/VR:增强现实和虚拟现实场景
六、PAG动画框架
6.1 PAG核心文件
动画资源(assets目录):
- 大量
.pag文件,包括:adelie_avatar_generate_loading.pag- 头像生成加载动画ae_editor_text_main.pag- 编辑器文本动画ae_editor_lyric_default.pag- 编辑器歌词动画first_stage.pag- 首阶段动画tutorial_gesture_timelinestretch.pag- 教程手势动画wspag/- 视频相关PAG动画wink/pag/- 视频编辑相关PAG动画video/pag/- 视频相关PAG动画pag/- 各种业务场景PAG动画
6.2 PAG架构分析
**PAG(Portable Animated Graphics)**是腾讯开源的高性能动画框架:
核心特点
- 高性能:使用原生渲染,性能优于Lottie
- 文件小:动画文件体积小
- 支持AE导出:可直接从After Effects导出
- 跨平台:支持Android、iOS、Web等
使用场景
从文件命名可以看出,QQ在以下场景使用PAG:
- 视频编辑:视频编辑器中的动画效果
- 交互反馈:用户操作反馈动画
- 加载动画:各种加载状态动画
- 业务动画:直播、电商、社交等业务场景
七、Lottie动画
7.1 Lottie资源
Lottie原生库:
libjlottie.so - Lottie核心库 librlottie.so - RLottie库 librlottie-image-loader.so - RLottie图片加载器Lottie动画资源(assets目录):
- 大量
.json文件,包括:audio_play_to_stop.json- 音频播放动画audio_ready_to_play.json- 音频准备动画audio_record_to_stop.json- 录音动画guild_*.json- 频道相关动画lottie/- Lottie动画目录refresh_lottie/- 刷新动画- 各种业务场景的Lottie动画
7.2 使用场景
Lottie主要用于:
- 复杂动画:需要复杂交互的动画效果
- 设计稿还原:直接从设计工具导出使用
- 业务动画:直播、社交、电商等业务场景
八、原生库技术栈
8.1 视频处理
视频相关库:
libPlayerCore.so - 播放器核心 libtvideodownloadproxy.so - 视频下载代理 libtvideodownloadproxy_uniform.so - 统一视频下载代理 libqav_video_effect.so - 视频特效 libTcVpxDec.so - VPX视频解码器 libTcVpxEnc.so - VPX视频编码器 libtav_ffmpeg_cmd.so - FFmpeg命令处理 libtav-resample.so - 音频重采样分析:QQ使用了自研播放器和FFmpeg进行视频处理,支持多种视频格式和特效。
8.2 音频处理
音频相关库:
libQQAudio3A.so - QQ音频3A处理(AEC/ANS/AGC) libQQAudioInput.so - 音频输入 libQQAudioReceive.so - 音频接收 libQQAudioSend.so - 音频发送 libGVoice.so - 游戏语音 libGCloudVoice.so - 游戏云语音 libaudiohelper.so - 音频辅助库 libnative_audio_record_v7a.so - 原生音频录制 libvoicemessagedenoise.so - 语音消息降噪 libwx-asr-vad.so - 语音识别VAD libsonic.so - 音频处理库音频效果库(Wwise音频引擎):
libAkAudioInput.so - Wwise音频输入 libAkCompressor.so - 压缩器 libAkDelay.so - 延迟效果 libAkExpander.so - 扩展器 libAkFlanger.so - 镶边效果 libAkGain.so - 增益控制 libAkGuitarDistortion.so - 吉他失真 libAkHarmonizer.so - 和声器 libAkMatrixReverb.so - 矩阵混响 libAkMotion.so - 运动效果 libAkParametricEQ.so - 参数均衡器 libAkPeakLimiter.so - 峰值限制器 libAkPitchShifter.so - 音调变换 libAkRecorder.so - 录音器 libAkReflect.so - 反射效果 libAkRoomVerb.so - 房间混响 libAkSilenceGenerator.so - 静音生成器 libAkSineTone.so - 正弦音调 libAkSoundSeedAir.so - 空气音效 libAkSoundSeedImpact.so - 冲击音效 libAkStereoDelay.so - 立体声延迟 libAkSynthOne.so - 合成器 libAkTimeStretch.so - 时间拉伸 libAkToneGen.so - 音调生成器 libAkTremolo.so - 颤音效果其他音频库:
libMasteringSuite.so - 母带处理套件 libMcDSP.so - McDSP音频处理 libiZotope.so - iZotope音频处理 libAuro.so - Auro音频处理分析:QQ使用了完整的音频处理体系,包括:
- 3A处理:回声消除、噪声抑制、自动增益控制
- Wwise音频引擎:专业的游戏音频引擎
- 多种音频效果:压缩、混响、均衡等专业效果
8.3 图片处理
图片处理库:
libimage_gif.so - GIF图片处理 libandroidndkgif.so - Android NDK GIF支持 libapng.so - APNG图片支持 libgiflibra.so - GIF库 libGIFEngine.so - GIF引擎 libzhitugif.so - 知兔GIF处理 libblur.so - 模糊效果 libsmart-blur.so - 智能模糊分析:QQ支持多种图片格式,特别是GIF和APNG动图格式。
8.4 网络库
网络相关库:
libLightQuic.so - 轻量级QUIC协议 libhttpdns.so - HTTP DNS libxphttpclientex.so - HTTP客户端扩展 libuploadnetwork_v1.3.so - 上传网络库 libuv.so - libuv网络库 libuvjni.so - libuv JNI分析:QQ使用了QUIC协议和HTTP DNS来提升网络性能。
8.5 安全与加密
安全相关库:
libQSec.so - QQ安全库 libDBEncryptV2.so - 数据库加密V2 libDBFix.so - 数据库修复 libDecodeSo.so - 解码库 libMMANDKSignature.so - MMANDK签名 libMSFKernel.so - MSF内核 libmsfbootV2.so - MSF启动V2 libckeygenerator.so - 密钥生成器 libwtecdh.so - ECDH加密分析:QQ使用了多层安全防护,包括数据加密、签名验证等。
8.6 存储
存储相关库:
libmmkv.so - MMKV高性能键值存储 libwcdb.so - WCDB数据库(微信开源)分析:QQ使用了MMKV和WCDB两种存储方案:
- MMKV:高性能键值存储
- WCDB:关系型数据库
8.7 崩溃监控
崩溃监控库:
libBugly_Native.so - 腾讯Bugly崩溃监控 libbugly_dumper.so - Bugly转储器 libbuglybacktrace.so - Bugly堆栈回溯 libwechatbacktrace.so - 微信堆栈回溯 libwechatcrash.so - 微信崩溃监控 libwechatxlog.so - 微信日志 libmatrix-hookcommon.so - Matrix Hook通用 libmatrix-memoryhook.so - Matrix内存Hook libmatrix-pthreadhook.so - Matrix线程Hook libmatrix-traffic.so - Matrix流量监控分析:QQ使用了腾讯的Bugly和Matrix进行崩溃监控和性能分析。
8.8 其他重要库
地图引擎:
libtxmapengine.so - 腾讯地图引擎 libtxmapvis.so - 腾讯地图可视化 libtencentloc.so - 腾讯定位服务日志库:
libmarsxlog.so - Mars XLog日志库 liblog.so - 日志库 liblogcathook.so - 日志捕获Hook libwechatxlog.so - 微信日志其他:
libc++_shared.so - C++标准库 libstlport_shared.so - STLPort标准库 libfreetypejni.so - FreeType字体渲染 libcodecsilk.so - SILK音频编解码 libcodecwrapperV2.so - 编解码包装器V2 libgpro.so - GPro库 libfekit.so - FEKit库 libfg.so - FG库 libkernel.so - 内核库 libmodule_service.so - 模块服务 libunitedconfig.so - 统一配置 libxplatform.so - 跨平台库 libzstd-jni-1.5.6-1.so - Zstd压缩库 liblzmadecode.so - LZMA解码库 libjlz4.so - LZ4压缩库 libmbedtlsall.so - mbedTLS加密库 libcftutils_v1.3.1.so - CFT工具库 libcpu_v1.1.so - CPU工具库 libcuckoo.so - Cuckoo哈希表 libdjinni_interface_core_public.so - Djinni接口核心 libdjinni_support_lib.so - Djinni支持库 libtriton.so - Triton库 libsquarepants.so - SquarePants库 libwarbler.so - Warbler库 libwind.so - Wind库 libturingmfa.so - 图灵MFA libturingxq.so - 图灵XQ libtgpalite.so - TGP Lite libBeaconDT.so - Beacon DT libstartup.so - 启动库 libthreadsuspend.so - 线程挂起 libtrim_process_pie.so - 进程裁剪 libunusedcodecheck.so - 未使用代码检查 libtry-alloc-lib.so - 尝试分配库 libx5linker.so - X5链接器 libxweb_linker.so - XWeb链接器 libv8jni.so - V8 JNI libtv8rt.so - TV8运行时 librtc_node_report.so - RTC节点报告 libwechatns.so - 微信网络服务 libwechatcommon.so - 微信通用库 libweibosdkcore.so - 微博SDK核心 libzplan-android.so - ZPlan Android libzplan_interface_dynamic.so - ZPlan接口动态 libzplan_service.so - ZPlan服务九、应用架构特点
9.1 多DEX架构
从classes*.dex文件可以看出,QQ使用了Multidex:
classes.dex- 主DEX(7.8KB,仅36行,可能是启动类)classes2.dex到classes37.dex- 辅助DEX(共37个)- 总大小约350MB+
分析:应用代码量巨大,需要Multidex来突破单个DEX文件的方法数限制。QQ的DEX文件数量(38个)远超知乎(19个),说明代码量更大。
9.2 资源管理
资源文件统计:
r/- 资源目录,包含大量XML、PNG、WebP等资源文件assets/- 丰富的资源文件,包括动画、配置、插件等- 资源文件经过混淆处理(文件名使用短名称)
分析:应用UI复杂,资源文件众多,且经过混淆处理以减小体积和保护资源。
9.3 插件化架构
从目录结构可以看出,QQ采用了插件化架构:
- Shadow插件化:使用Shadow框架实现插件化
- 动态加载:支持插件动态加载和更新
- 功能隔离:插件运行在独立进程中
9.4 多技术栈混合
QQ采用了多种技术栈:
- Hippy:跨端页面
- 小程序:小程序生态
- 原生开发:核心功能
- 插件化:功能模块
- 游戏引擎:3D场景
十、第三方SDK集成
10.1 已识别的SDK
从配置文件和库文件可以看出,QQ集成了以下SDK:
腾讯内部:
- Bugly(崩溃监控)
- Matrix(性能监控)
- WCDB(数据库)
- Mars(网络库)
- XLog(日志库)
- 腾讯地图
- 腾讯定位
其他:
- MMKV(存储)
- Wwise(音频引擎)
- UE4(游戏引擎)
10.2 SDK配置
配置文件示例:
assets/grs_sdk_*.json- 阿里云GRS配置assets/easygo.json- EasyGo配置(MagicWindow相关)assets/configs/- 各种配置文件
十一、技术架构总结
11.1 架构特点
- 混合架构:原生 + Hippy + 小程序 + 插件化 + 游戏引擎
- 插件化架构:使用Shadow实现功能模块插件化
- 多端支持:Hippy跨端 + 小程序生态
- 高性能动画:PAG + Lottie双动画方案
- 丰富的原生能力:视频、音频、图片、网络、安全等
- 完善的监控体系:Bugly + Matrix性能监控
11.2 技术选型分析
| 技术领域 | 选型 | 原因 |
|---|---|---|
| 跨端框架 | Hippy | 腾讯自研,性能优秀,支持React/Vue |
| 插件化 | Shadow | 腾讯自研,完全插件化,支持热更新 |
| 小程序 | QQ小程序 | 支持小程序生态,与微信小程序兼容 |
| 动画 | PAG + Lottie | 高性能 + 复杂动画 |
| 游戏引擎 | UE4 | 强大的3D渲染能力 |
| 音频处理 | Wwise + 自研 | 专业音频引擎 + 定制化处理 |
| 图片加载 | 自研 | 支持多种格式,特别是GIF/APNG |
| 存储 | MMKV + WCDB | 高性能键值存储 + 关系型数据库 |
| 网络 | QUIC + HTTP DNS | 高性能网络协议 |
| 崩溃监控 | Bugly + Matrix | 完善的错误追踪和性能分析 |
11.3 架构优势
- 开发效率:Hippy跨端开发,小程序生态,插件化动态更新
- 性能优化:原生能力 + Hippy优化,性能平衡
- 动态更新:插件化 + 小程序 + Hippy Bundle支持热更新
- 用户体验:PAG动画提供流畅的交互体验
- 功能扩展:插件化架构支持功能模块独立开发和更新
- 生态支持:小程序生态支持第三方开发者
11.4 潜在挑战
- 包体积:多DEX、多原生库、多技术栈导致APK体积巨大
- 维护成本:多技术栈混合,维护成本非常高
- 性能平衡:原生、Hippy、小程序、插件的性能平衡需要精细调优
- 版本管理:多技术栈版本管理复杂
- 兼容性:多技术栈之间的兼容性问题
十二、总结
QQ APP采用了以Hippy为核心,结合插件化、小程序、游戏引擎的混合架构,结合了原生开发、PAG动画、WebView等多种技术。整体架构设计复杂,在开发效率、性能、用户体验、功能扩展性之间取得了良好的平衡。
核心优势:
- Hippy跨端开发提升效率
- Shadow插件化支持动态更新
- 小程序生态支持第三方开发者
- PAG动画提供流畅体验
- 丰富的原生能力支撑
- 完善的监控体系
改进方向:
- 优化包体积(多DEX、多原生库)
- 简化技术栈(减少技术栈数量)
- 优化多技术栈管理(统一管理平台)
- 提升性能(多技术栈性能优化)
分析基于QQ APP 9.1.33版本(APKPure)