Tổng quan về Gradle Build
Gradle là gì?
Gradle là hệ thống build (build system) mà Android sử dụng để biên dịch, đóng gói và quản lý các dự án. Khi bạn nhấn nút “Run” trong Android Studio, Gradle sẽ thực hiện hàng loạt công việc phía sau để tạo ra file APK hoặc AAB có thể cài đặt trên thiết bị.
📝 Lưu ý: Build system là công cụ chuyển đổi source code thành ứng dụng có thể chạy được. Quá trình này bao gồm: phân tích, biên dịch, liên kết và đóng gói ứng dụng.
Tại sao Android sử dụng Gradle?
Gradle cung cấp nhiều ưu điểm quan trọng cho việc phát triển Android:
| Tính năng | Mô tả |
|---|---|
| Quản lý Dependencies | Tự động tải và quản lý các thư viện từ Maven repositories |
| Build Variants | Tạo nhiều phiên bản ứng dụng (debug, release, flavors) từ một codebase |
| Incremental Builds | Chỉ build lại những phần thay đổi, tiết kiệm thời gian |
| Convention over Configuration | Cung cấp cấu hình mặc định hợp lý, giảm thiểu boilerplate |
| Extensibility | Dễ dàng mở rộng thông qua plugins và custom tasks |
Tasks và Plugins
Tasks
Task là đơn vị công việc cơ bản trong Gradle. Mỗi task thực hiện một công việc cụ thể như:
- Biên dịch Kotlin code
- Xử lý resources
- Tạo file APK
- Chạy tests
Các tasks được kết nối với nhau thông qua inputs và outputs, tạo thành một đồ thị có hướng không tuần hoàn (Directed Acyclic Graph - DAG).
# Xem danh sách tasks
./gradlew tasks
# Chạy một task cụ thể
./gradlew assembleDebugPlugins
Plugin đăng ký các tasks và cấu hình cần thiết cho một loại project cụ thể:
| Plugin | Mục đích |
|---|---|
com.android.application | Build Android app (APK/AAB) |
com.android.library | Build Android library (AAR) |
org.jetbrains.kotlin.android | Hỗ trợ Kotlin cho Android |
org.jetbrains.kotlin.plugin.compose | Hỗ trợ Jetpack Compose compiler |
// Khai báo plugins trong build.gradle.kts
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
}3 Phases của Gradle Build
Khi chạy một Gradle build, quá trình diễn ra qua 3 phases tuần tự:
1. Initialization Phase
Gradle xác định những projects và subprojects nào sẽ được build:
- Đọc file
settings.gradle.kts - Xác định root project và các modules
- Thiết lập classpath cho plugins
// settings.gradle.kts
rootProject.name = "MyApp"
include(":app")
include(":core:network")
include(":feature:home")2. Configuration Phase
Gradle đọc và thực thi các build scripts để cấu hình project:
- Áp dụng plugins
- Đăng ký tasks
- Cấu hình dependencies
- Chưa thực hiện bất kỳ build nào
⚠️ Quan trọng: Configuration phase chạy mỗi khi build, kể cả khi chỉ chạy task đơn giản như
./gradlew tasks. Vì vậy, tránh đặt logic nặng trong build scripts!
3. Execution Phase
Gradle thực hiện các tasks theo thứ tự đã xác định:
- Xây dựng task graph từ dependencies
- Chạy các tasks cần thiết
- Bỏ qua tasks up-to-date (inputs chưa thay đổi)
# Xem task graph
./gradlew assembleDebug --dry-runConfiguration DSL
Gradle sử dụng Domain-Specific Language (DSL) để cấu hình builds. DSL cho phép bạn khai báo cái gì cần build thay vì cách build như thế nào.
Kotlin DSL vs Groovy DSL
Android hỗ trợ cả hai ngôn ngữ, nhưng khuyến nghị sử dụng Kotlin DSL vì:
| So sánh | Kotlin DSL (.kts) | Groovy DSL (.gradle) |
|---|---|---|
| Type safety | ✅ Có | ❌ Không |
| IDE support | ✅ Tốt hơn | ⚠️ Hạn chế |
| Auto-complete | ✅ Chính xác | ⚠️ Không đầy đủ |
| Error detection | ✅ Compile-time | ❌ Runtime |
| Syntax | Kotlin | Groovy |
Ví dụ cấu hình Android block
// Kotlin DSL (build.gradle.kts)
android {
namespace = "com.example.app"
compileSdk = 35
defaultConfig {
applicationId = "com.example.app"
minSdk = 24
targetSdk = 35
versionCode = 1
versionName = "1.0"
}
buildTypes {
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
}Phía sau, DSL code tương đương với việc gọi các hàm Kotlin:
// Simplified internal representation
fun Project.android(configure: ApplicationExtension.() -> Unit) { ... }
interface ApplicationExtension {
var namespace: String?
var compileSdk: Int
val defaultConfig: DefaultConfig
fun defaultConfig(configure: DefaultConfig.() -> Unit)
}Android Gradle Plugin (AGP)
Android Gradle Plugin (AGP) là plugin chính mà Google cung cấp để build Android apps. AGP đăng ký tất cả các tasks cần thiết như:
compileDebugKotlin- Biên dịch Kotlin codeprocessDebugResources- Xử lý resourcesassembleDebug- Tạo APK debugbundleRelease- Tạo AAB release
// AGP được khai báo trong libs.versions.toml
[versions]
agp = "8.7.0"
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }💡 Mẹo: Sử dụng AGP Upgrade Assistant trong Android Studio để nâng cấp AGP một cách an toàn:
Tools → AGP Upgrade Assistant
Lệnh Gradle thường dùng
# Sync project (sau khi thay đổi build files)
./gradlew --refresh-dependencies
# Build APK debug
./gradlew assembleDebug
# Build APK release
./gradlew assembleRelease
# Build AAB (Android App Bundle)
./gradlew bundleRelease
# Clean build
./gradlew clean
# Chạy tests
./gradlew test
./gradlew connectedAndroidTest
# Xem dependencies
./gradlew :app:dependencies
# Build với thông tin chi tiết
./gradlew assembleDebug --infoBài viết tiếp theo
Trong các bài viết tiếp theo, chúng ta sẽ đi sâu vào từng khía cạnh của Gradle:
- Cấu trúc Build Files - Chi tiết các file build trong project
- Version Catalog - Quản lý versions tập trung
- Build Variants - Tạo nhiều phiên bản app
- Dependencies - Quản lý thư viện và dependencies