Cấu Hình Gradle Cơ Bản: Phân Tích settings.gradle và build.gradle trong Dự Án Android

Tệp settings.gradle: Quản Lý Dự Án Toàn Cục

Tệp cấu hình chính tại thư mục gốc quyết định cách Gradle khởi tạo dự án. Cấu trúc điển hình bao gồm:

pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        flatDir {
            dirs 'third_party_libs'
        }
    }
}

rootProject.name = 'UngDungMau'
include ':ThanhToan'
include ':chinh'

Chi Tiết Khối pluginManagement

Khối này định nghĩa kho lưu trữ cho Gradle tìm kiếm plugin. Thứ tự khai báo quan trọng vì Gradle sẽ kiểm tra lần lượt:

pluginManagement {
    repositories {
        // Ưu tiên kho chính thức trước
        gradlePluginPortal()
        google()
        maven { url 'https://internal.repo/maven2' } 
    }
    
    plugins {
        id 'com.android.application' version '8.0.0' apply false
        id 'org.jetbrains.kotlin.jvm' version '1.8.0' apply false
    }
}

Lưu ý: Khối này phải là phần đầu tiên trong tệp settings.gradle. Cấu hình này thay thế cho khối buildscript trong phiên bản Gradle cũ.

Quản Lý Phụ Thuộc Toàn Dự Án

Khối dependencyResolutionManagement kiểm soát nguồn phụ thuộc cho tất cả module:

dependencyResolutionManagement {
    versionCatalogs {
        libs {
            version('coroutines', '1.7.3')
            version('retrofit', '2.9.0')
            
            alias('network-core').to('com.squareup.retrofit2', 'retrofit').versionRef('retrofit')
            alias('coroutines-android').to('org.jetbrains.kotlinx', 'kotlinx-coroutines-android').versionRef('coroutines')
        }
    }
}

Tham số repositoriesMode có hai chế độ hoạt động:

  • RepositoriesMode.PREFER_PROJECT: Ưu tiên kho cục bộ trước
  • RepositoriesMode.FAIL_ON_PROJECT_REPOS: Chỉ sử dụng kho từ settings, bỏ qua cấu hình module

Tệp build.gradle tại Thư Mục Gốc

Tệp này quản lý cấu hình chung cho toàn bộ dự án. Cấu trúc tiêu chuẩn:

// Khai báo biến toàn cục
ext {
    androidCompileSdk = 34
    kotlinCompiler = '1.8.0'
    networkVersion = '2.9.0'
}

// Đăng ký plugin chung
plugins {
    id 'com.android.application' version '8.0.0' apply false
    id 'org.jetbrains.kotlin.android' version kotlinCompiler apply false
}

// Xóa thư mục build
tasks.register('cleanProject', Delete) {
    delete layout.buildDirectory
}

Quy Tắc Triển Khai Plugin

Trong khối plugins:

  • Thuộc tính apply false ngăn plugin tự động kích hoạt
  • Chỉ các plugin được khai báo ở đây mới có sẵn cho module con
  • Phiên bản plugin phải tương thích với Gradle hiện tại

Cấu Hình Module Con

Ví dụ cho module ứng dụng chính:

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
}

android {
    namespace 'com.example.mainapp'
    compileSdk androidCompileSdk

    defaultConfig {
        minSdk 24
        targetSdk androidCompileSdk
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation libs.network.core
    implementation libs.coroutines.android
    testImplementation 'junit:junit:4.13.2'
}

Các biến toàn cục (androidCompileSdk) được kế thừa từ tệp gốc, giúp thống nhất phiên bản giữa các module.

Chiến Lược Kết Hợp Cấu Hình

Hai phương án tối ưu được khuyến nghị:

Phương Án 1: Tập Trung Quản Lý Phụ Thuộc

Toàn bộ cấu hình kho và phiên bản được định nghĩa trong settings.gradle:

// settings.gradle
dependencyResolutionManagement {
    versionCatalogs {
        libs {
            version('hilt', '2.48.1')
            alias('di-core').to('com.google.dagger', 'hilt-android').versionRef('hilt')
        }
    }
}

// build.gradle (gốc)
plugins {
    id 'com.android.application' version '8.0.0' apply false
}

Phương Án 2: Phân Tầng Cấu Hình

settings.gradle chỉ khai báo module cơ bản:

// settings.gradle
include ':core', ':feature-payment', ':feature-auth'

Trong khi build.gradle (gốc) quản lý kho phụ thuộc:

allprojects {
    repositories {
        google()
        mavenCentral()
        maven { url "https://internal.artifactory/libs" }
    }
}

Phương án này phù hợp cho dự án có nhiều module với yêu cầu phụ thuộc khác biệt.

Thẻ: Gradle Android BuildConfiguration DependencyManagement VersionCatalogs

Đăng vào ngày 6 tháng 7 lúc 16:16