Phần 1 - Tìm hiểu hệ thống file gradle trong một ứng dụng Android

Gradle là một hệ thống build mã nguồn mở được sử dụng cho Android từ khi Android Studio được ra mắt. Đây là một công cụ bổ sung nhiều tính năng cụ thể cho một ứng dụng Android như build types, flavors, signing configurations, library projects,... Trong bài viết lần này mình và các bạn sẽ tìm hiểu cơ bản về các file gradle trong một ứng dụng Android. Để dễ hiểu chúng ta hãy tạo một project Android bằng Android Studio, cái này khá đơn giản nên mình không hướng dẫn nữa 😄 Khi khởi tạo xong project, chúng ta sẽ thấy có 3 file .gradle chính: build.gradle, settings.gradleapp/build.gradle Sau đây chúng ta sẽ tìm hiểu về chức năng của từng file trên trong ứng dụng Android.

File settings.gradle

Mở file này chúng ta sẽ thấy

include ':app'

Câu lệnh include trên thể hiện các module mà ứng dụng sẽ sử dụng trong dự án. Ở đây lúc khởi tạo thì project của chúng ta sẽ có một module chính là app. Nếu sau khi bạn thêm một module thì cũng cần khai báo ở file này để có thể sử dụng được cho dự án. Ví dụ:

include ':app', ':permission'

File build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Mặc định Gradle không bao gồm các tính năng của Android. Do đó, Google đã cung cấp một Android plugin cho Gradle để có thể dễ dàng cấu hình một Android project. Khối lệnh trong từ khóa buildscript thể hiện nơi mà Gradle có thể download plugin trên. Như chúng ta thấy, mặc định plugin được download từ jcenter (Bintray JCenter Artifactory repository). Một repository khác mà được hỗ trợ và hay dùng nhất khác là mavenCentral (Maven Repository). Tất cả các plugin từ JCenter đều được sử dụng thông qua CDN với phương thức kết nối HTTPS. Điều này tăng khả năng bảo mật và tốc độ download nhanh hơn. Gradle cho phép chúng ta tạo các task của riêng chúng ta. Mặc định ở trên, khi khởi tạo project, một task clean đã được thêm vào build.gradle. Dòng type: Delete chỉ ra rằng task clean là một loạt task Delete của Gradle. Trong trường hợp trên, clean task sẽ xóa bỏ thư mục build từ thư mục root của project.

File app/build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.0"
    defaultConfig {
        applicationId "tuannt.myapplication"
        minSdkVersion 14
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
    compile 'com.android.support:cardview-v7:26.0.0-alpha1'
    compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
}

File app/build.gradle được sử dụng cho riêng module app, mỗi module sẽ có một file build.gradle riêng. Dòng đầu tiên thể hiện đây là một Android Application module (module chính để chạy project Android), ngoài ra nếu chúng ta sử dụng java module thì sẽ là

apply plugin: 'java'

hoặc android module

apply plugin: 'com.android.library'

Khối lệnh nằm trong android thể hiện các cấu hình cho module app, chi tiết chúng ta sẽ tìm hiểu trong phần 2 nhé 😄 Cuối cùng là khối lệnh nằm trong dependencies, đây là nơi khai báo các thư viện, các module mà chúng ta sẽ sử dụng trong project:

  1. fileTree dependency có nghĩa là tất cả các file .jar nằm trong thư mục libs sẽ được thêm vào compile classpath.
  2. androidTestCompiletestCompile thể hiện các thư viện được sử dụng để test trong project.
  3. compile thể hiện các module, các thư viện (kèm các version) mà chúng ta sẽ sử dụng trong project.

Kết luận

Trên đây là cơ bản về các tệp tin gradle trong Android project và chức năng của chúng. Ở phần 2 chúng ta sẽ tiếp tục tìm hiểu chi tiết hơn về cách cấu hình trong app/build.gradle cho project của chúng ta.

Cảm ơn các bạn đã đọc bài viết. Happy Coding!