Skip to content

构建与发布工程 ​

一句话定位 ​

从源码到产物、再到自动上线的全链路判断力:先打通各平台「从代码到安装包」的构建链(Android / iOS / Web),再接入自动化流水线与持续交付。

读完后,应该能解释“为什么改一行依赖要重配全工程”、“为什么 iOS 换台机器就编不过”、“一条 CI 流水线从提交到上线的每个环节在做什么”。

模块目标 ​

把“会跑构建命令”升级为“能理解构建链底层、能定位构建问题、能设计发布流程”的工程判断力。

本模块要回答的问题 ​

  • 为什么改一行 build.gradle.kts 后增量构建也常变慢?
    • 一句话答:Configuration 阶段会重新执行全部 build script,改动触发配置失效;用 Configuration Cache 可缓存配置结果(详见 01)。
  • iOS 构建为什么“换台机器就编译不过”?CocoaPods 和 SwiftPM 怎么选?
    • 一句话答:iOS 构建强依赖 Xcode 工程配置、签名与本地缓存,Podfile.lock 锁版本但环境不锁;SwiftPM 是苹果官方方向、与 Xcode 原生集成(详见 02)。
  • Webpack 和 Vite 的核心差异是什么?
    • 一句话答:Webpack 以静态分析打包一切、插件体系成熟但冷启动慢;Vite 开发期用原生 ESM 免打包、生产期用 Rollup,冷启动快(详见 03)。
  • 一条 CI 流水线从提交到上线的关键环节有哪些?
    • 一句话答:触发 → 检查 → 构建 → 测试 → 签名打包 → 分发/发布,Fastlane 负责把签名、上传、TestFlight 等胶水步骤自动化(详见 04)。
  • 为什么我在 org.gradle.jvmargs 里配的 GC 参数对 Kotlin 编译没生效?
    • 一句话答:Kotlin 编译器跑在独立的 Compile Daemon 里,它只从 Gradle Daemon 继承 -Xmx / -XX:MaxMetaspaceSize / -XX:ReservedCodeCacheSize 三个值,GC 等其余参数不继承;调 Kotlin 编译器要写 kotlin.daemon.jvmargs(详见 05)。

注:Flutter 的 JIT/AOT 编译模式本属于“产物”问题域,已并入 07-performance-testing-debug(与 10-瘦身页同域),不在本模块内。

概念地图:源码 → 产物 → 自动发布 ​

子主题清单 ​

推荐复习顺序 ​

  1. Gradle 生命周期(Android 构建底座)
  2. CI/CD 流水线(把构建产物串起来自动发布)
  3. 再补 iOS 构建 与 Web 打包 的对照视角

对应 labs 入口 ​

当前仓库里与本模块直接对应、且已可阅读/运行的最小样板有:

复习检查题 ​

  1. Gradle 三阶段中,任务真正执行发生在哪一阶段?配置阶段的产出是什么?

    答:Execution 阶段执行任务;Configuration 阶段产出任务执行图(Task Graph),这也是 AGP 注册任务、按依赖排序的时机。

  2. CI 里 Fastlane 主要解决哪一类问题?

    答:把签名、打包、上传、TestFlight/分发等胶水步骤固化为可重复脚本,消除“本地能出包、CI 出不了”的环境差异。

备注 ​

本模块与 07-performance-testing-debug 的 Flutter 产物瘦身/拆包、JIT/AOT 编译互为上下游:构建链负责“产出”,瘦身与编译模式负责“决定产物的形态与体积”。三者在复习时可互相引用。

站点构建时间:2026/8/24 23:43:17