Gradle và Dependencies
Gradle là gì?
Phần tiêu đề “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?
Phần tiêu đề “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
Phần tiêu đề “Tasks và Plugins”Tasks
Phần tiêu đề “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
Phần tiêu đề “Plugins”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.ktsplugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose)}3 Phases của Gradle Build
Phần tiêu đề “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ự:
flowchart LR A[Initialization] --> B[Configuration] B --> C[Execution]
style A fill:#e1f5fe style B fill:#fff3e0 style C fill:#e8f5e91. Initialization Phase
Phần tiêu đề “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
rootProject.name = "MyApp"include(":app")include(":core:network")include(":feature:home")2. Configuration Phase
Phần tiêu đề “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
Phần tiêu đề “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
Phần tiêu đề “Configuration 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
Phần tiêu đề “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
Phần tiêu đề “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 representationfun 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)
Phần tiêu đề “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
Phần tiêu đề “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
Phần tiêu đề “Bà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