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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Gradle與項(xiàng)目構(gòu)建

2019-11-09 14:23:01
字體:
供稿:網(wǎng)友

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

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

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

便捷性(Portability)自動(dòng)化(Automation)可重復(fù)性(Repeatability)

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

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


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

在Android Studio中,項(xiàng)目構(gòu)建過程中會(huì)執(zhí)行g(shù)radlew腳本,在沒有Gradle的情況下,從網(wǎng)絡(luò)端下載。在命令臺(tái)上我們可以使用如下方式安裝獨(dú)立的Gradle。

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


Gradle任務(wù)簡介

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


創(chuàng)建簡單任務(wù)

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

這里寫圖片描述

隨后我們編寫一個(gè)build.gradle文件,內(nèi)容如下:

task hello { doLast { 在當(dāng)前目錄執(zhí)行g(shù)radle -q hello,我們可以看到如下運(yùn)行結(jié)果:

這里寫圖片描述

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

這里寫圖片描述

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


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'}

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


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黔西| 固镇县| 武平县| 乐至县| 万全县| 上林县| 正宁县| 镶黄旗| 北海市| 彭州市| 贺州市| 常宁市| 宾阳县| 榆社县| 马尔康县| 宜春市| 岳普湖县| 米易县| 甘肃省| 凤凰县| 勐海县| 容城县| 乐清市| 潍坊市| 扶风县| 萨迦县| 泾源县| 毕节市| 宝应县| 鄂伦春自治旗| 东乌珠穆沁旗| 科技| 温宿县| 高青县| 和田市| 绥中县| 体育| 南召县| 淮南市| 鄂州市| 莱州市|