標籤:android
AndroidStudio使用教程(第四彈)Gradle
講解到這裡我感覺有必要說明一下Gradle。
Gradle是一個基於Apache Ant和Apache Maven概念的項目自動化建構工具。它使用一種基於Groovy的特定領域語言來聲明項目設定,而不是傳統的XML.
更多介紹請直接參考Gradle或Google搜尋。
以下是為什麼Android Studio選擇Gradle的主要原因:
- 使用領域專用語言(Domain Specific Language)來描述和處理構建邏輯。(以下簡稱DSL)
- 基於Groovy。DSL可以混合各種聲明元素,用代碼操控這些DSL元素達到邏輯自訂。
- 支援已有的Maven或者Ivy倉庫基礎建設
- 非常靈活,允許使用best practices,並不強制讓你遵照它的原則來。
- 其它外掛程式時可以暴露自己的DSL和API來讓Gradle構建檔案使用。
- 允許IDE整合,是很好的API工具
Overview
AndroidStudio build系統是一個你可以用來build, test, run, package your apps的工具。 build系統與Android Studio之間是獨立的,
所以你可以在Android Studio中或者
command line中去執行。寫完自己的應用程式之後,你可以用build系統來做以下事情:
- 自訂、配置和擴充build過程.。
- 用同一個工程根據不同的特性來建立多個APK。
- 重複利用代碼和資源。
Android Studio靈活的build系統能讓你不用修改項目和核心檔案而完成上面所有的工作。
Overview of the Build System
Android Studio的構建系統包含一個Gradle的Android外掛程式,Gradle是一個管理依賴關係並且允許自訂構建邏輯的進階構建工具。 許多軟體都用Gradle來進行構建。
Gradle的Android外掛程式並不依賴Android Studio, 雖然Android Studio全部整合了Gralde, 這就意味著:
- 你可以用用命令列的方式去構建Android應用或者是在一些沒有安裝Android Studio的機器上。
- 你可以用命令列構建時的配置和邏輯來在Android Studio中進行構建Android項目。
不管你是通過命令列還是遠程機器或者是Android Studio來進行構建的產出都是一致的。
Build configuration
項目的構建配置都在Gralde build files中, 都是些符合Gradle要求的選項和文法,Android外掛程式並不依賴Android
通過build檔案來配置一下幾個方面:
-Build variants構建系統能對同一個項目通過不同的配置產生多個APK,當你想構建多個不同版本時這是非常有用的,因為不用為他們建立多個不同的項目。
-Dependencies構建系統管理項目的依賴關係,並且支援本地已經遠程倉庫的依賴關係。 這樣你就不用再去搜尋、下載,然後再拷貝相應的包到你工程的目錄了。
-Manifest entries構建系統能夠通過構建配置去指定資訊清單檔中中某些元素的值。 當你想產生一些包名、最低SDK版本或目標SDK版本不同的APK時是非常有用的。
-Signing構建系統能在build配置中設定指定的簽名, 在構建的構成會給APK進行簽名。
-ProGuard構建系統允許根據不同的構建配置設定不同的混淆規則, 在構建的過程中會運行ProGuard來對class檔案進行混淆。
-Testing構建系統會根據項目中的測試代碼產生一個測試APK, 這樣就不需要建立一個單獨的測試工程了, 在構建的過程中會運行相應的測試功能。
Gradle構建檔案使用Groovy文法,Groovy是一門可以自訂構建邏輯並且能通過Gradle的Android外掛程式與Android`一些特定元素通訊的語言。
Build by convention
Android Studio構建系統對項目結構和一些其他的構建選項做了一些很好的預設規範聲明,如果你的項目符合這些條件,Gradle的構建檔案就非常簡單了。 如果你的項目不符合
其中的一些要求, 靈活的構建系統也允許你去配置幾乎所有的構建選項。例如你項目的源碼沒有放在預設的檔案夾中,你可以通過build檔案去配置它的位置。
Projects and modules
Android Studio中的Project代表了一個完整的Android應用,每個Project中可以有一個或多個Module。 Module是應用中可以單獨build, test或debug的組件。
Module中包含應用中的源碼和資源檔, Android Studio中的Project包含以下三種Module:
- 包含可複用代碼的Java library modules. 構建系統對Java library module會產生一個JAR包。
- 有可複用Android代碼和資源的Android library modules. 對該library modules構建系統會產生一個AAR(Android ARchive)包。
- 有應用代碼或者也可能是依賴其他library modules的Android application modules, 雖然很很多Android應用都只包含一個application module.
對於application modules
構建系統會產生一個APK包。
Android Studio projects在project的最外城都包含一個列出所有modules的Gradle build file, 每個module也都包含自己的Gradle build file.
Dependencies
Android Studio的構建系統管理著依賴項目並且支援module依賴, 本地二進位檔案依賴和遠程二進位檔案的依賴。
Module Dependencies
一個項目的module可以在構建未見中包含一系列所依賴的其他modules, 在你構建這個module的時候,系統回去組裝這些所包含的modules.
Local Dependencies
如果本地檔案系統中有module所依賴的二進位包如JAR包, 你可以在該module中的構建檔案中聲明這些依賴關係。
Remote Dependencies
當你的依賴是在遠程倉庫中,你不需要去下載他們然後拷貝到自己的工程中。 Android Studio支援遠程Maven依賴。 Maven是一個流行的專案管理工具,
它可以使用倉庫協助組織項目依賴。
許多優秀的軟體類庫和工具都在公用的Maven倉庫中, 對於這些依賴只需按照遠程倉庫中不同元素的定義來指定他們的Moven位置即可。
構建系統使用的Maven位置格式是group:name:version. 例如Google Guava16.0.1版本類庫的Maven座標是
com.google.guava:guava:16.0.1.
Maven Central Repository現在被廣泛用於分發許多類庫和工具。
下面分別為以上三種依賴關係的配置;
dependencies { compile project(":name") compile fileTree(dir: ‘libs‘, include: [‘*.jar‘]) compile ‘com.google.guava:guava:16.0.1‘}
Build tasks
Android Studio構建系統定義了一些列的構建任務, 進階別的任務調用一些產出必要輸出的任務。 構建系統提供了project tasks來構建app和module tasks
來獨立的構建modules.
可以通過Andorid Studio或者命令列看到當前可用任務的列表,並且執行裡面的任務。
The Gradle wrapper
Android Studio項目包含了Gradle wrapper, 包括:
- A JAR file
- A properties file
- A shell script for Windows platforms
- A shell script for Mac and Linux platforms
聲明:需要把這些檔案提交到代碼控制系統。
使用Gradle wrapper(而不用本地安裝的Gradle)能確保經常回合組態檔案中配置的Gralde版本。 通過在設定檔中定義最新的版本來確保你的工程一直使用最新版的Gradle。
Android Studio從你項目中的Gradle wrapper目錄讀取設定檔,並且在該目錄運行wrapper, 這樣在處理多個需要不同Gradle版本的項目時就會遊刃有餘。
聲明:Android Studio不使用shell指令碼,所以對於他們的任何改變在IDE構建時都不會生效,你應該在Gradle build files中去設定自訂的邏輯。
你可以在開發及其或者是一些沒有安裝Android Studio的及其上使用命令列運行shell指令碼來構建項目。
直接:
- 郵箱 :[email protected]
- Good Luck!
AndroidStudio使用教程(第四彈)