Appearance
构建与发布工程
一句话定位
从源码到产物、再到自动上线的全链路判断力:先打通各平台「从代码到安装包」的构建链(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)。
- 一句话答:Kotlin 编译器跑在独立的 Compile Daemon 里,它只从 Gradle Daemon 继承
注:Flutter 的 JIT/AOT 编译模式本属于“产物”问题域,已并入
07-performance-testing-debug(与 10-瘦身页同域),不在本模块内。
概念地图:源码 → 产物 → 自动发布
子主题清单
- Gradle 构建生命周期与 AGP 任务链:从配置到产物 — Gradle 三阶段生命周期、AGP 任务链、Configuration/Build Cache(主线深写)
- iOS 构建体系与 CocoaPods/SwiftPM 依赖管理 — Xcode 构建体系与 CocoaPods/SwiftPM(对照浅写,但已明确当前仓库的 iOS/Fastlane 边界)
- Webpack 工作流与 Vite 对比:开发期打包哲学的分裂 — Webpack 工作流与 Vite 对比(对照浅写)
- CI/CD 流水线与 Fastlane 自动化分发 — CI/CD 流水线与 Fastlane 自动化分发(工程必备)
- Kotlin 编译守护进程、jvmargs 继承与 K2 — Kotlin Compile Daemon 只继承 3 个 JVM 参数、
kotlin.daemon.jvmargs调优、K2 编译器(主线深写)
推荐复习顺序
- Gradle 生命周期(Android 构建底座)
- CI/CD 流水线(把构建产物串起来自动发布)
- 再补 iOS 构建 与 Web 打包 的对照视角
对应 labs 入口
当前仓库里与本模块直接对应、且已可阅读/运行的最小样板有:
gradle-lifecycle-hook(未成文,待补)—— 当前仅在 Gradle 构建生命周期与 AGP 任务链:从配置到产物 以内嵌脚本讲解生命周期回调- flutter-host-fastlane-boundary-demo —— 复用现有 Flutter host,演示 Fastlane 如何统一调 Android / iOS 构建胶水,并诚实声明 iOS 发布边界
复习检查题
Gradle 三阶段中,任务真正执行发生在哪一阶段?配置阶段的产出是什么?
答:Execution 阶段执行任务;Configuration 阶段产出任务执行图(Task Graph),这也是 AGP 注册任务、按依赖排序的时机。
CI 里 Fastlane 主要解决哪一类问题?
答:把签名、打包、上传、TestFlight/分发等胶水步骤固化为可重复脚本,消除“本地能出包、CI 出不了”的环境差异。
备注
本模块与 07-performance-testing-debug 的 Flutter 产物瘦身/拆包、JIT/AOT 编译互为上下游:构建链负责“产出”,瘦身与编译模式负责“决定产物的形态与体积”。三者在复习时可互相引用。