知乎APP技术架构分析报告

知乎APP技术架构分析报告

目录


一、核心结论

知乎APP采用了混合技术架构,主要使用React Native作为跨端框架,同时结合了原生开发、PAG动画、WebView等多种技术方案。

技术栈概览

  1. React Native - 主要的跨端技术框架,采用多Bundle架构
  2. Kotlin/Java - 原生Android开发语言
  3. PAG动画 - 腾讯PAG动画框架,用于高性能动画渲染
  4. Lottie - 用于复杂动画效果
  5. WebView - 用于H5页面和混合开发
  6. 多原生库集成 - 视频播放、图片处理、网络、安全等

二、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.dexclasses18.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 架构特点

  1. 混合架构:原生 + React Native + WebView
  2. 多Bundle架构:RN采用多Bundle,按需加载
  3. 高性能动画:PAG + Lottie双动画方案
  4. 丰富的原生能力:视频、图片、网络、安全等
  5. 完善的监控体系:性能监控、崩溃监控

9.2 技术选型分析

技术领域选型原因
跨端框架React Native跨平台开发,热更新能力
动画PAG + Lottie高性能 + 复杂动画
图片加载Fresco高性能图片加载
存储MMKV高性能键值存储
网络腾讯TNet + QUIC高性能网络库
崩溃监控Sentry + XCrash完善的错误追踪
安全阿里云安全服务企业级安全防护

9.3 架构优势

  1. 开发效率:RN跨端开发,一套代码多端运行
  2. 性能优化:原生能力 + RN优化,性能平衡
  3. 动态更新:RN Bundle支持热更新
  4. 用户体验:PAG动画提供流畅的交互体验
  5. 稳定性:完善的监控和错误处理机制

9.4 潜在挑战

  1. 包体积:多DEX、多原生库导致APK体积较大
  2. 维护成本:多技术栈混合,维护成本较高
  3. 性能平衡:原生与RN的性能平衡需要精细调优
  4. 版本管理:多Bundle版本管理复杂

十、总结

知乎APP采用了以React Native为核心的混合架构,结合了原生开发、PAG动画、WebView等多种技术。整体架构设计合理,在开发效率、性能、用户体验之间取得了良好的平衡。

核心优势:

  • RN跨端开发提升效率
  • PAG动画提供流畅体验
  • 丰富的原生能力支撑
  • 完善的监控体系

改进方向:

  • 优化包体积
  • 简化技术栈
  • 优化多Bundle管理

分析基于知乎APP 10.76.0版本(APKPure)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值