☰
知乎++开发者完整教程:源码构建、双变体打包、CI测试与贡献规范一次讲透
2026/9/26 5:16:22 网站建设 项目流程

知乎++开发者完整教程:源码构建、双变体打包、CI测试与贡献规范一次讲透

【免费下载链接】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++)是一款去广告、低内存占用、支持 AI 大模型能力的知乎安卓第三方客户端。本教程面向想参与开发的新手,一次讲清源码构建步骤、full/lite 双变体打包、CI 自动化测试链路与贡献规范,帮助你在一个晚上完成第一个可安装的 APK,并提交一个符合规范的 PR。

一、项目速览:知乎++是什么、代码放在哪里

知乎++的核心卖点:去广告、去推广软文、屏蔽盐选付费内容,独创本地推荐算法(推荐完全在本地计算,不被算法"投喂"),并内置基于 LLM embedding 的 AI 智能内容过滤、Markdown/LaTeX 渲染与内容创作能力。

项目基于Kotlin Multiplatform(KMP),一套核心代码同时支撑 Android、实验性桌面端与 macOS。在 settings.gradle.kts 中可以看到全部模块编排,主要模块一览:

目录职责
app/Android 应用壳,定义 full/lite 双变体
shared/KMP 跨平台核心:UI、数据、账号、Markdown 渲染
shared-local-db/本地数据库(历史记录、收藏夹等)
desktopApp/实验性桌面端(Windows / Linux,内置 Java 运行时)
macosApp/macOS arm64 原生端
sentence_embeddings/端侧句向量 AI 模型,仅 full 变体
third_party/内置的 markdown / LaTeX / 代码高亮渲染库
aigc-vote-server/Rust 编写的 AIGC 标记投票服务
rs-zse-sign/Rust 实现的 zse96 签名算法
misc/浏览器广告过滤插件、油猴脚本、表情包等周边工具

当前版本号维护在 gradle.properties:versionName=0.30,versionCode=747,构建产物会自动带上这两个值。

二、环境准备与源码构建:从克隆仓库到第一个 APK

环境要求(3 件套)

  1. JDK 17(CI 使用 Zulu 发行版,本地保持一致最稳妥)
  2. Android SDK:项目compileSdk=37、minSdk=27(Android 9+)、targetSdk=35
  3. Android Studio:直接打开仓库根目录即可识别 Gradle 工程

构建加速已开箱即用:gradle.properties 中默认开启了 4G 堆内存、并行构建、构建缓存与 KSP 增量处理,首次构建稍慢,二次构建会明显变快。

一键克隆仓库

git clone https://gitcode.com/gh_mirrors/zh/zhihu-plus-plus

新手最常用的 5 条 Gradle 命令

命令用途
./gradlew ktlintCheck代码风格检查(CI 门禁同款)
./gradlew assembleLiteDebug打包 lite 变体 debug APK
./gradlew assembleFullDebug打包 full 变体 debug APK
./gradlew :shared:jvmTest :app:testLiteDebugUnitTest运行单元测试(与 CI 完全一致)
./gradlew :desktopApp:packageReleaseDistributionForCurrentOS打包当前系统的桌面版

lite debug APK 产出在app/build/outputs/apk/lite/debug/app-lite-debug.apk,可直接安装到手机。另外,debug 与 release 构建都会把当前 Git commit 写入GIT_HASH常量(见 app/build.gradle.kts),方便排查问题时确认"我跑的是哪份代码"。

三、双变体打包:full 与 lite 怎么选

知乎++通过 GradleproductFlavors实现双变体打包,这是 app/build.gradle.kts 里的核心配置,两者差异如下:

维度lite(默认变体)full
包体积小于 4 MB更大(内置 ONNX 推理框架与模型)
AI 智能过滤不支持基于 LLM embedding 的向量相似度屏蔽回答
applicationIdcom.github.zly2006.zhplus.litecom.github.zly2006.zhplus
依赖差异—额外依赖 sentence_embeddings/ 与 HanLP

配置上有两个值得注意的细节:

  • 每个变体都会注入IS_LITE布尔编译常量,代码里靠它区分行为,而不是靠判断包名;
  • release 打包时,只有 lite 变体启用 R8 混淆与资源缩减(isMinifyEnabled按变体名判断),full 变体因包含原生模型文件,关闭混淆以避免裁剪出错。

想产出一个可发布的 release 包,本地构建需要配置签名环境变量(signingKey为 Base64 编码的 jks、keyStorePassword、keyAlias、keyPassword),然后执行:

./gradlew assembleLiteRelease

📦 官方对两个变体的定位见 README.md:full 主要承载端侧 AI 技术尝试,Lite 更小更快,按需选择。

四、CI 测试流水线:PR 提交后自动执行了哪些检查

提交 PR 后,.github/workflows/pr.yml 定义的检查流水线会自动运行,共 5 个任务:

Job执行内容作用
ktlint./gradlew ktlintCheck(JDK 17)代码风格门禁,不通过直接失败
build_pr./gradlew assembleLiteDebug,按需追加测试 APK 构建验证编译,并产出 debug APK 供下载
unit-tests:shared:jvmTest+:app:testLiteDebugUnitTest(JDK 23)跨平台核心逻辑单元测试
desktop-jar:desktopApp:packageReleaseDistributionForCurrentOS验证桌面端 release 打包链路
mock-instrumented-shardsAPI 36 Pixel 7 模拟器,5 分片并行基于Mock 数据的 UI 插桩测试

三个设计上很聪明的点,值得学习:

  1. 智能触发:流水线会先比对 PR 的 diff,只有改动了app/、shared/、构建配置等路径时才触发插桩测试(pr.yml),文档类 PR 不用白等模拟器。
  2. 分片提速:插桩测试由 .github/scripts/run-instrumented-shard.sh 拆成 5 个分片并行跑在 5 台模拟器上,并以mock数据模式执行(不依赖真实账号),失败时自动抓取 logcat 诊断日志。
  3. 汇总门禁:最后一个 job android-instrument-tests 只校验各 job 结果——未触发插桩测试时要求状态为skipped,防止"该跑没跑"被误判为通过。

除此之外:

  • 非 master 分支的每次 push 都会触发 Build Check,主干之外的代码也不会"裸奔";
  • 版本发布时,.github/release.yml 按标签把 changelog 自动归类为重大变化 / 🚀 新功能 / 🐛 Bug 修复三节。

本地测试策略建议

按项目沉淀的经验(CLAUDE.md):本地不要默认跑完整 instrumented test(全量留给 CI),只做构建、格式化和针对当前失败点的定向用例,模拟器反馈更快;回归修复必须先"红到绿"——先在基线复现失败,修复后再确认变绿。

五、贡献规范:提交 PR 前必须知道的 5 件事

  1. PR 标题与正文默认使用中文,这是项目约定,模板结构见 .github/PULL_REQUEST_TEMPLATE.md。
  2. 如实勾选 AI 使用声明:模板要求声明代码是否由 AI 编写/改写;若使用了 AI,必须附上实际运行产出的测试截图或录屏,设计图或旧截图不算数,否则不进入 review。
  3. 报 bug 用对模板:仓库提供 bug 反馈、功能建议 与提问三类 issue 模板;bug 报告务必写清知乎++版本号和稳定复现步骤,缺版本的 issue 会被直接关闭。
  4. feat 与 fix 按产品变化判定:新增用户可见的选项、入口或行为属于feat,只有既有承诺行为发生回归才属于fix——不要因为是"修 bug 改出来的"就把新功能归成修复。
  5. 遵守社区准则:项目采用 CODE_OF_CONDUCT.md(Contributor Covenant),营造无骚扰、包容的贡献环境。

六、延伸阅读:文档与周边工具

动手之前翻一翻这些目录,能少走很多弯路:

  • docs/:通知中心设计、Markdown 渲染性能报告、AI UI 设计指南
  • reports/:instrumented 测试失败的逐文件根因分析报告,排查 CI 失败的范本
  • misc/chrome-zhihu-ad-filter/:配套的浏览器广告过滤插件,含测试用例
  • aigc-vote-server/AGENTS.md:投票服务的运维与数据迁移注意事项

🚀 上手路线推荐:先git clone→./gradlew assembleLiteDebug装到手机跑一遍 → 读 README.md 的路线图 → 挑一个good first issue开始你的第一个 PR。祝你贡献顺利!

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询