# Introduction - Gradle 是開發中不可或缺的工具,幾乎所有專案都需要使用。 - 理解 Gradle 可幫助解決許多錯誤和問題。 - 這是一個針對初學者的 Gradle Crash Course,專注於 Android 開發中必須知道的內容。 # Gradle in Android Studio - 新專案會自動生成包含 Gradle 文件的結構。 - Gradle 用來管理專案中的任務,例如編譯、打包、安裝及部署應用。 - 主要負責下載依賴、編譯代碼、打包 APK 並安裝至裝置。 - Gradle 依賴於其他工具,如 ADB,來完成安裝和運行應用。 - 不僅限於 Android,也可用於其他類型的專案。 # The Gradle Wrapper  - Gradle Wrapper 是命令列工具,提供執行 Gradle 任務的功能。 - 通過 `gradlew` 命令列出 Gradle 任務,並執行必要的步驟來構建和安裝應用。 - Gradle 會依照任務之間的依賴順序執行,並能並行執行不相依的任務。 # build.gradle.kts (project) - 這是專案級的 Gradle 文件,適用於整個專案的配置。 - 用來管理插件、依賴和全專案級別的設定。 - 其中包含插件配置,這些插件負責處理特定的構建邏輯,例如 Android 應用的構建。 # Gradle Plugins - 插件是 Gradle 中用來封裝特定構建邏輯的 Kotlin 類。 - 插件可重用,並可應用於多個模組。 - 需要將插件配置添加到 `build.gradle` 文件中,並通過 `apply` 函數使用。 # build.gradle.kts (app) - 模組級的 Gradle 文件,用來設定此應用模組的特定配置。 - 包含應用的 namespace、編譯 SDK 版本、最小 SDK 和目標 SDK 等。 - 設定應用 ID、版本碼和版本名稱等 Google Play 所需的屬性。 - 配置編譯選項,包含 Java 和 Kotlin 的編譯選項。 # Version Catalogs ### 概念介紹 - **版本目錄(Version Catalog)** 是用來管理和集中控制專案內的庫版本的工具。 - 可以在 `libs.versions.toml` 檔案中指定所有庫的版本和相關配置,這樣可以在專案中輕鬆更新和重用版本。 ### 實作方法 - **libs.versions.toml** 是一個版本配置檔,其中定義了不同庫的版本和名稱。 - 範例: ```toml [versions] junit = "5.7.1" [libraries] junit = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" } ``` - **Gradle 插件** 也能在版本目錄中配置,例如 `com.android.application` 或 `kotlin` 插件,這樣可以集中管理所有版本。 ### 工作原理 - 在應用的 `build.gradle` 檔案中,使用 `implementation(libs.junit)` 來引入指定的庫版本。 - 這些配置會從版本目錄中取得版本資訊,避免了在專案中多次重複更新版本號碼。 --- # Gradle Modules ### 概念介紹 - **模組(Module)** 是一個可重用的程式碼單位,通常被稱為「庫」。 - 每個模組都有自己的 `build.gradle` 檔案,定義其依賴和構建配置。 ### 模組類型 - **Android Library 模組**:用於需要 Android SDK 功能的模組,如 `Context`、`Activity` 等。 - **Kotlin/Java Library 模組**:純邏輯模組,不依賴於 Android SDK。 ### 如何建立與使用 - 在 Android Studio 中,可以通過右鍵點擊專案並選擇「Create New Module」來創建新的模組。 - 當創建一個新模組後,Gradle 會自動同步專案以更新依賴。 ### 模組之間的關聯 - 若要在應用模組中使用其他模組,需在應用的 `build.gradle` 檔案中添加: ```gradle implementation project(":streaming") ``` - 這樣可以讓應用模組引用並使用 `streaming` 模組中的程式碼和功能。 # Build Types ### 概念介紹 - **構建類型(Build Type)** 是用來定義不同版本的應用程式配置,如 `debug` 和 `release`。 - 每個構建類型可以有不同的設定,如 `minifyEnabled`、`proguardFiles` 等。 ### 常見配置 - **Debug**:用於開發階段,通常包含更多的日誌和調試資訊。 - **Release**:用於發佈版本,會啟用混淆、縮減等優化來保護應用程式並提高性能。 ### 如何配置 - 可以在應用的 `build.gradle` 檔案中設定: ```gradle buildTypes { debug { debuggable true applicationIdSuffix ".debug" } release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } ``` - **`proguard-rules.pro`** 文件用於配置 ProGuard 的混淆規則,確保應用的安全性和大小優化。 # Build Config - Build config 字段允許定義針對不同建置的設定,例如 API 網址。 - 你可以為每個建置類型定義不同的 base URL(例如,`uat` 用於測試和 `live` 用於發佈)。 - Gradle 會生成一個 `BuildConfig` 類,其中包含這些字段,可在應用程式的代碼中使用。 - Gradle 確保根據建置變體應用正確的值,無需在代碼中進行手動檢查。 # Product Flavors - Product flavors 定義應用程式的不同版本,例如免費版和付費版。 - 你可以為每個 flavor 設定不同的配置,例如設置不同的 `applicationIdSuffix` 或 `buildConfigFields`。 - Product flavors 可以有不同的 flavor dimensions(例如,`paid status` 或 `style`)。 - 你可以將 product flavors 與 build types 組合來創建多個建置變體(例如,`free green debug` 或 `paid red release`)。 - Gradle 管理這些組合,並在建置應用程式時提供正確的變體。 # Source Sets - Source sets 是 Gradle 查找代碼和資源的目錄。 - 每個 source set 用於將代碼和資源分組,以針對不同的建置變體或測試類型。 - 預設的 source sets 包括 `main`、`test` 和 `androidTest`。 - Gradle 允許為特定的 product flavors 或 build types 創建自訂的 source sets(例如,`free`、`paid`、`debug`)。 - 這些自訂的 source sets 包含與對應變體相關的代碼或資源(例如,為付費用戶設計的 `paidText` 類)。 - Gradle 根據選定的建置變體合併來自相應 source sets 的代碼。 # Terminology - Gradle:一種強大的構建工具,用於自動執行軟體構建過程中的任務。 - Gradle Kotlin DSL:Gradle 的 Kotlin 配置語法,提供更好的型別安全與開發體驗。 - Gradle Groovy DSL:Gradle 的 Groovy 配置語法,早期版本的主要語法方式。 - Gradle Wrapper:一個用於確保項目使用正確版本 Gradle 的腳本。 - Plugin:Gradle 的擴展模組,用於增加或修改構建邏輯。 - build.gradle.kts:以 Kotlin DSL 編寫的 Gradle 配置文件,用於定義構建邏輯。 - settings.gradle.kts:用於定義多模組項目的設定文件。 - Dependencies:應用程式需要的外部庫或模組,用於添加功能。 - Tasks:Gradle 中的基本執行單元,完成特定的構建步驟。 - Linting:靜態代碼分析過程,用於檢查代碼規範與潛在問題。 - Compile SDK:應用程式編譯時使用的 Android API 級別。 - Min SDK:應用程式支持的最低 Android API 級別。 - Target SDK:應用程式設計用於運行的目標 Android API 級別。 - Build Types:不同的構建類型,如 Debug 和 Release。 - Variants:不同配置的構建版本,根據 Build Types 和 Flavors 生成。 - Flavors:用於創建應用不同變體的自定義配置。 - Proguard:用於壓縮、優化和混淆 Java 與 Kotlin 代碼的工具。 - ADB(Android Debug Bridge):一個與 Android 設備通信的命令行工具。 - Dependencies Configuration:定義依賴項的作用範圍與類型的 Gradle 配置。 - JVM Target:指定 Kotlin 編譯後的目標 Java 虛擬機版本。 - **Version Catalog**: 一種管理依賴版本的集中化方式,允許在一個位置定義版本號以便於更新和重用。 - **Gradle**: 一種構建自動化工具,用於配置和管理Android項目構建過程。 - **Dependencies Block**: 定義專案中需要引用的外部或內部庫的區塊。 - **Library**: 提供額外功能的模組,可以是Android Library或Kotlin/Java Library。 - **Module**: 專案中的獨立代碼容器,可以作為Library或應用程式模組存在。 - **Gradle File**: 包含模組配置的腳本文件,通常為`build.gradle`或`build.gradle.kts`。 - **Gradle Plugin**: 用於擴展Gradle功能的模組,例如Android插件。 - **Application Module**: 包含主應用代碼的模組,通常是專案的核心部分。 - **Implementation**: 在依賴中指定一個庫或模組的Gradle配置語句。 - **Remote Repository**: 提供庫和插件的遠程服務器,例如Maven Central或Google Repository。 - **Local Module Dependency**: 從專案內部添加模組作為依賴的方式。 - **Settings.gradle.kts**: 定義專案包含的模組及其配置的文件。 - **Maven Central**: 常見的Java與Kotlin庫的公共存儲庫。 - **Minimum SDK Version**: 定義應用或模組所支持的最低Android系統版本。 - **Multi-Module Architecture**: 將專案劃分為多個模組以提升代碼重用性和可維護性的設計模式。 - **Gradle Synchronization**: 更新專案的構建設定以反映最近的變更的過程。 - **Isolated Container**: 用於封裝獨立功能或邏輯的模組。 - **Indexing**: 在IDE中分析代碼結構以提供自動完成和其他開發者工具的過程。 - **Build Logic**: 定義構建過程中的配置與邏輯,例如依賴管理和任務腳本。 - **Gradle Include Function**: 在`settings.gradle.kts`中用於將模組添加到專案的函數。 - **Build Type**:定義應用程式的開發階段,例如 `debug` 和 `release`。 - **Minify Enabled**:設定是否啟用代碼壓縮與混淆,通常 `release` 啟用,`debug` 停用。 - **R8**:用於壓縮和混淆代碼的工具,增強應用安全性和減少 APK 大小。 - **Obfuscation**:代碼混淆過程,使代碼難以閱讀,增加逆向工程難度。 - **Build Variant**:Build Type 與 Product Flavor 的組合,例如 `debug-free`。 - **Build Config Field**:允許為每個 Build Type 或 Product Flavor 定義變數,例如 `baseUrl`。 - **Product Flavor**:用於區分應用不同版本,例如 `free` 和 `paid`。 - **Flavor Dimension**:將 Product Flavor 分組的概念,例如 `paidStatus` 或 `style`。 - **Application ID Suffix**:用於區分 Product Flavor 的應用程式 ID 後綴,例如 `.free`。 - **Source Set**:每個 Build Variant 的代碼和資源目錄,例如 `main`、`debug` 或 `free`。 - **Android Test Source Set**:包含需在 Android 裝置上運行的測試代碼。 - **Unit Test Source Set**:包含不需實際裝置即可運行的測試代碼。 - **UAT**:用戶驗收測試(User Acceptance Testing)的 API 或伺服器環境。 - **White Label**:品牌定製應用,用於不同客戶或公司的定製版本。 - **Debug UI**:僅在 Debug Build 中顯示的測試用戶介面。 - **Compose**:Jetpack Compose,Android 現代化的 UI 工具。 - **Gradle Synchronization**:同步 Gradle 設定以應用更改的過程。 - **APK**:Android 安裝包文件,包含應用程式的所有資源與代碼。 - **Rebuild Project**:重新構建項目,清除舊的構建輸出以解決構建問題。 - **Merge Source Set**:將特定 Source Set 的代碼合併到主應用程式的過程,例如 `main` 與 `debug`。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up