Hướng dẫn cơ bản về gradle cho người mới phát triển android

1. Giới thiệu

Mục tiêu của bài viết này là cung cấp cho bạn tổng quan về Gradle trong quá trình phát triển ứng dụng Android. Tôi sẽ lướt qua những điều cơ bản của Gradle và Android Plugin for Gradle. Sau đó, tôi sẽ tới tập lệnh build.gradle mặc định đi kèm với một Project Android mới. Bài viết này sẽ không hướng dẫn bạn làm thế nào để viết script tùy chỉnh cho Gradle hoặc bất cứ thứ gì giống như vậy. Giống với tiêu đề, thì nó thực sự có ý nghĩa dành cho người mới bắt đầu.

2. Những điều cơ bản

Để bắt đầu mọi thứ, chúng ta cần nắm rõ một số điều:

  • Android Studio không biên dịch mã Java & Kotlin của bạn vào tệp APK.
  • Gradle không biên dịch mã Java & Kotlin của bạn vào một tệp tin APK. Vâng, bạn đã đọc dúng điều đó. Gradle không biên dịch một tập tin APK vì Gradle thực sự là một công cụ xây dựng mục đích chung. Nó không giới hạn trong việc xây dựng ứng dụng Android. Trên GitHub Repository của Gradle, nó được mô tả như sau:

... Nó một công cụ xây dựng với trọng tâm xây dựng tự động hóa và hỗ trợ phát triển đa ngôn ngữ. Gradle cung cấp một mô hình linh hoạt có thể hỗ trợ toàn bộ vòng đời phát triển từ biên dịch và đóng gói mã để xuất bản trang web.

Về cơ bản, chính Gradle không thực sự có thể làm được nhiều. Tất cả các tính năng hữu ích của nó đến từ hệ sinh thái plugin phong phú của nó. Nghĩ đến tất cả các thư viện của bên thứ ba mà bạn thêm vào ứng dụng Android của bạn làm plugin. Bạn sử dụng những plugin này để mở rộng chức năng của ứng dụng của bạn, giống như cách Gradle sử dụng plugin để mở rộng chức năng của chính nó. Có rất nhiều plugin kèm theo Gradle cũng như nhiều tính năng khác mà bạn có thể tải xuống. Tuy nhiên, nếu bạn đi qua danh sách các plugin mà đi kèm với Gradle, bạn sẽ nhận ra rằng "Android" sẽ là một thứ hư không chẳng thể tìm thấy trên trang đó.

3. Android Plugin dành cho Gradle

Android Plugin cho Gradle là plugin cho phép Gradle có thể biên dịch mã của bạn viết ra vào tệp APK, sign APK bằng keys của bạn bạn và thậm chí cài đặt APK lên emulator hoặc devices test của bạn. Không có nó, không có cách nào cho Gradle biết làm thế nào với bất kỳ dòng mã của bạn. Đây là những gì tôi muốn nói bởi cả Android Studio và Gradle không có đầu mối để xây dựng dự án Android của bạn, nhưng plugin này là chuỗi ma thuật giữa Android Studio và Gradle.

4. Gradle Scripts

Chúng ta vừa qua một số điểm cơ bản. Tôi sẽ đi qua các tệp bạn nhận được khi bắt đầu một dự án hoàn toàn mới trong Android Studio:

Khi nhìn vào đây, lúc mới đầu chắc các bạn cũng giống tôi đều có 1 câu hỏi tất cả những tập tin ở bên trên kia là cái gì vậy ????

Tất cả các tệp với từ "gradle" được sử dụng để cấu hình Gradle cho các dự án Android của chúng ta. Có nhiều tệp bởi vì chúng đều phục vụ các mục đích khác nhau.

5. Gradle Wrapper

Tệp gradle-wrapper.properties có một nhiệm vụ cơ bản : xác định phiên bản Gradle nào sẽ sử dụng để xây dựng dự án. Sau đó, nó sẽ tự động tải và lưu trữ phiên bản Gradle cho bạn. Nếu bạn đang sử dụng Mac, hãy chạy lệnh dưới đây:ls ~ /.gradle/wrapper/dists/ Bạn sẽ có thể xem tất cả các phiên bản Gradle mà Gradle Wrapper đã tải xuống cho bạn. Hãy lưu ý rằng phiên bản Gradle của bạn khác với phiên bản plugin Android của bạn. Vào thời điểm viết bài, phiên bản hiện tại của Gradle là v4.3. Android Studio vẫn mặc định là phiên bản Gradle v4.1, vì vậy bạn up lên v4.3 nếu bạn thích.

6. settings.gradle

Tệp settings.gradle là nơi bạn thông báo cho Gradle về tất cả các sub project/module mà dự án của bạn có. Điều này được thực hiện thông qua lệnh include. Nếu bạn thêm một module khác vào dự án của bạn, Android Studio sẽ tự động thêm module đó vào tệp tin này.

7. build.gradle

Theo quan điểm của Gradle, dự án của chúng tôi được coi là một dự án đa mục tiêu(multi-project build), nơi bạn có một root project và một hoặc nhiều sub-project. Từ quan điểm phát triển Android, sub-project này được gọi là các module. Đó là lý do tại sao bạn lại nhìn thấy có 2 tệp build.gradle ở ảnh đầu tiên. Một cho root-project của bạn và một cho module ứng dụng đi kèm với dự án của bạn. Hãy bắt đầu với build.gradle trong root-project của bạn.

1. build.gradle của project

  1. Toàn bộ khối buildscript {} này được sử dụng để nói với chính bản thân Gradle những gì nó cần để biên dịch dự án này.
  2. Chúng tôi khai báo Android Plugin for Gradle là một trong những phụ thuộc cho buildscript này. "3.0.0" là phiên bản của plugin được sử dụng.
  3. Chúng tôi khai báo với Gradle để tìm kiếm những thứ chúng ta cần trong repository Mavengoogle ()jcenter ().
  4. Thêm một thuộc tính bổ sung cho dự án Gradle, cho phép nó có thể truy cập được trong suốt dự án Gradle. Nói cách khác, đây là một biến toàn cục kiểu Gradle. Chúng ta có thể thấy giá trị biến này đang được sử dụng để xác định phiên bản của plugin kotlin-gradle được import vào dự án.
  5. Như tên của nó, khối allprojects {} đang được sử dụng để khai báo cho Gradle rằng đối với tất cả các sub-project được biên soạn, sử dụng tập hợp các repository này để giải quyết bất kỳ yêu cầu dependencies nào.

2. build.gradle của module app

  1. Trước tiên, chúng tôi áp dụng plugin Android Application, sau đó chúng tôi áp dụng plugin Android Kotlin và plugin tiện ích mở rộng của nó.
  2. Lý do duy nhất khiến toàn bộ khối android{} này hoạt động là vì chúng tôi yêu cầu Gradle áp dụng plugin Android đã được khai báo trước đó. Tôi chắc rằng bạn đã quen với việc sửa đổi các giá trị bên trong khối này, nhưng bạn đã bao giờ tự hỏi những giá trị có thể mà bạn có thể đặt bên trong là gì? Thật là tốt vì đã có tất cả các tài liệu ở đây
  3. Đây là nơi bạn sẽ thêm tất cả các thư viện của bên thứ ba như là phụ thuộc Gradle. Lưu ý rằng không có khối repositories {} bên trong tệp build.gradle này. Nhưng cũng không cần thiết vì chúng ta đã khai báo nó sử dụng trong khối allprojects {}build.gradle của root-project.
  4. Hãy nhớ biến toàn cục mà chúng ta đã khai báo trong tập tin khai báo trong build.gradle của root-project? Vâng đây nó lại được gọi một lần nữa. Tốt nhất bạn nên áp dụng cùng một kỹ thuật để quản lý phiên bản các thư viện hỗ trợ mà bạn sử dụng để đảm bảo rằng tất cả chúng đều sử dụng cùng một phiên bản.

8. Gradle Tasks

Chúng ta đã đi qua các scripts của Gradle rồi. Giờ còn một điều nữa mà bạn cần phải biết về Gradle nữa đó chính là Tasks Tasks về cơ bản là những điều mà Gradle có thể làm khi build được kích hoạt. Bạn có nhớ tôi có nói là Android Studio không biên dịch mã của bạn không. Đó là vì khi bạn click vào nút play màu xanh hay bạn bấm tổ hợp phím Shift + F10 trên Android Studio là kích hoạt 1 Tasks cụ thể để Gradle thực hiện nhiệm vụ. Ở góc dưới cùng bên phải, nhấp vào nút Gradle Console để mở bảng điều khiển Gradle. Sau đó nhấp vào nút Play để chạy ứng dụng. Một loạt lệnh sẽ xuất hiện, nhưng chúng ta chỉ quan tâm đến một lệnh xuất hiện ở trên cùng: Executing tasks: [:app:assembleDebug] Chúng tôi chỉ nói với Gradle để thực hiện các Task assembleDebug. Chúng ta có thể làm điều tương tự qua dòng lệnh. Nhấp vào tab Terminal ở dưới cùng bên trái và chạy lệnh này: ./gradlew assembleDebug --console plain. Thật tuyệt vời!!! Bạn chỉ cần gõ lệnh để Gradle thực hiện chạy lệnh chính xác giống như nút Play đã làm. Một số điều cần lưu ý:

  1. ./gradlew có nghĩa là sử dụng Gradle Wrapper thay vì Gradle. Bạn nên luôn luôn sử dụng phiên bản Wrapper.
  2. assembleDebug là tên của Task bạn vừa yêu cầu nó chạy. 3.--console plain nói với Gradle để log lại quá trình build ứng dụng giống như cách mà bạn nhìn thấy nó trong Android Studio. Cái này hoàn toàn là tùy chọn. Hãy chạy lệnh cuối cùng: ./gradlew tasks Lệnh này sẽ liệt kê ra tất cả các Task mà Gradle biết hiện tại trong dự án này và nó cung cấp một mô tả ngắn gọn về từng Task. Cool phải không? Bây giờ nhấp vào tab Gradle ở trên cùng bên phải của Android Studio. Haha! Đây nó là giống với ./gradlew tasks. Phần này cũng chỉ liệt kê tất cả các tác vụ có thể mà Gradle có thể chạy cho dự án này. Double click vào assembleDebug ở đây không đúng chính xác điều bạn đã làm ngay bây giờ trên dòng lệnh, và làm điều tương tự như nút play.

Nguồn bài viết : https://journals.apptivitylab.com/beginners-guide-to-gradle-for-android-developers-7972bfdf0668