Gradle trong Android Studio là gì?


1313

Gradle hơi khó hiểu với tôi, và đối với bất kỳ nhà phát triển Android mới nào. Bất cứ ai cũng có thể giải thích Gradle trong Android Studio là gì và mục đích của nó là gì? Tại sao nó được bao gồm trong Android Studio?



14
Để trả lời lý do tại sao bạn muốn có một công cụ xây dựng như Gradle, hãy xem bài đăng này từ Jeff Atwood.
Adam S

829
Khi ai đó hỏi một câu hỏi ở đây rằng có, có rất nhiều liên kết trong Google về nó, điều họ thực sự hỏi là ai đó trả lời câu hỏi bằng ngôn ngữ đơn giản và đặt nó trong ngữ cảnh , chẳng hạn như tại sao chúng ta cần nó , ai sẽ sử dụng nó nhiều nhất, chúng ta có cần biết nó để xây dựng các ứng dụng Android trong Android Studio không, v.v. Bởi vì hầu hết các liên kết bạn tìm thấy trên Google đều ở dạng "tech-speak" và đối với người mới bắt đầu thì điều này thật khó hiểu.
Azurespot

3
@NoniA. Chính xác là suy nghĩ của tôi. Tôi vẫn còn một chút bối rối, liệu gradle chỉ là quá trình nền biên dịch mã tôi đã viết? Ngoài ra, sau khi xem xét rất nhiều câu trả lời khác, họ đề cập đến sự phụ thuộc. Đó là những gì? Cám ơn rất nhiều!

Có thể nhìn vào giải thích ngắn gọn và tốt đẹp ở đây Giới thiệu lớp . Khá hữu ích
eRaisedToX

Câu trả lời:


1531

Câu trả lời ngắn

Gradle là một hệ thống xây dựng.

Câu trả lời dài

Trước Android Studio, bạn đã sử dụng Eclipse cho mục đích phát triển của mình và rất có thể, bạn đã không biết cách xây dựng APK Android mà không cần Eclipse.

Bạn có thể làm điều này trên dòng lệnh, nhưng bạn phải tìm hiểu từng công cụ (dx, aapt) làm gì trong SDK. Nhật thực đã cứu tất cả chúng ta khỏi những chi tiết cơ bản nhưng quan trọng, cơ bản này bằng cách cho chúng ta hệ thống xây dựng của riêng chúng.

Bây giờ, bạn đã bao giờ tự hỏi tại sao resthư mục nằm trong cùng thư srcmục với thư mục của bạn chưa?

Đây là nơi hệ thống xây dựng đi vào hình ảnh. Hệ thống xây dựng tự động lấy tất cả các tệp nguồn ( .javahoặc .xml), sau đó áp dụng công cụ thích hợp (ví dụ: lấy javacác tệp lớp và chuyển đổi chúng thành dexcác tệp) và nhóm tất cả chúng thành một tệp nén, APK yêu thích của chúng tôi.

Hệ thống xây dựng này sử dụng một số quy ước: một ví dụ về một là chỉ định thư mục chứa các tệp nguồn (trong Eclipse là \srcthư mục) hoặc các tệp tài nguyên (trong Eclipse là \resthư mục).

Bây giờ, để tự động hóa tất cả các tác vụ này, cần phải có một kịch bản; bạn có thể viết hệ thống xây dựng của riêng mình bằng cách sử dụng shell script trong linux hoặc cú pháp tệp bó trong windows. Hiểu rồi?

Lớp là một hệ thống xây dựng lấy các tính năng tốt nhất từ ​​các hệ thống xây dựng khác và kết hợp chúng thành một. Nó được cải thiện dựa trên những thiếu sót của họ. Nó là một hệ thống xây dựng dựa trên JVM , điều đó có nghĩa là bạn có thể viết tập lệnh của riêng mình bằng Java, mà Android Studio sử dụng.

Một điều thú vị về gradle là nó là một hệ thống dựa trên plugin . Điều này có nghĩa là nếu bạn có ngôn ngữ lập trình của riêng mình và bạn muốn tự động hóa nhiệm vụ xây dựng một số gói (đầu ra như JAR cho Java) từ các nguồn thì bạn có thể viết một plugin hoàn chỉnh bằng Java hoặc Groovy (hoặc Kotlin, xem tại đây ) và phân phối nó cho phần còn lại của thế giới.

Tại sao Google sử dụng nó?

Google đã thấy một trong những hệ thống xây dựng tiên tiến nhất trên thị trường và nhận ra rằng bạn có thể viết các tập lệnh của riêng mình mà không cần học nhiều và không cần học Groovy hoặc bất kỳ ngôn ngữ mới nào khác. Vì vậy, họ đã viết plugin Android cho Gradle.

Bạn phải đã xem build.gradle(các) tệp trong dự án của bạn. Đó là nơi bạn có thể viết các kịch bản để tự động hóa các nhiệm vụ của mình. Mã bạn đã thấy trong các tệp này là mã Groovy. Nếu bạn viếtSystem.out.println("Hello Gradle!"); thì nó sẽ in trên bàn điều khiển của bạn.

Bạn có thể làm gì trong một kịch bản xây dựng?

Một ví dụ đơn giản là bạn phải sao chép một số tệp từ thư mục này sang thư mục khác trước khi quá trình xây dựng thực tế xảy ra. Một kịch bản xây dựng Gradle có thể làm điều này.


11
Tôi phải nói rằng Gradle đã gây ra cho tôi các vấn đề khi tham gia một dự án AndroidStudio từ vị trí này sang vị trí khác. Sự không phù hợp của các phiên bản, mô-đun bị thiếu, không có gì ... nó đã cho tôi thời gian khó khăn. Tôi đã kết thúc việc tạo lại bộ xương dự án và cắt / dán các phần của mã từ dự án cũ sang dự án mới. Và đây là dưới Windows cho cả nguồn và đích. Tôi sẽ chuyển nó ngay bây giờ dưới một phòng thí nghiệm dựa trên Linux.
jfmessier

21
Điều tôi không hiểu là tại sao gradle cố gắng kết nối Internet cho mọi dự án mà tôi thực hiện hoặc thậm chí mỗi lần tôi muốn biên dịch
AaA

4
Tôi nghĩ IntelliJ đã biết cách xây dựng các dự án Android mà không cần hệ thống xây dựng khác.
Arne Evertsson

17
Một lợi thế quan trọng khác của việc xếp lớp so với (các) hệ thống xây dựng phòng thu Android trước đó là quản lý phụ thuộc. Trước đây để sử dụng thư viện Android trong một dự án, người ta sẽ phải tải xuống mã nguồn, thêm nó vào dự án của bạn và biên dịch nó với dự án của bạn. Thay vào đó, với lớp, người ta có thể thêm một dòng vào build.gradle và gradle sau đó sẽ tải xuống thư viện đã biên dịch từ kho lưu trữ công cộng và thêm nó vào dự án của bạn. Một số ví dụ: blog.teamtreehouse.com/android-lologists-use-every-project Điều này cũng hoạt động đối với các tệp jar Java tiêu chuẩn thay vì đưa chúng vào thư mục lib.
Stan Kurdziel

4
Gradle là một hệ thống xây dựng khủng khiếp. Khi sử dụng Android Studio, tôi muốn nó chăm sóc bản dựng. Tôi không hiểu tại sao việc thêm một số lớp buộc Gradle phải thực hiện đồng bộ hóa trước khi nó có thể hữu ích. Làm việc với Visual Studio bằng cách so sánh là tuyệt vời (hoặc thậm chí X-Code) - không cần bổ sung tào lao. IDE xây dựng dự án và giải pháp mà không cần phải sửa lại các tệp ngẫu nhiên cho các cài đặt mà quá trình xây dựng Android cần đôi khi hoặc thông qua các bản cập nhật của các dự án cũ. Gradle là phần tồi tệ nhất của trải nghiệm Android.
thợ rèn

162

Đây là công cụ xây dựng mới mà Google muốn sử dụng cho Android. Nó đang được sử dụng do nó có khả năng mở rộng và hữu ích hơn kiến. Nó có nghĩa là để nâng cao kinh nghiệm phát triển.

Bạn có thể xem bài nói chuyện của Xavier Ducrohet từ Nhóm nhà phát triển Android trên Google I / O tại đây.

Ngoài ra còn có một cuộc nói chuyện khác trên Android Studio của Xavier và Tor Norbye, cũng trong Google I / O tại đây .


4
Tôi nghĩ IntelliJ đã biết cách xây dựng các dự án Android mà không cần hệ thống xây dựng khác.
Arne Evertsson

1
Vì vậy, gradle chỉ là quá trình nền biên dịch mã tôi đã viết? Ngoài ra, sau khi xem xét rất nhiều câu trả lời khác, họ đề cập đến sự phụ thuộc. Đó là những gì? Cảm ơn rất nhiều daniel!

2
@ user5562706 Nó không biên dịch mã, nhưng nó chịu trách nhiệm gọi tệp thực thi sẽ biên dịch mã của bạn. Sau khi biên dịch mã của bạn, sau đó nó có thể chạy một tác vụ khác để đóng gói nó, một tác vụ khác để sao chép nó vào một thư mục bạn chọn, sau đó có thể khác để tải nó lên một máy chủ ở đâu đó ... Đó là những loại nhiệm vụ Gradle, hoặc bất kỳ bản dựng nào hệ thống, sẽ làm.
Michael Berry

63

Gradle là một hệ thống xây dựng chạy trên Android Studio .

Trong các ngôn ngữ khác chẳng hạn:


23
Khi bạn nói Gradletương tự như vậy make, tôi chỉ có khái niệm của nó
user3405291

3
PHING của PHP
Yousha Aleayoub

15
Một trong những cách nhanh nhất mà tôi đã tìm thấy để tìm hiểu một công cụ không xác định làm gì và nơi nó rơi vào đường ống, là nhập vào Google tên của công cụ và "vs". Kết quả thường sẽ hiển thị "X vs Y" trong đó Y là một số công cụ khác mà bạn có thể quen thuộc hơn.
James Kuang

webpack cho javascript
codepig

47

Dưới đây là một lời giải thích chi tiết về những gì Gradlevà làm thế nào để sử dụng nó trong Android Studio.

Khám phá các tập tin Gradle

  1. Bất cứ khi nào bạn tạo một dự án trong Android Studio, hệ thống xây dựng sẽ tự động tạo tất cả các tệp xây dựng Gradle cần thiết.

Xây dựng tập tin

  1. Các tệp xây dựng Gradle sử dụng một Domain Specific Language or DSLđể xác định logic xây dựng tùy chỉnh và để tương tác với các yếu tố dành riêng cho Android của plugin Android cho Gradle.

  2. Các dự án Android Studio bao gồm 1 hoặc nhiều mô-đun, là các thành phần mà bạn có thể xây dựng, kiểm tra và gỡ lỗi một cách độc lập. Mỗi mô-đun có tệp xây dựng riêng, vì vậy mỗi dự án Android Studio chứa 2 loại tệp xây dựng Gradle.

  3. Tệp xây dựng cấp cao nhất: Đây là nơi bạn sẽ tìm thấy các tùy chọn cấu hình phổ biến cho tất cả các mô-đun tạo nên dự án của bạn.

  4. Tệp xây dựng cấp mô-đun : Mỗi mô-đun có tệp xây dựng Gradle riêng chứa các cài đặt xây dựng dành riêng cho mô-đun. Bạn sẽ dành phần lớn thời gian để chỉnh sửa (các) tệp xây dựng cấp mô-đun thay vì tệp xây dựng cấp cao nhất của dự án.

Để xem các build.gradletệp này , hãy mở bảng Project của Android Studio (bằng cách chọn tab Project) và mở rộng thư mục Gradle Sc Script. Hai mục đầu tiên trong thư mục Gradle ScScript là các tệp xây dựng Gradle cấp độ dự án và cấp mô-đun

Tập tin xây dựng lớp cấp cao nhất

Mỗi dự án Android Studio đều chứa một tệp xây dựng Gradle cấp cao nhất. Đây build.gradletập tin là mục đầu tiên xuất hiện trong Scripts Gradle thư mục và được đánh dấu rõ ràng dự án.

Hầu hết thời gian, bạn sẽ không cần thực hiện bất kỳ thay đổi nào đối với tệp này, nhưng vẫn hữu ích để hiểu nội dung của nó và vai trò của nó trong dự án của bạn.

Xây dựng tập tin cấp độ mô-đun

Ngoài tệp xây dựng Gradle cấp dự án, mỗi mô-đun có tệp xây dựng Gradle của riêng nó. Dưới đây là phiên bản chú thích của tệp xây dựng Gradle cấp độ mô-đun cơ bản.

Các tập tin lớp khác

Ngoài các tệp build.gradle, thư mục Gradle Sc Script của bạn còn chứa một số tệp Gradle khác. Hầu hết thời gian bạn sẽ không phải chỉnh sửa thủ công các tệp này vì chúng sẽ tự động cập nhật khi bạn thực hiện bất kỳ thay đổi có liên quan đến dự án của mình. Tuy nhiên, nên hiểu vai trò của các tệp này trong dự án của bạn.

gradle-wrapper.properies (Phiên bản Gradle)

Tệp này cho phép người khác xây dựng mã của bạn, ngay cả khi họ chưa cài đặt Gradle trên máy của họ. Tệp này kiểm tra xem phiên bản chính xác của Gradle có được cài đặt hay không và tải xuống phiên bản cần thiết nếu cần.

cài đặt. Nâng cấp

Tập tin này tham khảo tất cả các mô-đun tạo nên dự án của bạn.

gradle.properies (Thuộc tính dự án)

Tập tin này chứa thông tin cấu hình cho toàn bộ dự án của bạn. Theo mặc định, nó trống, nhưng bạn có thể áp dụng một loạt các thuộc tính cho dự án của mình bằng cách thêm chúng vào tệp này.

local.properies (Vị trí SDK)

Tệp này cho plugin Android Gradle nơi nó có thể tìm thấy cài đặt SDK Android của bạn.

Lưu ý: local.properties chứa thông tin dành riêng cho cài đặt cục bộ SDK Android. Điều này có nghĩa là bạn không nên giữ tập tin này dưới sự kiểm soát nguồn.

Đề nghị đọc - Hướng dẫn Tutsplus

Tôi đã hiểu rõ về gradle từ này.


1
Lưu ý rằng các câu trả lời chỉ liên kết không được khuyến khích, các câu trả lời SO phải là điểm cuối của tìm kiếm giải pháp (so với một điểm dừng khác của tài liệu tham khảo, có xu hướng bị cũ theo thời gian). Vui lòng xem xét việc thêm một bản tóm tắt độc lập ở đây, giữ liên kết làm tài liệu tham khảo.
kleopatra

30

Gradle là một loại công cụ xây dựng xây dựng mã nguồn của chương trình. Vì vậy, đây là một phần quan trọng của Android Studio và cần được cài đặt trước khi bắt đầu phát triển ứng dụng của bạn.

Chúng tôi không phải cài đặt riêng, vì Android Studio thực hiện điều đó cho chúng tôi khi chúng tôi thực hiện dự án đầu tiên.


4
Bạn có ý nghĩa gì khi xây dựng mã nguồn của chương trình? Đó không phải là công việc của một nhà phát triển sao?
committedandroider

Câu trả lời này là hoàn toàn sai trong cách nó được diễn đạt. Gradle là công cụ đóng gói đi kèm với Android Studio, vì vậy điều cần làm là xây dựng apk. Mã nguồn luôn được trình biên dịch xây dựng và không có gì khác.
AutomEng

Tuy nhiên, từ một câu hỏi khác, có vẻ như Gradle sẽ không hoạt động bình thường nếu không có kết nối internet đáng tin cậy, điều này có nghĩa là tôi phải vứt bỏ Android Studio cho đến khi điều đó được khắc phục?
Michael

2
@commnedandroider: công việc của nhà phát triển là viết mã nguồn chứ không phải xây dựng nó. Trong hệ thống Phát triển, chúng tôi sử dụng từ "xây dựng" có nghĩa là quá trình đóng gói các biên soạn mã nguồn thành một thức sản phẩm (một gói hoặc một thực thi )
MestreLion

1
@MestreLion lol Tôi đã khá bối rối trở lại sau đó vì người sử dụng 'xây dựng' trong tài liệu tham khảo để viết mã nguồn cho projects- họ tôi xây dựng máy chủ trò chuyện này, ứng dụng này để ...
committedandroider

26

ĐỊNH NGH :: A: Gradle có thể được mô tả một cơ chế xây dựng có cấu trúc, nơi nó cung cấp cho nhà phát triển công cụ và tính linh hoạt để quản lý tài nguyên của dự án để tạo các bản dựng smaller in size, targeting specific requirementscho một số thiết bị có cấu hình nhất định


CẤU HÌNH CƠ BẢN

  1. minimumSdk
  2. maximumSdk
  3. targettedSdk
  4. versionCode
  5. versionName

LIBRARIES :: Chúng tôi có thể thêm thư viện Android hoặc bất kỳ thư viện bên thứ ba nào khác ngoài yêu cầu dễ dàng, đây là một nhiệm vụ tẻ nhạt trước đó. Nếu thư viện không phù hợp với dự án hiện có, Nhà phát triển được hiển thị nhật ký nơi người đó có thể tìm giải pháp phù hợp để thực hiện thay đổi cho dự án để có thể thêm thư viện. Nó chỉ là một dòng phụ thuộc


TẠO GIỐNG NHIỀU BUILDS

Kết hợp các kiểu xây dựng với các hương vị xây dựng để có được các biến của các biến xây dựng

 ====================                         ====================
|     BuildTypes     |                       |   ProductFlavours  |
 --------------------  ====================== --------------------
|  Debug,Production  |      ||       ||      | Paid,Free,Demo,Mock|
 ====================       ||       ||       ==================== 
                            ||       ||
                            VV       VV
 =================================================================
|           DebugPaid, DebugFree, DebugDemo, DebugMock            |
|  ProductionPaid, ProductionFree, ProductionDemo, ProductionMock |
 =================================================================

GIẢM GIÁ KÍCH THƯỚC

Gradle giúp giảm kích thước của bản dựng được tạo bằng cách xóa các tài nguyên không sử dụng cũng những thứ không được sử dụng khỏi các thư viện tích hợp


QUẢN LÝ GIẤY PHÉP

Chúng tôi có thể Chỉ định một số quyền nhất định cho các bản dựng nhất định bằng cách thêm các quyền nhất định trong các trường hợp nhất định dựa trên yêu cầu


BUILDS CHO THIẾT BỊ CERTAIN

Chúng tôi có thể quản lý việc tạo bản dựng cho một số thiết bị bao gồm mật độ nhất định và mức api nhất định. Điều này giúp triển khai sản phẩm trong cửa hàng ứng dụng theo yêu cầu trên nhiều loại thiết bị


TÀI LIỆU THAM KHẢO

Hướng dẫn Vogella


25

Bạn có thể tìm thấy mọi thứ bạn cần biết về Gradle tại đây: Hướng dẫn sử dụng Plugin Gradle

Mục tiêu của Hệ thống Xây dựng mới

Mục tiêu của hệ thống xây dựng mới là:

  • Giúp dễ dàng sử dụng lại mã và tài nguyên
  • Giúp dễ dàng tạo một số biến thể của ứng dụng, để phân phối nhiều apk hoặc cho các hương vị khác nhau của ứng dụng
  • Giúp dễ dàng định cấu hình, mở rộng và tùy chỉnh quá trình xây dựng
  • Tích hợp IDE tốt

Tại sao tốt nghiệp?

Gradle là một hệ thống xây dựng nâng cao cũng như bộ công cụ xây dựng nâng cao cho phép tạo logic xây dựng tùy chỉnh thông qua các plugin.

Dưới đây là một số tính năng của nó khiến chúng tôi chọn Gradle:

  • Ngôn ngữ cụ thể miền (DSL) để mô tả và thao tác logic xây dựng
  • Xây dựng tệp dựa trên Groovy và cho phép trộn các phần tử khai báo thông qua DSL và sử dụng mã để thao tác các phần tử DSL để cung cấp logic tùy chỉnh.
  • Quản lý phụ thuộc tích hợp thông qua Maven và / hoặc Ivy.
  • Rất linh hoạt. Cho phép sử dụng các thực tiễn tốt nhất nhưng không bắt buộc cách làm việc riêng của nó.
  • Các plugin có thể hiển thị DSL của riêng họ và API của riêng họ để xây dựng các tệp để sử dụng.
  • API công cụ tốt cho phép tích hợp IDE

25

Tôi tham khảo hai hướng dẫn để viết Trả lời một , hai

Gradle là một mục đích chung, công cụ xây dựng khai báo. Đó là mục đích chung vì nó có thể được sử dụng để xây dựng khá nhiều thứ bạn quan tâm để thực hiện trong tập lệnh xây dựng. Đây là khai báo vì bạn không muốn thấy nhiều mã trong tệp xây dựng, không thể đọc được và ít bảo trì hơn. Vì vậy, trong khi Gradle cung cấp ý tưởng về các quy ước và một bản dựng đơn giản và khai báo, nó cũng làm cho công cụ có thể thích ứng và các nhà phát triển có khả năng mở rộng. Nó cũng cung cấp một cách dễ dàng để tùy chỉnh hành vi mặc định và các móc khác nhau để thêm bất kỳ tính năng nào của bên thứ ba.

Gradle kết hợp các phần tốt của cả hai công cụ và cung cấp các tính năng bổ sung và sử dụng Groovy làm Ngôn ngữ cụ thể miền (DSL). Nó có sức mạnh và tính linh hoạt của công cụ Ant với các tính năng Maven như xây dựng vòng đời và dễ sử dụng.

Tại sao tốt nghiệp? Tại sao bây giờ?

Phản ứng của công cụ xây dựng là thêm chức năng tạo kịch bản thông qua các cơ chế mở rộng không chuẩn. Bạn kết thúc việc trộn mã tập lệnh với XML hoặc gọi các tập lệnh bên ngoài từ logic xây dựng của bạn. Thật dễ dàng để tưởng tượng rằng bạn sẽ cần thêm nhiều mã tùy chỉnh hơn theo thời gian. Kết quả là, bạn chắc chắn sẽ giới thiệu sự phức tạp tình cờ, và khả năng bảo trì đi ra ngoài cửa sổ.

Giả sử bạn muốn sao chép tệp vào một vị trí cụ thể khi bạn xây dựng phiên bản phát hành của dự án. Để xác định phiên bản, bạn kiểm tra một chuỗi trong siêu dữ liệu mô tả dự án của bạn. Nếu nó khớp với sơ đồ đánh số cụ thể (ví dụ: 1.0-ĐÁNG TIN CẬY), bạn sao chép tệp từ điểm A sang điểm B. Từ góc nhìn bên ngoài, điều này có vẻ như là một nhiệm vụ tầm thường. Nếu bạn phải dựa vào XML, ngôn ngữ xây dựng của nhiều công cụ truyền thống, việc thể hiện logic đơn giản này trở nên khá khó khăn.

Sự phát triển của các công cụ xây dựng Java

Logic xây dựng Java phải được mô tả bằng XML. XML là tuyệt vời để mô tả dữ liệu phân cấp nhưng lại thiếu khi thể hiện luồng chương trình và logic điều kiện. Khi một kịch bản xây dựng phát triển phức tạp, việc duy trì mã tòa nhà trở thành một cơn ác mộng.

Trong Ant , bạn tạo mục tiêu JAR phụ thuộc vào mục tiêu biên dịch. Ant không đưa ra bất kỳ hướng dẫn nào về cách cấu trúc dự án của bạn. Mặc dù nó cho phép linh hoạt tối đa, Ant làm cho mỗi tập lệnh xây dựng trở nên độc đáo và khó hiểu. Các thư viện bên ngoài mà dự án của bạn yêu cầu thường được kiểm tra trong kiểm soát phiên bản vì không có cơ chế tự động để kéo chúng từ một vị trí trung tâm.

Maven 1 , được phát hành vào tháng 7 năm 2004, đã cố gắng giảm bớt quá trình đó. Nó cung cấp một dự án tiêu chuẩn và cấu trúc thư mục, cũng như quản lý phụ thuộc. Thật không may, logic tùy chỉnh là khó thực hiện

Gradle phù hợp với thế hệ công cụ xây dựng đó và đáp ứng nhiều yêu cầu của công cụ xây dựng hiện đại (Hình 1). Nó cung cấp một DSL biểu cảm, một quy ước về cách tiếp cận cấu hình và quản lý phụ thuộc mạnh mẽ. Nó thực hiện đúng bước từ bỏ XML và giới thiệu ngôn ngữ động Groovy để xác định logic xây dựng của bạn. Nghe có vẻ hấp dẫn phải không?

Gradle kết hợp các tính năng tốt nhất của các công cụ xây dựng khác.

nhập mô tả hình ảnh ở đây

Bộ tính năng hấp dẫn của Gradle

nhập mô tả hình ảnh ở đây

Tại sao xây dựng các dự án Java của bạn với Gradle thay vì Ant hay Maven?

Công cụ xây dựng mặc định cho Android (và ngôi sao mới của các công cụ xây dựng trên JVM) được thiết kế để dễ dàng tạo kịch bản cho các bản dựng đa ngôn ngữ phức tạp. Tuy nhiên, bạn nên thay đổi nó nếu bạn đang sử dụng Ant hoặc Maven?

Chìa khóa để mở khóa các tính năng sức mạnh của Gradle trong tập lệnh xây dựng của bạn nằm ở việc khám phá và áp dụng mô hình miền của nó, như được hiển thị trong hình dưới đây. nhập mô tả hình ảnh ở đây

Gradle không thể biết tất cả các yêu cầu cụ thể để xây dựng doanh nghiệp của bạn. Bằng cách phơi bày các hook thành các giai đoạn trong vòng đời, Gradle cho phép theo dõi và định cấu hình hành vi thực thi của tập lệnh xây dựng.

Gradle thiết lập một từ vựng cho mô hình của nó bằng cách hiển thị DSL được triển khai trong Groovy. Khi xử lý một miền có vấn đề phức tạp, trong trường hợp này, nhiệm vụ xây dựng phần mềm, có thể sử dụng một ngôn ngữ chung để diễn đạt logic của bạn có thể là một công cụ mạnh mẽ.

Một ví dụ khác là cách bạn có thể thể hiện sự phụ thuộc vào các thư viện bên ngoài, một vấn đề rất phổ biến được giải quyết bằng các công cụ xây dựng. Gradle ngoài luồng cung cấp cho bạn hai khối cấu hình cho tập lệnh xây dựng cho phép bạn xác định các phụ thuộc và kho lưu trữ mà bạn muốn lấy chúng từ đó. Nếu các thành phần DSL tiêu chuẩn không phù hợp với nhu cầu của bạn, bạn thậm chí có thể giới thiệu từ vựng của riêng mình thông qua cơ chế mở rộng của Gradle.

Tích hợp với các công cụ xây dựng khác

Gradle chơi tốt với Ant, Maven và Ivy của người tiền nhiệm, như trong hình bên dưới.

nhập mô tả hình ảnh ở đây

Tự động hóa dự án của bạn từ Xây dựng đến Triển khai

nhập mô tả hình ảnh ở đây

Trong ảnh: Các giai đoạn của một đường ống triển khai.

  • Biên dịch mã

  • Chạy thử nghiệm đơn vị và tích hợp

  • Thực hiện phân tích mã tĩnh và tạo phạm vi kiểm tra

  • Tạo phân phối

  • Cung cấp môi trường mục tiêu

  • Triển khai việc giao hàng

  • Thực hiện khói và kiểm tra chức năng tự động

Tôi tham khảo hai hướng dẫn để viết Trả lời một , hai


1
Ngoài ra, Bạn có thể xây dựng các ứng dụng Android của mình từ dòng lệnh trên máy hoặc trên các máy không cài đặt Android Studio (chẳng hạn như máy chủ tích hợp liên tục).
jettimadhuChowdary 27/03/18

23

Lớp là một hệ thống xây dựng . Xây dựng hệ thống là các công cụ phần mềm được thiết kế để tự động hóa quá trình biên dịch chương trình. Xây dựng hệ thống có nhiều dạng khác nhau và được sử dụng cho nhiều nhiệm vụ xây dựng phần mềm. Trong khi mục tiêu chính của họ là tạo hiệu quả thực thi.

Một thuật ngữ liên quan khác là Xây dựng tự động hóa, đó là quá trình tự động hóa việc tạo ra một bản dựng phần mềm và các quy trình liên quan bao gồm: biên dịch mã nguồn máy tính thành mã nhị phân, đóng gói mã nhị phân và chạy thử nghiệm tự động.

Rất ít hệ thống xây dựng tương tự cho các ngôn ngữ khác là (xem danh sách đầy đủ ở đây ):

  1. Kiến Ant & Apache Maven - Java
  2. sbt (Công cụ xây dựng đơn giản) - cho Scala (Chơi khung, v.v.)
  3. AAP - Công cụ xây dựng dựa trên Python
  4. Cào (Trình tạo Apache) - Ruby
  5. Leiningen cho Clojure

17

Có nguy cơ bị phân tán, tôi nghĩ đằng sau đây là câu hỏi tại sao trải nghiệm Android Studio / Gradle lại tệ đến vậy.

Trải nghiệm Clojure điển hình:

  • tải dự án với các phụ thuộc được liệt kê trong project.clj.
  • Leiningen có được sự phụ thuộc nhờ Clojars và Maven.
  • Biên soạn dự án.

Trải nghiệm Android Studio / Gradle điển hình:

  • "Nhập dự án Eclipse của tôi".
  • Dự án OK nhập khẩu.
  • Gradle đang làm điều đó thang ... chờ đợi ... chờ đợi ... chờ đợi ... Gradle đã hoàn thành.
  • Biên dịch ... không thể biên dịch vì tôi không biết X là gì / không thể tìm thấy thư viện Y.

Tôi không chắc đây là lỗi chính xác của Gradle. Nhưng "nhập từ dự án Eclipse" có vẻ không ổn. Đối với tất cả sự tinh vi được cho là của Gradle và những ưu điểm của hệ thống xây dựng, Android Studio dường như không nhập các phụ thuộc xây dựng hoặc quy trình xây dựng từ Eclipse rất tốt.

Nó không cho bạn biết khi nào không thể nhập biểu đồ phụ thuộc hoàn chỉnh. Android Studio không cung cấp trợ giúp hoặc mẹo hữu ích nào về cách giải quyết vấn đề. Nó không cho bạn biết nơi bạn có thể tìm thủ công trong các thư mục Eclipse. Nó không cho bạn biết thư viện nào dường như bị thiếu. Hoặc giúp bạn tìm kiếm Maven, vv cho họ.

Trong năm 2016, những thứ như Leiningen / Clojars, hoặc npm của nút, hoặc Python của apkg (và tôi chắc chắn rằng nhiều trình quản lý gói tương tự cho các ngôn ngữ và hệ thống khác) đều hoạt động rất tốt ... thiếu phụ thuộc là quá khứ.

Ngoại trừ với Android. Android Studio hiện là nơi duy nhất mà tôi dường như vẫn còn gặp phải địa ngục phụ thuộc.

Tôi muốn nói rằng đây là lỗi của Google. Họ đã phá vỡ hệ sinh thái Android (và hàng ngàn dự án / hướng dẫn trực tuyến hiện có của Android) khi họ quyết định chuyển từ Eclipse sang Android Studio / Gradle mà không tạo ra một quy trình chuyển đổi mạnh mẽ. Những người có dự án làm việc trong Eclipse không thích ứng chúng với AS (có lẽ vì đó là một nỗi đau đối với họ). Và những người đang cố gắng sử dụng những dự án đó trong AS đang gặp phải những vấn đề tương tự.

Và dù sao đi nữa, nếu Gradle là hệ thống xây dựng siêu mạnh này, tại sao tôi vẫn quản lý rất nhiều phụ thuộc khác trong trình quản lý sdk? Tại sao một dự án không cần, giả sử, ndk chỉ định điều này trong tệp Gradle của nó để nó được tự động cài đặt và xây dựng chống lại khi cần? Tại sao NDK đặc biệt? Tương tự cho các nền tảng mục tiêu? Tại sao tôi lại cài đặt chúng một cách rõ ràng trong IDE thay vì chỉ kiểm tra dự án của tôi với chúng và có tất cả những thứ này được sắp xếp cho tôi ở hậu trường không?


4
Tôi hoàn toàn đồng ý rằng Gradle là một hệ thống xây dựng khủng khiếp. Nó là thành phần khiến Android Studio trở nên tồi tệ hơn nhiều so với X-Code hay Visual Studio. Tôi nhận ra những điều này phải "xây dựng" hệ thống đằng sau hậu trường nhưng tôi không thực sự cần phải biết / quan tâm / tinker với những người bên trong của họ. Mặt khác, Gradle dường như phá vỡ mọi bản cập nhật Android Studio và làm hỏng hệ thống ngay cả khi chỉ thêm một lớp. Không có IDE nào khác làm điều đó.
thợ rèn

14

Gradle là một hệ thống xây dựng nâng cao cũng như bộ công cụ xây dựng nâng cao cho phép tạo logic xây dựng tùy chỉnh thông qua các plugin!

Ưu điểm:

  • Dsl - Ngôn ngữ cụ thể của miền, dựa trên Groovy
  • DAG - Đồ thị chu kỳ có hướng
  • Xây dựng gia tăng
  • Mô hình miền mở rộng
  • Gradle luôn được cập nhật
  • Trước khi một tác vụ đang được thực thi, Gradle chụp ảnh nhanh đầu vào và đầu ra của nhiệm vụ.
  • Trong trường hợp ảnh chụp nhanh đã thay đổi hoặc nó không tồn tại, Gralde sẽ thực hiện lại nhiệm vụ này.

Mục nhập

Thông qua DSL, có thể định cấu hình các mục nhập bảng kê khai sau:

Xây dựng biến thể

Theo mặc định, plugin Android tự động thiết lập dự án để xây dựng cả phiên bản gỡ lỗi và phiên bản phát hành của ứng dụng.

Phụ thuộc

  1. Phụ thuộc địa phương:

Nếu bạn có lưu trữ nhị phân trong hệ thống tệp cục bộ mà mô-đun phụ thuộc, chẳng hạn như tệp JAR, bạn có thể khai báo các phụ thuộc này trong tệp xây dựng cho mô-đun đó.

  1. Phụ thuộc từ xa:

Đầu tiên, kho lưu trữ phải được thêm vào danh sách, và sau đó phụ thuộc phải được khai báo theo cách Maven hoặc Ivy khai báo các tạo phẩm của chúng.


13

Gradle là ngôn ngữ Groovy JVM, kiến ​​là gì đối với Java. Về cơ bản, đó là công cụ xây dựng của Groovy. Không giống như Ant, nó dựa trên ngôn ngữ Groovy đầy đủ. Ví dụ, bạn có thể viết mã tập lệnh Groovy trong tập lệnh Gradle để làm một việc gì đó thay vì dựa vào một ngôn ngữ miền cụ thể.

Tôi không biết tích hợp cụ thể của IntelliJ, nhưng hãy tưởng tượng bạn có thể "mở rộng" Groovy sao cho bạn có thể viết các nguyên thủy ngôn ngữ "xây dựng" cụ thể và chúng chỉ trở thành một phần của ngôn ngữ Groovy. .


2
nó không phải là "công cụ xây dựng Groovys" - nó là một công cụ xây dựng đa mục đích có DSL được xây dựng trên đỉnh của
Groovy

10

Gradle là bộ công cụ xây dựng nâng cao dành cho Android, quản lý các phụ thuộc và cho phép bạn xác định logic xây dựng tùy chỉnh. các tính năng giống như

  • Tùy chỉnh, cấu hình và mở rộng quá trình xây dựng.

  • Tạo nhiều APK cho ứng dụng của bạn với các tính năng khác nhau bằng cùng một dự án.

  • Tái sử dụng mã và tài nguyên.

tham khảo


9

Gradle là bộ công cụ xây dựng tự động có thể tích hợp vào nhiều môi trường khác nhau không chỉ cho các dự án Android.

Dưới đây là một vài điều mà bạn có thể làm với gradle.

  • Cấu hình tối thiểu cần thiết cho các dự án mới vì Gradle có mặc định cấu hình cho các dự án studio android của bạn.

  • Tuyên bố phụ thuộc. Bạn có thể khai báo các tệp jar phụ thuộc hoặc tệp thư viện được lưu trữ trong máy chủ cục bộ hoặc từ xa.

  • Gradle tự động tạo thư mục thử nghiệm và APK thử nghiệm từ nguồn dự án của bạn.

  • Nếu bạn thêm tất cả các thông tin cần thiết, chẳng hạn như keyPassword, và keyAliasvào tệp xây dựng Gradle của bạn, bạn có thể sử dụng Gradle để tạo APK có chữ ký.

  • Gradle có thể tạo nhiều APK với các gói khác nhau và xây dựng cấu hình từ một mô-đun duy nhất.


8

Trong Android Studio, Gradle là một công cụ xây dựng tùy chỉnh được sử dụng để xây dựng các gói Android (tệp apk) bằng cách quản lý các phụ thuộc và cung cấp logic xây dựng tùy chỉnh.

Tệp APK (gói Ứng dụng Android) là tệp zip được định dạng đặc biệt có chứa

  • Mã byte
  • Tài nguyên (hình ảnh, giao diện người dùng, xml, v.v.)
  • Tệp kê khai

Một tệp apk được ký và đẩy vào thiết bị bằng ADB (Cầu gỡ lỗi Android) nơi nó được thực thi.


6

Gradle là một công cụ xây dựng tùy chỉnh và được sử dụng để xây dựng APK hoặc được gọi là bộ gói ứng dụng.


4

bởi @Brian Gardner:

Gradle là một công cụ xây dựng mở rộng và quản lý phụ thuộc cho các dự án lập trình. Nó có một ngôn ngữ cụ thể miền dựa trên Groovy. Gradle cũng cung cấp hỗ trợ xây dựng theo quy ước cho nhiều loại dự án bao gồm Java, Android và Scala.

Tính năng của Gradle:

  1. Quản lý phụ thuộc
  2. Sử dụng Ant từ Gradle
  3. Plugin cấp
  4. Plugin Java
  5. Plugin Android
  6. Xây dựng nhiều dự án

3

Gradle là thứ giúp chúng ta có thể tự động hóa việc xây dựng các dự án Android phức tạp liên quan đến 10 nghìn dòng mã từ nhiều nguồn, dự án, thư viện, v.v. Nó có thể tạo ra nhiều APK được tối ưu hóa dựa trên rất nhiều thông số kỹ thuật cấu hình - nếu bạn là quan tâm, các câu trả lời khác cung cấp thêm chi tiết về khía cạnh này của Gradle.

Tuy nhiên, nếu bạn chưa quen với việc phát triển Android, Gradle trong 99% trường hợp là điều ngăn dự án của bạn xây dựng. Đây là một hệ thống phức tạp, khó hiểu, có thể làm xáo trộn hiệu quả quá trình xây dựng Android và về cơ bản khiến nó không có sẵn cho các nhà phát triển thiếu kinh nghiệm, tức là để xây dựng một Ứng dụng Android cấp đơn giản, người mới không nghi ngờ có thể cần nghiên cứu và hiểu nhiều điều mà họ không mặc cả nhu la:

  • Cấu trúc và hệ sinh thái APK Android
  • Studio Android
  • Các đường dẫn và phụ thuộc Java
  • Groovy
  • Tập lệnh xây dựng lớp
  • Nhiều công nghệ phức tạp và thú vị khác

Tất cả những điều này rất thú vị và hữu ích cho các nhà phát triển Android biết, nhưng chúng không dễ dàng và đưa ra một rào cản ghê gớm để gia nhập. Tôi nghi ngờ rằng điều khiến OP cảm thấy khó khăn khi đặt câu hỏi này là cảm giác thất vọng chắc chắn sẽ tấn công nhà phát triển tân sinh sau khi mất quá nhiều thời gian để cố gắng có được một ứng dụng đơn giản để xây dựng và liên tục bị Gradle cản trở. Vấn đề trở nên trầm trọng hơn bởi số lượng tài liệu kỹ thuật cao có sẵn cho tất cả các công nghệ này. Ngoài ra đối với một lượng lớn nhu cầu phát triển Gradle là quá mức cần thiết.

Một cách khác là viết một kịch bản shell xây dựng dự án của bạn bằng cách tự động hóa các công cụ có sẵn trong SDK Android. Ưu điểm của phương pháp này là rất nhiều, đối với người mới bắt đầu, đây có lẽ là cách tốt nhất để nghiên cứu và hiểu quy trình xây dựng và hệ sinh thái Android và cho phép bạn kiểm soát hoàn toàn cách xây dựng ứng dụng của mình. Tuy nhiên, cách tiếp cận này phù hợp hơn với những người đứng đầu công nghệ vô cùng sâu sắc hơn là những người không có kinh nghiệm dùng thử Android.

Điều đáng chú ý bởi sự vắng mặt của nó (vui lòng thông báo cho tôi nếu có một thứ như vậy) là một mức nhập cảnh, IDE nhẹ với bộ tính năng giảm đồng thời đơn giản hóa quá trình xây dựng trong khi không che khuất nó (vì vậy không phải là netbeans hoặc nhật thực) sử dụng Gradle (có gì sai với Ant). Nó sẽ giúp bạn dễ dàng tạo APK phù hợp với một vài cấu hình phổ biến và sử dụng cấu trúc dự án có thể phát triển thành dự án Android Studio đầy đủ nếu bạn quyết định thực hiện theo cách đó.


1

Nói một cách dễ hiểu, Gradle là một công cụ được cung cấp bởi Android Studio để thực hiện hai quy trình quan trọng:

  1. Xây dựng dự án của chúng tôi
  2. Gói AndroidManifest.xml, thư mục res và mã nhị phân vào một tệp zip được định dạng đặc biệt có tên APK

1

Kết quả tìm kiếm Đoạn trích nổi bật từ web Android | xây dựng. lớp. Gradle là một hệ thống xây dựng (mã nguồn mở) được sử dụng để tự động hóa việc xây dựng, thử nghiệm, triển khai, v.v ... Ví dụ, tác vụ đơn giản để sao chép một số tệp từ thư mục này sang thư mục khác có thể được thực hiện bởi tập lệnh xây dựng Gradle trước khi xây dựng thực tế quá trình xảy ra.


1

Trong Android Studio, Gradle được sử dụng để xây dựng các dự án ứng dụng Android của chúng tôi, do đó đóng vai trò là một hệ thống xây dựng. Trước Android Studio, trong Eclipse, chúng tôi đã từng biên dịch và xây dựng các ứng dụng bằng công cụ dòng lệnh đã sớm được tiếp quản bởi các bước dựa trên GUI để xây dựng và chạy Ứng dụng Android trong nhật thực bằng ANT. Mỗi công cụ phát triển ứng dụng Android phải biên dịch tài nguyên, mã nguồn java, thư viện bên ngoài và kết hợp chúng thành APK cuối cùng.

Học sinh lớp là một hệ thống xây dựng, chịu trách nhiệm biên dịch mã, kiểm tra, triển khai và chuyển đổi mã thành các tệp .dex và do đó chạy ứng dụng trên thiết bị.

Vì Android Studio đi kèm với hệ thống Gradle được cài đặt sẵn, nên không cần cài đặt thêm phần mềm thời gian chạy để xây dựng dự án của chúng tôi. Bất cứ khi nào bạn nhấp vàoChạy nút trong studio android, một tác vụ lớp sẽ tự động kích hoạt và bắt đầu xây dựng dự án và sau khi lớp hoàn thành nhiệm vụ của nó, ứng dụng bắt đầu chạy trong AVD hoặc trong thiết bị được kết nối.

Một hệ thống xây dựng như Gradle không phải là trình biên dịch, trình liên kết, v.v., nhưng nó kiểm soát và giám sát hoạt động biên dịch, liên kết các tệp, chạy các trường hợp thử nghiệm và cuối cùng bó mã vào tệp apk cho Ứng dụng Android của bạn.

Có hai tệp build.gradle cho mỗi dự án studio android, một tệp dành cho ứng dụng và tệp kia dành cho tệp dự án (cấp mô-đun) .

Trong quá trình xây dựng, trình biên dịch sẽ lấy mã nguồn, tài nguyên, các tệp JAR của thư viện bên ngoài và AndroidManifest.xml (chứa dữ liệu meta về ứng dụng) và chuyển đổi chúng thành các tệp .dex (tệp thực thi Dalvik) , bao gồm mã byte . Mã byte đó được hỗ trợ bởi tất cả các thiết bị Android để chạy ứng dụng của bạn. Sau đó, Trình quản lý APK kết hợp các tệp .dex và tất cả các tài nguyên khác thành tệp apk đơn. APK Packager ký gỡ lỗi hoặc phát hành apk bằng cách sử dụng gỡ lỗi hoặc phát hành kho khóa tương ứng.

Apk gỡ lỗi thường được sử dụng cho mục đích thử nghiệm hoặc chúng tôi có thể nói rằng nó chỉ được sử dụng ở giai đoạn phát triển. Khi ứng dụng của bạn hoàn tất với các tính năng mong muốn và bạn đã sẵn sàng xuất bản ứng dụng của mình để sử dụng bên ngoài thì bạn yêu cầu apk Phát hành được ký bằng cách sử dụng kho khóa phát hành.

Bây giờ hãy làm sáng tỏ các tập tin gradle.

setting.gradle Các setting.gradle (Gradle thiết lập) tập tin được sử dụng để xác định tất cả các module được sử dụng trong ứng dụng của bạn.

build.gradle (cấp dự án ) Tệp build.gradle cấp cao nhất (mô-đun) là tệp xây dựng cấp dự án, xác định cấu hình xây dựng ở cấp dự án. Tập tin này áp dụng các cấu hình cho tất cả các mô-đun trong dự án ứng dụng Android.

build.gradle (cấp ứng dụng) Tệp build.gradle cấp ứng dụng được đặt trong mỗi mô-đun của dự án Android. Tệp này bao gồm tên gói của bạn là applicationID, tên phiên bản (phiên bản apk), mã phiên bản, sdk tối thiểu và đích cho một mô-đun ứng dụng cụ thể. Khi bạn bao gồm các thư viện bên ngoài (không phải các tệp jar) thì bạn cần đề cập đến nó trong tệp phân loại cấp ứng dụng để đưa chúng vào dự án của bạn dưới dạng phụ thuộc của ứng dụng.

Lưu ý: Nếu một ứng dụng nhất định được phát triển theo các biến thể cho các mô-đun riêng lẻ như Điện thoại thông minh, Máy tính bảng hoặc TV thì phải tạo các tệp lớp riêng biệt cho tất cả. Bạn thậm chí có thể bắt đầu hệ thống lớp của bạn thông qua công cụ dòng lệnh . Các lệnh sau được sử dụng cho nó:

./gradlew build - (xây dựng dự án)
./gradlew xây dựng sạch - (xây dựng hoàn thành dự án xây dựng)
./gradlew xây dựng sạch - (chạy thử nghiệm)
./gradlew Wrapper - (để xem tất cả các tác vụ có sẵn)


0

Gradle = Groovy + Cradle Hans Dockter bình luận diễn đàn

Sự nhầm lẫn này là một chút không cần thiết khi nó có thể được gọi là "Build" hoặc một cái gì đó trong Android Studio.

Chúng tôi muốn gây khó khăn cho bản thân trong cộng đồng Phát triển.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.