Bỏ qua để đến nội dung

Gradle và Dependencies

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.

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

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).

Terminal window
# Xem danh sách tasks
./gradlew tasks
# Chạy một task cụ thể
./gradlew assembleDebug

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)
}

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:#e8f5e9

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")

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!

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)
Terminal window
# Xem task graph
./gradlew assembleDebug --dry-run

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.

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
// 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) 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 code
  • processDebugResources - Xử lý resources
  • assembleDebug - Tạo APK debug
  • bundleRelease - 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

Terminal window
# 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 --info

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:

  1. Cấu trúc Build Files - Chi tiết các file build trong project
  2. Version Catalog - Quản lý versions tập trung
  3. Build Variants - Tạo nhiều phiên bản app
  4. Dependencies - Quản lý thư viện và dependencies