国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

Gradle與項目構建

2019-11-09 15:29:05
字體:
來源:轉載
供稿:網(wǎng)友

最近發(fā)現(xiàn)有好多朋友問和Gradle相關的東西,于是決定寫一系列博客,簡單備用。

隨著項目的逐步擴大與Android市場上應用需求的多樣化,越來越多的應用需要集成眾多的三方庫與其它依賴,在Google推出的最新idea Android Studio中,引入Gradle用于項目構建工具,那么構建工具有什么優(yōu)勢呢?

構建工具的主要優(yōu)勢有以下幾點:

便捷性(Portability)自動化(Automation)可重復性(Repeatability)

那么構建工具有很多(PS:ANT),為什么要選擇Gradle呢?

主要原因還是Google粑粑在Android Studio中選用Gradle作為idea的構建系統(tǒng),事實上,Android Studio將整個應用的構建過程指派給了Gradle,當點擊”運行”按鈕時,Android studio會在運行過程中設置Gradle并在后臺監(jiān)控,通過學習Gradle相關知識,我們可以擴展該默認行為以構建能力更強且經(jīng)過適當測試的Android應用。Gradle使得開發(fā)人員只需通過點擊按鈕就可以自動構建和測試應用,針對依賴和變種的管理也更加方便。另外Gradle是一種用于編寫構建腳本的緊湊且強大的構建語言。


說了這么多,怎么安裝Gradle呢?

在Android Studio中,項目構建過程中會執(zhí)行gradlew腳本,在沒有Gradle的情況下,從網(wǎng)絡端下載。在命令臺上我們可以使用如下方式安裝獨立的Gradle。

最新版的Gradle要求JDK或者JRE版本在1.7以上,所以先運行java -version查看JDK版本,過低先更新,隨后使用包管理工具進行安裝,在類Unix系統(tǒng)上使用SDKMAN,命令是sdk install gradle 3.3,在MAC上使用HomeBrew,命令是brew install gradle,在Windows上使用Chocolatey,命令是choco install gradle。隨后并不需要其他的手動安裝。


Gradle任務簡介

對于Gradle而言,它的一個優(yōu)勢就是可擴展域模型,這個模型的核心就是任務(PS:task),任務是一種Grale可以推斷出的自約束工作單元,任務的關鍵是任務所進行的操作,比如我們會新建一個任務用于編譯某些java源文件,或者把一個文件從A目錄復制到B目錄又或者只是打印Hello,任務可以單獨執(zhí)行操作也可以聲明對其他任務的依賴,Gradle會確保所有的這些依賴都在運行并確保它們所有的依賴性等等,任務還可以定義輸入和輸出,它所讀取及所寫入的文件,這使得Gradle能確定任務是否需要執(zhí)行自己的工作或者所有的內容是否是最新狀態(tài),在這種情況下,它不需要運行。


創(chuàng)建簡單任務

使用gradle -V命令查看Gradle版本,截圖如下:

這里寫圖片描述

隨后我們編寫一個build.gradle文件,內容如下:

task hello { doLast { 在當前目錄執(zhí)行gradle -q hello,我們可以看到如下運行結果:

這里寫圖片描述

通過上述運行結果我們可以看出,在這里這個腳本只是簡單定義了一個名為hello的task,當執(zhí)行gradle hello時,Gradle先執(zhí)行名為hello的task,隨后執(zhí)行task中的動作,在這個task中所進行的動作就是輸出Hello world!-q的意思是簡潔輸出,不輸出日志,執(zhí)行gradle hello的運行效果如下圖:

這里寫圖片描述

Gradle需要執(zhí)行大量工作才能啟動,這主要是因為它需要調起java虛擬機實例,使用Gradle Demon可以縮短這一啟動時間,Gradle Demon是一種掛靠在操作系統(tǒng)后臺的進程,當Gradle使用Gradle Demon時,一個Gradle Demon已經(jīng)啟動完成并長期運行于后臺,保證JBM實例處于活動狀態(tài),隨后的Gradle都可以使用相同的實例運行,默認情況下,,當在命令行執(zhí)行Gradle時,Android Studio會使用這種模式,但是必須明確指定啟用這種模式。


Gradle的前世

apply plugin: 'com.android.application'android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { applicationId "com.example.zbtuo.opengltriangles" minSdkVersion 15 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.1.0' testCompile 'junit:junit:4.12'}

上面是一個build.gradle的完整文件,從上述代碼可以看出這是一種類似于分拆式JSON的語法.在最后可以看到一個名為hello的任務,用于輸出”Hello world!”,Gradle文件是按照Gradle提供的特殊用途的構建語言編寫的,它基于一個叫Groovy的通用腳本編制語言,Groovy對一些功能進行了語法改進使我們可以編寫語言比使用java等代碼看起來更自然的構建腳本。其次Groovy與Java完美集成,這是Gradle平臺使用的編寫語言,在使用Gradle時需要了解的主要內容是Android和task等關鍵字所來源于的Gradle構建語言,但是這對了解此構建語言如何以Groovy和Java為基礎很有幫助。整個構建腳本具有所謂的委托對象,它會向構建腳本內的Groovy腳本編制語言公開Gradle構建語言。如果編寫了一個Gradle插件,則可以用任何語言編寫它并使用相同的委托對象。Gradle構建語言也稱為Gradle DSL或域特定語言。域特定語言是針對特定任務精心定制的語言,在這個案例中,我們所談到的域是Android構建,請注意描述構建和提供有關,如何讓構建實現(xiàn)的說明之間存在巨大的差異。Gradle DSL聲明為使你僅負責描述構建而且Gradle本身知道如何使其實現(xiàn),這意味著你的構建腳本可能會短得多而且容易理解得多,但是在構建腳本內有一個可由你處理的完全成熟且強大的編程語言。我們衷心建議你保持構建腳本的聲明性并且盡量不要用低級邏輯污染它,這正是Gradle插件的用途,你可以采用Groovy,Java或Scala等任何JVM語言來編寫它們。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 文水县| 荃湾区| 南和县| 庆元县| 汝城县| 侯马市| 云南省| 新野县| 临城县| 周口市| 余干县| 南和县| 湖南省| 遵义县| 郯城县| 虹口区| 元江| 阳春市| 丽水市| 香格里拉县| 抚宁县| 武邑县| 额尔古纳市| 阳西县| 大悟县| 遂溪县| 兴山县| 茂名市| 土默特左旗| 汤原县| 维西| 阿鲁科尔沁旗| 兴国县| 大兴区| 宜君县| 武义县| 涟源市| 延川县| 遂昌县| 白玉县| 湟源县|