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 - 小程序运行时JNI
4.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)