update - com.android.tools.build:gradle 4




什麼是Android Studio中的Gradle? (18)

簡答

Gradle是一個構建系統。

長答案

在Android Studio之前,您正在使用Eclipse進行開發,而且很可能,您不知道如何在沒有Eclipse的情況下構建Android APK。

您可以在命令行上執行此操作,但您必須了解每個工具(dx,aapt)在SDK中執行的操作。 Eclipse通過給我們自己的構建系統從這些低級別但重要的基本細節中拯救了我們。

現在,你有沒有想過為什麼res文件夾和你的src文件夾在同一個目錄下?

這是構建系統進入圖片的地方。 構建系統會自動獲取所有源文件( .java.xml ),然後應用相應的工具(例如獲取java類文件並將它們轉換為dex文件),並將它們全部組合成一個壓縮文件,即我們敬愛的APK。

這個構建系統使用了一些約定:一個例子是指定包含源文件的目錄(在Eclipse中它是\src文件夾)或資源文件(在Eclipse中它是\res文件夾)。

現在,為了使所有這些任務自動化,必須有一個腳本; 你可以在linux中使用shell腳本編寫你自己的編譯系統,或者在windows中編寫批處理文件語法。 得到它了?

Gradle是另一個構建系統 ,可以從其他構建系統中獲取最佳功能並將它們合併為一個。 基於其缺點而改進。 它是基於JVM的構建系統 ,這意味著您可以使用Java Studio編寫自己的腳本,Android Studio使用該腳本。

Gradle的一個很酷的事情是它是一個基於插件的系統 。 這意味著如果你有自己的編程語言,並且你想自動完成從源代碼構建一些包的輸出(像Java的JAR那樣的輸出),那麼你可以用Java或者Groovy(或者Kotlin,見here )編寫一個完整的插件,分發給世界其他地方。

為什麼Google使用它?

谷歌看到了市場上最先進的構建系統之一,並意識到你可以編寫自己的腳本,幾乎沒有學習曲線,也沒有學習Groovy或任何其他新語言。 所以他們為Gradle編寫了Android插件。

您必須在項目中看到build.gradle文件。 這就是您可以編寫腳本來自動執行任務的地方。 您在這些文件中看到的代碼是Groovy代碼。 如果你寫了System.out.println("Hello Gradle!"); 那麼它將在您的控制台上打印。

你可以在構建腳本中做什麼?

一個簡單的例子是,在實際的構建過程發生之前,您必須將某個文件從一個目錄複製到另一個目錄。 Gradle構建腳本可以做到這一點。

Gradle對我來說有點困惑,對於新的Android開發人員也有點困惑。 任何人都可以解釋Android Studio中的gradle是什麼以及它的目的是什麼? 為什麼Android Studio中包含Gradle?


1 - Gradle背景信息。

2 - Gradle概念。

3 - 初始化階段。

4 - 初始化階段(續)。

5 - 什麼是Gradle

6 - 配置階段。

看到這個LINK


Gradle是構建程序源代碼的一種構建工具 。 所以它是Android Studio的重要組成部分,需要在開始開發應用程序之前進行安裝。

我們不必單獨安裝它,因為Android Studio為我們做,當我們做第一個項目時。


Gradle是一個構建系統構建系統是設計用於自動化程序編譯過程的軟件工具。 構建系統有各種形式,用於各種軟件構建任務。 雖然他們的主要目標是有效地創建可執行文件。

另一個相關術語是構建自動化,它是自動創建軟件構建和相關過程的過程,包括:將計算機源代碼編譯為二進制代碼,打包二進制代碼以及運行自動化測試。

幾乎沒有類似的其他語言的構建系統(請參閱完整列表):

  1. Apache Ant和Apache Maven - Java
  2. sbt(Simple Build Tool) - 適用於Scala(Play框架等)
  3. AAP - 基於Python的構建工具
  4. Rake(Apache Builder) - Ruby
  5. Leiningen為Clojure

Gradle是一個用於管理依賴關係的高級構建工具包,允許您定義自定義構建邏輯。 功能類似於1.自定義,配置和擴展構建過程。 2.使用同一個項目為您的應用程序創建多個具有不同功能的APK。 3.重用代碼和資源。 請參閱此鏈接http://developer.android.com/sdk/installing/studio-build.html


Gradle是一個自動化的構建工具包,可以集成到許多不同的環境中,不僅適用於Android項目。

這裡有一些你可以用gradle做的事情。

  • 新項目需要最少的配置,因為Gradle為您的android studio項目提供了默認配置。

  • 依賴聲明。 您可以聲明託管在本地或遠程服務器中的依賴關係jar文件或庫文件。

  • Gradle會自動從您​​的項目源中生成測試目錄和測試APK。

  • 如果您將所有必要的信息(如keyPasswordkeyAlias )添加到您的Gradle構建文件中,則可以使用Gradle生成已簽名的APK。

  • Gradle可以生成具有不同包的多個APK,並可從單個模塊構建配置。


Gradle能夠自動構建複雜的Android項目,這些項目涉及來自多個來源,項目,庫等的數千行代碼。它可以根據大量的配置規範有條件地生成多個優化的APK - 如果您有興趣的,其他答案提供了Gradle這方面的更多細節。

但是,如果你是Android開發新手,Gradle在99%的情況下阻止了你的項目建設。 這是一個高深莫測的複雜系統,它有效地混淆了Android構建過程,並且基本上使其對於缺乏經驗的開發人員無法使用,即為了構建簡單的入門級Android應用程序,毫無疑問的新手可能需要研究和理解許多他們沒有討價還價的事情如:

  • Android APK結構和生態系統
  • Android Studio
  • Java類路徑和依賴關係
  • Groovy的
  • Gradle構建腳本
  • 許多其他復雜而有趣的技術

所有這些對Android開發人員來說都很有意思,並且非常有用,但它們並不容易,並且給入門帶來了巨大的障礙。 我懷疑是什麼啟發了OP來問這個問題,是因為花了太長時間試圖獲得一個簡單的應用程序來構建並不斷受到Gradle的阻撓之後,不可避免地碰到了新手開發人員的挫敗感。 這個問題由於所有這些技術可用的大量高度技術文檔而反過來加劇。 同樣對於大量的開發需求,Gradle也是過分的。

另一種方法是編寫一個shell腳本,通過自動化android SDK中提供的工具來構建您的項目。 這種方法的優點很多,對於初學者來說,它可能是研究和理解構建過程和Android生態系統的最佳方式,它可以讓您完全控制應用程序的構建方式。 然而,這種方法更適合深度不可兌換的技術人員,而不適合嘗試使用android的無經驗的新手。

什麼是顯而易見的(請告訴我是否有這樣的事情)是一個入門級的輕量級IDE,具有減少的功能集,同時簡化了構建過程,而不會遮蔽它(所以不是netbeans或eclipse)它可能仍然可能使用Gradle(Ant有什麼錯誤)。 它應該能夠輕鬆生成符合幾個常見配置的APK,並且可以使用可以演變為完整的Android Studio項目的項目結構,只要您決定採取這種方式即可。


Gradle是一個高級構建系統以及一個高級構建工具包,允許通過插件創建自定義構建邏輯!

優點:

  • Dsl - 基於groovy的領域特定語言
  • DAG - 導向無循環圖
  • 增量構建
  • 可擴展域模型
  • Gradle總是最新的
  • 在執行任務之前,Gradle會為其任務的輸入和輸出創建一個快照。
  • 如果快照發生了變化或者不存在,Gralde將重新執行此任務。

清單條目

通過DSL,可以配置以下清單條目:

構建變體

默認情況下,Android插件會自動設置項目以構建應用程序的調試版本和發布版本。

依賴

  1. 本地依賴性:

如果您的本地文件系統中具有模塊依賴的二進制歸檔文件,例如JAR文件,則可以在該模塊的構建文件中聲明這些依賴項。

  1. 遠程相關性:

首先,必須將存儲庫添加到列表中,然後必須以Maven或Ivy聲明其工件的方式聲明依賴項。


Gradle是在Android Studio上運行的構建系統。

在其他語言中,例如:


我提到兩個教程來編寫答案 two

Gradel是一個通用的聲明性構建工具。 它是通用的,因為它可以用來構建幾乎所有你在構建腳本中實現的東西。 這是聲明性的,因為你不想在構建文件中看到很多代碼,這些代碼不可讀和維護性較差。 因此,雖然Gradle提供了約定和簡單的聲明式構建的思想,但它也使得該工具具有適應性,開發人員能夠進行擴展。 它還提供了一種簡單的方法來定制默認行為和不同的掛鉤以添加任何第三方功能。

Gradle結合了這兩種工具的優點,並提供了附加功能,並將Groovy用作域特定語言(DSL)。 它具有Maven功能的強大功能和靈活性,例如構建生命週期和易用性。

為什麼選擇Gradle? 為什麼現在?

構建工具的響應是通過非標準擴展機制添加腳本功能。 您最終將腳本代碼與XML混合或從構建邏輯調用外部腳本。 很容易想像,您需要隨著時間的推移添加越來越多的自定義代碼。 因此,您不可避免地會引入意外的複雜性,並且可維護性也會出現在窗口之外。

假設您要在構建項目的發布版本時將文件複製到特定位置。 要識別版本,請在描述項目的元數據中檢查字符串。 如果它匹配特定的編號方案(例如,1.0-RELEASE),則將文件從A點複製到B點。從外部角度來看,這聽起來像是一件小事。 如果你不得不依賴於XML,許多傳統工具的構建語言表達這種簡單的邏輯變得相當困難。

Java構建工具的演變

Java構建邏輯必須用XML來描述。 XML很適合描述分層數據,但是在表達程序流和條件邏輯方面卻不足。 隨著構建腳本的複雜性增長,維護構建代碼變成了一場噩夢。

在Ant中 ,您使JAR目標取決於編譯目標。 Ant沒有給出關於如何構建項目的指導。 儘管它允許最大的靈活性,但Ant使每個構建腳本都是獨特且難以理解的。 通常您的項目所需的外部庫被檢入到版本控制中,因為沒有自動機制將它們從中央位置拉出。

Maven 1於2004年7月發布,試圖緩解這一過程。 它提供了一個標準化的項目和目錄結構,以及依賴管理。 不幸的是,定制邏輯很難實現

Gradle正好適合那一代構建工具,滿足現代構建工具的許多要求(圖1)。 它提供了一個富有表現力的DSL,一個關於配置方法的約定和強大的依賴管理。 它放棄XML並引入動態語言Groovy來定義構建邏輯是正確的舉措。 聽起來很有吸引力,不是嗎?

Gradle結合了其他構建工具的最佳功能。

Gradle的強大功能集

為什麼使用Gradle而不是Ant或Maven構建Java項目?

Android的默認構建工具(以及JVM上構建工具的新星)旨在簡化複雜的多語言構建的腳本編寫。 如果你使用Ant或Maven,你應該改變它嗎?

在構建腳本中解鎖Gradle的強大功能的關鍵在於發現和應用其領域模型,如下圖所示。

Gradle無法知道特定於您企業構建的所有需求。 通過將生命週期中的鉤子暴露出來,Gradle允許監視和配置構建腳本的執行行為。

Gradle通過暴露在Groovy中實現的DSL來為其模型建立詞彙表。 在處理複雜的問題領域時,在這種情況下,構建軟件的任務,能夠使用通用語言來表達您的邏輯可能是一個強大的工具。

另一個例子是你可以表達依賴到外部庫的方式,這是構建工具解決的一個非常常見的問題。 開箱即用的Gradle為您的構建腳本提供了兩個配置塊,允許您定義要從中檢索它們的依賴項和存儲庫。 如果標準DSL元素不適合您的需求,您甚至可以通過Gradle的擴展機制引入自己的詞彙。

與其他構建工具集成

如下圖所示,Gradle與其前任的Ant,Maven和Ivy很好地搭配。

從構建到部署實現項目自動化

在圖像中:部署管道的階段。

  • 編譯代碼

  • 運行單元和集成測試

  • 執行靜態代碼分析並生成測試覆蓋率

  • 創建分配

  • 配置目標環境

  • 部署可交付物

  • 執行煙霧和自動功能測試

我提到兩個教程來編寫答案 two


Gradle is an automated build toolkit that allows the way in which projects are built to be configured and managed through a set of build configuration files. This includes defining how a project is to be built, what dependencies need to be fulfilled for the project to build successfully and what the end result (or results) of the build process should be. The strength of Gradle lies in the flexibility that it provides to the developer. The Gradle system is a self-contained, command-line based environment that can be integrated into other environments through the use of plug-ins. In the case of Android Studio, Gradle integration is provided through the appropriately named Android Studio Plug-in.


Gradle is an automated build toolkit that allows the way in which projects are built to be configured and managed through a set of build configuration files. This includes defining how a project is to be built, what dependencies need to be fulfilled for the project to build successfully and what the end result (or results) of the build process should be. The strength of Gradle lies in the flexibility that it provides to the developer. The Gradle system is a self-contained, command-line based environment that can be integrated into other environments through the use of plug-ins. In the case of Android Studio, Gradle integration is provided through the appropriately named Android Studio Plug-in.

雖然Android Studio插件允許在Android Studio中啟動和管理Gradle任務,但Gradle命令行包裝仍可用於構建基於Android Studio的項目,包括未安裝Android Studio的系統。

構建項目的配置規則在Gradle構建文件和基於Groovy編程語言的腳本中聲明。


The Android build system compiles app resources and source code, and packages them into APKs that you can test, deploy, sign, and distribute. Android Studio uses Gradle , an advanced build toolkit, to automate and manage the build process, while allowing you to define flexible custom build configurations. Each build configuration can define its own set of code and resources, while reusing the parts common to all versions of your app. The Android plugin for Gradle works with the build toolkit to provide processes and configurable settings that are specific to building and testing Android applications.


作者@Brian Gardner:

Gradle是編程項目的擴展構建工具和依賴管理器。 它具有基於Groovy的特定於域的語言。 Gradle還為包括Java,Android和Scala在內的許多類型的項目提供了構建約會支持。

Gradle特性:

  1. 依賴管理
  2. 使用Gradle中的Ant
  3. Gradle插件
  4. Java插件
  5. Android插件
  6. 多項目構建

冒著被推論的風險,我認為背後是Android Studio / Gradle體驗為何如此糟糕的問題。

典型的Clojure體驗:

  • 下載project.clj中列出的依賴項目。
  • 感謝Clojars和Maven,Leiningen得到了依賴。
  • 項目編譯。

典型的Android Studio / Gradle體驗:

  • “導入我的Eclipse項目”。
  • 確定項目已導入。
  • Gradle正在做這件事......等等......等等......等等...... Gradle已經結束了。
  • 編譯...無法編譯,因為我不知道X是什麼/無法找到Y庫。

我不確定這是否是Gradle的錯。 但是“從Eclipse項目導入”看起來很片面。 對於所有Gradle所謂的複雜性和構建系統的優點,Android Studio似乎並沒有很好地從Eclipse導入構建依賴或構建過程。

它不會告訴你它何時無法導入完整的依賴關係圖。 Android Studio沒有提供有關如何解決問題的幫助或提示。 它不會告訴你在Eclipse文件夾中可以手動查找的位置。 它不會告訴你哪個庫似乎不見了。 或者幫助你為他們搜索Maven等。

在2016年,像Leiningen / Clojars或node的npm或Python的pip或Debian apkg(我相信很多類似的其他語言和系統的包管理器)都很好用......缺少依賴關係是過去的事情。

除Android外。 Android Studio現在是唯一一個我仍然可以體驗失踪依賴地獄的地方。

我傾向於說這是Google的錯。 當他們決定從Eclipse轉向Android Studio / Gradle時,他們打破了Android生態系統(以及成千上萬的現有Android項目/在線教程),卻沒有產生強大的轉換過程。 在Eclipse中工作的人不會將它們調整為AS(可能是因為這對他們來說很痛苦)。 試圖在AS中使用這些項目的人遇到了同樣的問題。

無論如何,如果Gradle是這個超級強大的構建系統,為什麼我仍然在sdk管理器中管理大量其他依賴項? 為什麼不需要ndk這樣的項目在Gradle文件中指定它,以便在需要時自動安裝和構建它? 為什麼NDK特別? 類似的目標平台? 為什麼我在IDE中明確地安裝它們,而不是僅僅根據它們檢查我的項目,並將它們全部在幕後排序?


在Android Studio中,Gradle是一個自定義構建工具,用於通過管理依賴關係和提供自定義構建邏輯來構建android包(apk文件)。

APK文件(Android應用程序包)是一個包含特殊格式的zip文件

  • 字節碼
  • 資源(圖像,用戶界面,XML等)
  • 清單文件

使用ADB(Android調試橋)將apk文件簽名並推送到設備,然後執行該文件。


這是Google希望用於Android的新構建工具。 由於它比螞蟻更具可擴展性和實用性,因此被使用。 它旨在增強開發人員的體驗。

您可以在這裡查看來自Android開發團隊的Xavier Ducrohet在Google I / O上的演講。

Xavier和Tor Norbye也在Android Studio上進行了另一場演講,同樣在Google I / O期間


這裡是關於什麼是Gradle以及如何在android studio中使用它的詳細解釋。

探索Gradle文件

  1. 無論何時在Android Studio中創建項目,構建系統都會自動生成所有必需的Gradle構建文件。

Gradle構建文件

  1. Gradle構建文件使用Domain Specific Language or DSLDomain Specific Language or DSL來定義自定義構建邏輯,並與Gradle的Android插件的Android特定元素進行交互。

  2. Android Studio項目由1個或多個模塊組成,這些模塊是可以獨立構建,測試和調試的組件。 每個模塊都有自己的構建文件,因此每個Android Studio項目都包含2種Gradle構建文件。

  3. 頂層構建文件:這是您可以找到構成項目的所有模塊共有的配置選項的位置。

  4. 模塊級構建文件:每個模塊都有自己的Gradle構建文件,其中包含特定於模塊的構建設置。 您將花大部分時間編輯模塊級構建文件,而不是項目的頂級構建文件。

要查看這些build.gradle文件,請打開Android Studio的“項目”面板(通過選擇“項目”選項卡)並展開“Gradle腳本”文件夾。 Gradle Scripts文件夾中的前兩項是項目級和模塊級Gradle構建文件

頂級的Gradle構建文件

每個Android Studio項目都包含一個頂級Gradle構建文件。 這個build.gradle文件是第一個出現在Gradle Scripts文件夾中的項目,並且清楚地標記為Project。

大多數情況下,您不需要對此文件進行任何更改,但了解其內容及其在項目中扮演的角色仍然很有用。

模塊級的Gradle構建文件

除了項目級別的Gradle構建文件之外,每個模塊都有自己的Gradle構建文件。 以下是基本的模塊級Gradle構建文件的註釋版本。

其他Gradle文件

除build.gradle文件外,您的Gradle Scripts文件夾還包含一些其他Gradle文件。 大多數情況下,您不必手動編輯這些文件,因為當您對項目進行任何相關更改時,它們會自動更新。 但是,了解這些文件在您的項目中扮演的角色是個好主意。

gradle-wrapper.properties(Gradle版本)

該文件允許其他人構建代碼,即使他們的計算機上沒有安裝Gradle。 該文件檢查是否安裝了正確版本的Gradle,並在必要時下載必要的版本。

settings.gradle

該文件引用組成項目的所有模塊。

gradle.properties(項目屬性)

該文件包含整個項目的配置信息。 默認情況下它是空的,但是您可以通過將它們添加到此文件中來將各種各樣的屬性應用於您的項目。

local.properties(SDK位置)

該文件告訴Android Gradle插件它可以在哪裡找到您的Android SDK安裝。

注意: local.properties包含特定於Android SDK本地安裝的信息。 這意味著你不應該把這個文件保存在源代碼控制之下。

建議閱讀 - Tutsplus教程

我從此清楚了解了gradle。







build-automation