知乎APP技术架构分析报告
目录
一、核心结论
知乎APP采用了混合技术架构,主要使用React Native作为跨端框架,同时结合了原生开发、PAG动画、WebView等多种技术方案。
技术栈概览
- React Native - 主要的跨端技术框架,采用多Bundle架构
- Kotlin/Java - 原生Android开发语言
- PAG动画 - 腾讯PAG动画框架,用于高性能动画渲染
- Lottie - 用于复杂动画效果
- WebView - 用于H5页面和混合开发
- 多原生库集成 - 视频播放、图片处理、网络、安全等
二、React Native架构分析
2.1 RN核心证据
原生库文件(lib/arm64-v8a目录)
React Native核心库:
libreactnativejni.so - React Native JNI桥接
libreactnativeblob.so - React Native Blob支持
libreact_nativemodule_core.so - RN模块核心
libreact_codegen_*.so - RN代码生成器(多个)
libreact_render_*.so - RN渲染引擎(多个)
libreact_config.so - RN配置
libreact_debug.so - RN调试支持
JavaScript引擎:
libjscexecutor.so - JavaScriptCore执行器
libhermes_executor.so - Hermes执行器
libhermes.so - Hermes引擎
libjsi.so - JavaScript Interface
libjsinspector.so - JS调试器
libturbomodulejsijni.so - TurboModule JSI
布局引擎:
libyoga.so - Yoga布局引擎(RN的布局系统)
liblayoutkit.so - 布局工具包
RN组件库:
libreact_codegen_ReactNativeVideoSpec.so - 视频组件
libreact_codegen_ReactNativeWebviewSpec.so - WebView组件
libreact_codegen_ReactNativeSvgSpec.so - SVG组件
libreact_codegen_ReactNativeReanimatedSpec.so - 动画组件
libreact_codegen_PagerView.so - 分页组件
libreact_codegen_ReactNativeGesturehandlerSpec.so - 手势组件
libreact_codegen_ReactNativeLinearGradientSpec.so - 渐变组件
Bundle文件(assets目录)
主要RN Bundle:
sylas.android.jsbundle- Sylas RN Bundle(版本:290-5e515d0d)rn/amadeus-rn.android.jsbundle- Amadeus RN Bundle(版本:2.363.0)one_rn/amadeus-rn.android.jsbundle- One RN Bundle(版本:10.60.0.9)
Bundle配置:
zh__manifest.json- 主Bundle配置rn/zh__manifest.json- RN Bundle配置rn/bundle_manifest.json- Bundle清单one_rn/zh__manifest.json- One RN配置
2.2 RN架构特点
多Bundle架构
- Sylas Bundle:主应用RN Bundle
- Amadeus Bundle:社区相关功能(版本2.363.0)
- One RN Bundle:独立业务模块(版本10.60.0.9)
- 版本管理:每个Bundle独立版本控制,支持独立更新
JS引擎选择
知乎同时集成了两种JS引擎:
- JavaScriptCore:标准RN场景,兼容性好
- Hermes:高性能场景,启动速度快,内存占用低
分析:知乎可能在不同场景使用不同引擎:
- JSC:标准RN场景,兼容性优先
- Hermes:性能敏感场景,启动速度优先
RN组件生态
从原生库可以看出,知乎集成了丰富的RN组件:
- 视频播放:ReactNativeVideo
- WebView:ReactNativeWebview
- 动画:ReactNativeReanimated(高性能动画)
- 手势:ReactNativeGesturehandler
- SVG:ReactNativeSvg
- 分页:PagerView
- 渐变:ReactNativeLinearGradient
三、PAG动画框架
3.1 PAG核心文件
原生库:
libpag.so - PAG动画核心库
动画资源(assets目录):
- 大量
.pag文件,包括:agree.pag/agree_night.pag- 点赞动画like.pag/like_night.pag- 喜欢动画thumbup.pag/thumbdown.pag- 点赞/点踩动画live_playing.pag- 直播播放动画audio_playing.pag- 音频播放动画loading.pag- 加载动画- 各种业务场景的动画文件
3.2 PAG架构分析
**PAG(Portable Animated Graphics)**是腾讯开源的高性能动画框架:
核心特点
- 高性能:使用原生渲染,性能优于Lottie
- 文件小:动画文件体积小
- 支持AE导出:可直接从After Effects导出
- 跨平台:支持Android、iOS、Web等
使用场景
从文件命名可以看出,知乎在以下场景使用PAG:
- 交互反馈:点赞、喜欢、点踩等用户操作反馈
- 状态指示:加载、播放等状态动画
- 业务动画:直播、音频、视频等业务场景
- 主题适配:支持日间/夜间模式(.pag / _night.pag)
四、Lottie动画
4.1 Lottie资源
动画资源(assets/lottie_json目录):
swipe_right.json- 右滑动画shake_phone.json- 摇一摇动画twist_multi_angle.json- 多角度旋转动画
4.2 使用场景
Lottie主要用于:
- 复杂动画:需要复杂交互的动画效果
- 设计稿还原:直接从设计工具导出使用
五、原生库技术栈
5.1 视频播放
视频播放库:
libzmplayer.so - 知乎自研播放器
libttmplayer_lite.so - 字节跳动播放器(轻量版)
libaemonplayer_aio.so - 播放器库
libByteVC1_dec.so - 字节跳动视频解码器
libffavc.so - FFmpeg AVC解码器
分析:知乎可能使用了多套播放器:
- 自研播放器:主要业务场景
- 字节跳动播放器:特定场景(可能是合作或测试)
5.2 图片处理
图片处理库:
libheif.so - HEIF图片格式支持
libttheif_dec.so - HEIF解码器
libstatic-webp.so - WebP静态图片支持
libimagepipeline.so - Fresco图片管道
libnative-imagetranscoder.so - 原生图片转码
libgifimage.so - GIF图片支持
分析:知乎使用了Fresco作为图片加载框架,支持多种图片格式。
5.3 网络库
网络相关库:
libtnet-3.1.14.so - 腾讯网络库(版本3.1.14)
libquiche.so - QUIC协议支持(Google)
libtquic_jni.so - 腾讯QUIC JNI
分析:知乎使用了腾讯的网络库,并支持QUIC协议以提升网络性能。
5.4 安全与加密
安全相关库:
libsgmain.so - 阿里云安全库(主库)
libsgmainso-5.6.230509.so - 版本5.6.230509
libsgmiddletier.so - 中间层
libsgsecuritybody.so - 安全防护
libsgnocaptcha.so - 无感验证
libsafexEx.so - 安全扩展
libbangcle_crypto_tool.so - 加密工具
libencrypt.so - 加密库
libEncryptorP.so - 加密器
libed25519.so - Ed25519加密算法
分析:知乎使用了阿里云的安全服务,包括:
- 安全防护
- 无感验证
- 数据加密
5.5 其他重要库
存储:
libmmkv.so - MMKV高性能键值存储
libmmkv-core.so - MMKV核心
崩溃监控:
libsentry-android.so - Sentry崩溃监控
libsentry.so - Sentry核心
libxcrash.so - XCrash崩溃收集
libxcrash_dumper.so - 崩溃转储
性能监控:
libapmlitea.so - 性能监控
libapmliteb.so - 性能监控B
libreactperfloggerjni.so - RN性能日志
其他:
libfolly_runtime.so - Facebook Folly运行时
libfabricjni.so - Fabric JNI
libfbjni.so - Facebook JNI
libglog.so - Google日志库
liblogger.so - 日志库
六、WebView与混合开发
6.1 WebView相关
WebView库:
libTTWebViewSdkFlipped.so - 字节跳动WebView SDK
WebView资源:
assets/webview/- WebView相关资源assets/hybrid_offline/- 混合开发离线资源assets/searchlite.html- 搜索轻量页面
6.2 使用场景
WebView主要用于:
- H5页面:部分业务页面使用H5实现
- 混合开发:原生与H5混合的场景
- 搜索:搜索相关功能
七、应用架构特点
7.1 多DEX架构
从classes*.dex文件可以看出,知乎使用了Multidex:
classes.dex- 主DEX(8.8MB)classes2.dex到classes18.dex- 辅助DEX(共18个)- 总大小约150MB+
分析:应用代码量巨大,需要Multidex来突破单个DEX文件的方法数限制。
7.2 资源管理
资源文件统计:
res/layout/- 5540个布局文件res/drawable/- 4747个drawable文件res/anim/- 大量动画文件assets/- 丰富的资源文件
分析:应用UI复杂,资源文件众多,需要精细的资源管理。
7.3 主题适配
从资源文件命名可以看出,知乎支持:
- 日间模式:标准资源文件
- 夜间模式:
-night后缀的资源文件 - 多分辨率适配:
-xhdpi,-xxhdpi,-xxxhdpi等
八、第三方SDK集成
8.1 已识别的SDK
从配置文件和库文件可以看出,知乎集成了以下SDK:
阿里云:
- 移动监控(appmonitor)
- 安全服务(sg系列库)
腾讯:
- 网络库(tnet)
- WebView SDK(TTWebViewSdk)
- 开放平台(com.tencent.open.config.json)
字节跳动:
- 播放器(ttmplayer)
- WebView SDK
其他:
- Sentry(崩溃监控)
- MMKV(存储)
- Fresco(图片加载)
8.2 SDK配置
配置文件示例:
assets/com.tencent.open.config.json- 腾讯开放平台配置assets/cn.shuzilm.config.json- 数数科技配置assets/grs_sdk_*.json- 阿里云GRS配置
九、技术架构总结
9.1 架构特点
- 混合架构:原生 + React Native + WebView
- 多Bundle架构:RN采用多Bundle,按需加载
- 高性能动画:PAG + Lottie双动画方案
- 丰富的原生能力:视频、图片、网络、安全等
- 完善的监控体系:性能监控、崩溃监控
9.2 技术选型分析
| 技术领域 | 选型 | 原因 |
|---|---|---|
| 跨端框架 | React Native | 跨平台开发,热更新能力 |
| 动画 | PAG + Lottie | 高性能 + 复杂动画 |
| 图片加载 | Fresco | 高性能图片加载 |
| 存储 | MMKV | 高性能键值存储 |
| 网络 | 腾讯TNet + QUIC | 高性能网络库 |
| 崩溃监控 | Sentry + XCrash | 完善的错误追踪 |
| 安全 | 阿里云安全服务 | 企业级安全防护 |
9.3 架构优势
- 开发效率:RN跨端开发,一套代码多端运行
- 性能优化:原生能力 + RN优化,性能平衡
- 动态更新:RN Bundle支持热更新
- 用户体验:PAG动画提供流畅的交互体验
- 稳定性:完善的监控和错误处理机制
9.4 潜在挑战
- 包体积:多DEX、多原生库导致APK体积较大
- 维护成本:多技术栈混合,维护成本较高
- 性能平衡:原生与RN的性能平衡需要精细调优
- 版本管理:多Bundle版本管理复杂
十、总结
知乎APP采用了以React Native为核心的混合架构,结合了原生开发、PAG动画、WebView等多种技术。整体架构设计合理,在开发效率、性能、用户体验之间取得了良好的平衡。
核心优势:
- RN跨端开发提升效率
- PAG动画提供流畅体验
- 丰富的原生能力支撑
- 完善的监控体系
改进方向:
- 优化包体积
- 简化技术栈
- 优化多Bundle管理
分析基于知乎APP 10.76.0版本(APKPure)
3万+

被折叠的 条评论
为什么被折叠?



