三件事同時要解:
compileSdk、minSdk、Java 版本、flavor、JUnit 5、Compose 依賴。十幾個模組手寫等於十幾份會漂移的複本。gradle.properties 裡有 keystore 密碼;四份 Firebase 設定檔與一張自簽 CA 憑證也在版本控制裡。這些不是「有人不小心」,而是建置流程本來就沒有給 secrets 一個不在 git 的家。| 選項 | 做法 | 優點 | 代價 |
|---|---|---|---|
| A. 單模組 | 一個 app,靠 package 分層 |
零建置設定 | 昨天已經否決:邊界靠自律、公開範例要手挑、跨產品覆用等於複製 |
B. 多模組 + root 的 subprojects {} |
在 root build script 用 subprojects { plugins.withId("com.android.library") { ... } } 統一設定 |
一個地方管 | 跨專案設定(cross-project configuration)與 configuration cache、project isolation 相衝;邏輯散在 root 腳本,難測試 |
| C. 多模組 + convention plugins | build-logic/ 是一個 included build,定義 xxx.android.library 這類 plugin,每個模組只寫一行 |
設定是型別安全的 Kotlin 程式碼;可以組合(feature = library + compose + hilt);Gradle 官方推薦 | 前期投資約一天;要懂 pluginManagement { includeBuild } 與 version catalog 在 included build 裡的存取方式 |
為什麼選 C 方案而不選 B ?
因為 Gradle 官方建議的做法 convention plugin,是要替補 subprojects {} 一個專案的建置邏輯能直接修改其他專案的邏輯。
secrets 為什麼不能再進 git ?