尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

知乎++架构全景图:Kotlin Multiplatform如何打造跨Android与桌面的知乎客户端

知乎++架构全景图:Kotlin Multiplatform如何打造跨Android与桌面的知乎客户端 知乎架构全景图Kotlin Multiplatform如何打造跨Android与桌面的知乎客户端【免费下载链接】zhihu-plus-plusZhihu | 知乎: Ad-free, low cost, AI powered zhihu android 3rd-party client. 去广告、占用低、AI大模型的新时代知乎安卓端体验项目地址: https://gitcode.com/gh_mirrors/zh/zhihu-plus-plus知乎Zhihu是一款免费、去广告的知乎第三方客户端基于 Kotlin MultiplatformKMP跨平台技术用同一套核心代码同时驱动 Android 应用与 Windows / Linux / macOS 桌面客户端。本文带你快速看懂它的架构全景从共享代码分层、数据库复用到平台入口一次讲透这个轻量化知乎客户端是怎么搭起来的。一、先认识知乎一个不一样的知乎客户端在官方客户端越来越重的今天知乎走的是另一条路去广告去广告、去推广软文、去带货推销、去盐选专栏体积小巧Lite 版 APK 不到 4 MB告别 110 MB 的官方客户端AI 加持Full 版本内置端侧 AI 推理支持基于 LLM embedding 的智能内容过滤本地推荐算法把内容推荐完全放在本地摆脱算法奴役更有趣的细节它甚至内置了知乎经典表情包[惊喜]强势回归 相关资源在 misc/emojis/。这些卖点背后是一套相当现代的多平台工程架构。二、模块全景一个仓库多个应用打开仓库根目录的 settings.gradle.kts你会看到整个项目注册的模块清单——这就是知乎的全家福模块角色一句话说明app Android 主应用Jetpack Compose UI分 lite / full 两个版本desktopApp 桌面应用Compose Desktop产出 Windows / Linux 可执行程序macosApp macOS 原生应用Kotlin/Native 编译arm64 原生体验shared 核心共享层90% 以上的业务逻辑都在这里shared-local-db️ 本地数据库跨平台 Room 数据库封装sentence_embeddings 端侧 AIRust 编写的词元化工具仅 full 版third_party 渲染引擎内置的 Markdown / LaTeX / 代码高亮库这种薄平台壳 厚共享层的结构是 KMP 项目最典型的形态。三、共享层 shared一套代码四处开花shared/ 是整座大厦的地基。它的 shared/build.gradle.kts 里声明了全部编译目标androidLibraryAndroid 库compileSdk 37 / minSdk 27jvmJVM 目标桌面端Windows / Linux共用iosArm64 / iosSimulatorArm64 / macosArm64苹果平台原生目标配套的源码目录则按平台圈层划分shared/src/ ├── commonMain/ ← 所有平台共享数据模型、ViewModel、UI 页面、导航 ├── androidMain/ ← 仅 Android通知、扫码、主题、更新等 ├── jvmMain/ ← 仅桌面 JVM文件、剪贴板、WebView 等 ├── macosMain/ ← 仅 macOS原生窗口、侧栏、工具栏 └── nativeMain/ ← iOS macOS 共享3.1 expect/actualKMP 处理平台差异的官方姿势比如打开外部链接保存图片系统剪贴板这类能力各平台实现方式完全不同。知乎在 PlatformCapabilities.kt 中用expect声明能力契约expect fun rememberSystemUrlOpener(): SystemUrlOpener expect fun rememberImageSaver(): ImageSaver expect fun rememberPlainTextClipboard(): PlainTextClipboard然后在androidMain/jvmMain/macosMain里各自提供actual实现。共享 UI 只面向expect接口编程完全不用关心底层是 Android Intent 还是 JavaFX 窗口 3.2 数据层Room 数据库的跨平台复用本地历史、收藏、屏蔽词都要落库。shared-local-db/ 模块在 shared-local-db/build.gradle.kts 中把Room 2.8.4 同时编译到 Android、JVM 和 Native 三个目标并用 KSP 在各平台自动生成 DAO 实现——Android 上查历史记录、桌面端导出收藏夹走的是同一套 SQL 与数据模型。四、内容渲染把知乎的味道内置进客户端知乎内容 富文本 公式 代码块。知乎直接在 third_party/ 内置了三个 KMP 渲染引擎保证各平台阅读体验完全一致markdown-parser / markdown-rendererCompose 声明式渲染的 Markdown 引擎latex-parser / latex-renderer数学公式渲染字体动态下载见 LatexFontDownloader.ktcodehighlight-parser / codehighlight-render代码块语法高亮渲染引擎之外还有两个 Rust 编写的配套项目值得一提rs-zse-sign/实现 zse96 v2 签名算法可调用 99% 的知乎网页端 APIaigc-vote-server/AIGC 内容投票的服务端组件五、三个平台入口同一个界面5.1 Androidapp 模块Android 端是功能最全的主场。app/ 通过flavorDimensions划分两个构建变体lite轻量版无 ML 功能体积仅约 4 MBfull完整版含 ONNX 端侧推理与智能内容过滤UI 入口在 ZhihuMainAndroidContent.kt内部直接复用 shared 层定义的全部页面。5.2 Windows / LinuxdesktopApp 模块桌面端入口只有短短十几行desktopApp/Main.kt 用 Compose Desktop 的application { Window { ... } }包住DesktopZhihuMain()套上同一个ZhihuTheme主题——这就是跨平台最直观的体现窗口是新的内容全是共享的。5.3 macOSmacosApp 原生运行时macOS 走的是更硬核的路线macosApp/Main.kt 用 Kotlin/Native 直接对接 AppKitNSApplication/NSWindow原生侧栏见 MacosNativeSidebar.kt最终挂载的依然是 shared 层那棵共享 UI 树。六、这套架构给普通用户带来了什么体验一致手机端和桌面端共享同一套页面、主题与数据模型行为不会各玩各的轻量快速共享层不背平台包袱lite 版 APK 才能做到 4 MB 级可持续演进新增一个平台比如 iOS只需补一个source setactual实现业务逻辑几乎零改动对贡献者友好想修 bug 或加功能90% 的工作集中在 shared/src/commonMain/ 一处完成想深入了解 UI 与交互设计约定可参考 docs/ai-ui-design-guide.md 与 docs/notification-center.md。七、小结知乎用一张清晰的 KMP 架构图展示了一份核心逻辑N 个平台外壳的可能性shared承载业务灵魂shared-local-db统一数据地基third_party内置渲染引擎app/desktopApp/macosApp各自穿上平台的外衣。对于想了解 Kotlin Multiplatform 工程实践的同学这个仓库本身就是一份难得的完整样本 【免费下载链接】zhihu-plus-plusZhihu | 知乎: Ad-free, low cost, AI powered zhihu android 3rd-party client. 去广告、占用低、AI大模型的新时代知乎安卓端体验项目地址: https://gitcode.com/gh_mirrors/zh/zhihu-plus-plus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表