07/09/2018, 16:01

Android từ cơ bản cho đến nâng cao - Android Gradle (P1)

Gradle là gì? Sao lại xử dụng Gradle trong Android? Sử dụng Gradle như thế nào? Đó là một trong rất nhiều câu hỏi mà các Android developer mới làm quen thường hỏi. Vì vậy mình sẽ giới thiệu cho các bạn về Gradle và cách sử dụng Gradle hiệu quả khi lập trình với Android. OK vì sao Google lại ...

Gradle là gì? Sao lại xử dụng Gradle trong Android? Sử dụng Gradle như thế nào? Đó là một trong rất nhiều câu hỏi mà các Android developer mới làm quen thường hỏi. Vì vậy mình sẽ giới thiệu cho các bạn về Gradle và cách sử dụng Gradle hiệu quả khi lập trình với Android.
alt text

OK vì sao Google lại chọn Gradle nhỉ? Và vì sao lại sử dụng Gradle?

Đi về thời kỳ xa xưa tý nhé, lúc xưa khi chúng ta xây dựng một ứng dụng hay phần mềm thì đơn giản chỉ là compiling và packing source code thôi đúng không? Nhưng hiện hay, nhiều khi chúng ta còn phải làm nhiều thứ hơn thế như tự động chạy test sau khi build, fetch code resources từ trên mạng về, generate documentation, tạo ra nhiều bản build khác nhau (develop, release v.v.v), sau đó thì tự động publish app lên store chẳng hạn, ôi zời tùm lum thứ phải làm ấy chứ. Thế nên công việc build một app bây giờ có khi có thể nói là xây dựng phần mềm cũng nên :)))

Quay về ý chính thôi, giả sử hãy nghĩ Gradle như một shop bán quần áo chứa tất cả các loại áo quần bạn muốn mua và nó có thể giúp bạn kết hợp nhiều loại quần áo với nhau để cho ra một bộ đồ đầy thời thượng.

Ví dụ Gradle có thể giúp bạn setup CI front end products như Jenkins này. Và trong thời buổi này, cái nào mà không automation thì chết ngay và vì thế hãy biến những công việc nhàm chán hằng ngày của bạn trở nên tự động hóa. Và Google chọn Gradle làm build system cho Android Studio. Thực ra thì Android Studio nó ủy thác toàn bộ quá trình build app cho Gradle luôn. Như ông chủ và cô hầu gái vậy đó, khi bấm nút run phát là ngồi rung đùi chở cô hầu gái nó làm việc ahihi

Gradle đã giải quyết rất nhiều vấn đề cho Android developers. Làm sao để tự động hóa quá trình build và test app để đạt được năng suất cao? Làm sao để quản lý được các dependencies và các version của ứng dụng để cho phép developers có thể build được tới cả trăm version của ứng dụng chỉ với một cái click đơn giản?

Hãy cùng tìm hiểu Gradle nhé!

Intro to Tasks

alt text
Sơ lược vậy đủ rồi, giờ chúng ta đi vào tìm hiểu Task trong Gradle nhé, nó chính là trái tim của Gradle đấy.
Một Task trong Gradle đơn giản thì là một đơn vị công việc mà Gradle có thể hiểu và chạy được nó và phần core của Task chính là Action.

Giả sử chúng ta có thể mô tả một task compile một vài Java sources hoặc copy một số file từ thư mục này sang thư mục khác, hay đơn giản chỉ là in ra dòng chữ "Hello Gradle". Một task có thể làm những việc độc lập như in ra dòng chữ "XXX" hoặc có thể chạy tạo các dependencies với những Task khác. Gradle sẽ đảm bảo tất cả dependencies sẽ được chạy.

Một task còn có thể định nghĩa inputs và outputs, như một java method, ngoài ra nó còn có thể config để đọc và ghi file nữa.
Chúng ta sẽ cùng tìm hiểu tất cả các features đó sau nhé, còn bây giờ thì thử setup Gradle và chạy chơi xem sao nhá.

Command Line Gradle

OK, lý thuyết vậy thì tạm ổn rồi nhỉ? Giờ thì bẩn tay nào!
Nhiều bạn sẽ hỏi là install Gradle như thế nào? Thực ra cũng dễ thôi cơ mà nhanh nhất là các bạn follow theo hướng dẫn ở page này https://gradle.org/install ahihi quá dễ đúng không?
alt text
Gradle Wrapper : sẽ được generate khi bạn chạy lệnh gradle wrapper
Hãy nhìn vào một bản Gradle Wrapper mình tạo sẵn và các bạn có thể download ở đây https://github.com/khoatd92/GradleWrapper . Trong đó chỉ chứa các shell script, chúng ta có shell script cho Mac (/gradle/wrapper), cho Linux (gradle) và cho Windows (gradle.bat), ngoài ra có một file jar nhỏ.
Bên trong folder, bạn chỉ việc gọi gradle bằng command line thì nó sẽ tự động check và cài đặt Gradle cho bạn luôn, khỏi cần follow hướng dẫn trên
alt text
Nếu đã cài đặt gradle và đã generate Gradle Wrapper một lần rồi thì nó hiển thị như thế này
alt text
Còn nếu không thì nó sẽ tự động download và cài đặt Gradle cho bạn, sau đó nó sẽ generate ra Gradle Wrapper giống như trên

ahihi quá dễ đúng không?

Tiếp đễ hãy thử chạy lệnh ./gradlew tasks
bạn sẽ thấy rất nhiều tasks đã được định nghĩa sẵn đúng không?
alt text

Gradle Daemon

Thông thường Gradle sẽ tốn kha khá thời gian cho việc start up và chúng ta có thể giảm thiểu thời gian đó bằng cách sử dụng Gradle Daemon - là một quá trình chạy background giúp chúng ta build nhanh hơn (cơ mà vì sao thì phải tìm hiểu ở các phần tiếp theo nhé). Đối với Gradle version < 3.0 thì mặc định thì Android Studio sẽ sử dụng Gradle Daemon nhưng nếu sử dụng command line thì chúng ta phải tự bật nó lên. Kể tử phiên bản 3.0 thì Gradle Daemon luôn được bật. Lời khuyên là hãy luôn luôn sử dúng nó nếu có thể vì nó rất tốt cho performance. Còn tìm hiểu sâu hơn thì để sau nhá.

Gradle build script

OK tiếp theo các bạn nhìn dưới đây nhé, đây là một ví dụ đơn giản cho chúng ta thấy Gradle build script trông như thế nào
alt text
Nhìn vào rất dễ hiểu đúng không? Cú pháp JSON nè, và đoạn dưới là chúng ta đang định nghĩa một task để in ra dòng chữ "Hello World" đó. Cơ mà vì sao cú pháp lại y như Java là thế lào? :)) Rút cục là code kiểu json, xml hay kiểu Java đây? Well, câu trả lời đơn giản là Gradle scriptes được viết bằng một ngôn ngữ đặc biệt cung cấp bởi Gradle (Kịch tà kiếm phổ? ahihi) .

Thực ra Gradle nó sử dụng ngôn ngữ Groovy, có nhiều cú pháp giúp ta xây dựng các build scripts nhìn giống với ngôn ngữ tự nhiên hơn là Java. OK cơ bản là vậy, mong giúp các bạn có cái nhìn tổng quan về Gradle. Phần tiếp theo chúng ta sẽ đi vào tìm hiểu Groovy trong Gradle build nha. Bài viết dựa theo kiến thức research nên mong các bạn góp ý để bài viết được hoàn chỉnh hơn. Xin cảm ơn!

0