文章摘要
1局义、創(chuàng)建一個(gè)新的Android Studio項(xiàng)目
2授滓、查看生成的Gradle文件列表
3地技、查看頂級(jí)Gradle構(gòu)建文件
4真屯、查看應(yīng)用程序模塊中的構(gòu)建文件
5誊役、運(yùn)行標(biāo)準(zhǔn)的Gradle任務(wù)
6笼踩、使用Gradle窗口
7逗爹、運(yùn)行構(gòu)建掃描
8、Gradle Jcenter下載庫(kù)地址
一嚎于、創(chuàng)建一個(gè)新的Android Studio項(xiàng)目
下載并安裝Android Studio后掘而,啟動(dòng)應(yīng)用程序。
在歡迎屏幕上于购,單擊標(biāo)題為“啟動(dòng)新的Android Studio項(xiàng)目”的鏈接袍睡,如圖所示。
準(zhǔn)備好后肋僧,單擊下載并安裝Android Studio后斑胜,啟動(dòng)應(yīng)用程序。
在歡迎屏幕上嫌吠,單擊標(biāo)題為“啟動(dòng)新的Android Studio項(xiàng)目”的鏈接止潘,如圖所示。
準(zhǔn)備好后辫诅,單擊下一步凭戴。
在“創(chuàng)建Android項(xiàng)目”屏幕上,將應(yīng)用程序名稱設(shè)置為“HelloWorldGradle”炕矮,將公司域設(shè)置為您自己的(在附圖中使用了
gradle.org)么夫,并為項(xiàng)目位置選擇任何方便的目錄。
然后單擊下一步肤视。
在“目標(biāo)Android設(shè)備”屏幕上档痪,選擇手機(jī)和平板電腦,并從最低SDK下拉列表中選擇任何最近的API級(jí)別邢滑。
該圖顯示了API 19腐螟,這是常見(jiàn)的,但所選擇的值不會(huì)影響本指南的其余部分殊鞭。
在“添加Activity”屏幕上遭垛,選擇“ Empty Activity”,然后單擊“ 下一步 ”操灿。
接受“配置活動(dòng)”屏幕上的所有默認(rèn)值锯仪,然后單擊完成* 。
二趾盐、查看生成的Gradle文件列表
默認(rèn)情況下庶喜,Android Studio將以“Android”模式啟動(dòng)“項(xiàng)目視圖”小腊,如圖所示:
Android項(xiàng)目是Gradle多項(xiàng)目構(gòu)建,具有頂級(jí)build.gradle文件和調(diào)用的子目錄app以及其自己的build.gradle文件久窟。
頂層構(gòu)建文件(Project: HelloWorldGradle)
如圖所示秩冈,app構(gòu)建文件已(Module: app)附加到該文件。
可能會(huì)有兩個(gè)文件gradle.properties斥扛。一個(gè)是項(xiàng)目加載入问。另一個(gè)文件可選,只有當(dāng)您的主目錄gradle.properties的.gradle子目錄中有全局文件時(shí)稀颁,才會(huì)存在芬失。
該文件settings.gradle由Gradle用于配置多項(xiàng)目構(gòu)建。它應(yīng)該由一行組成:
include ':app'
這告訴Gradle app子目錄也是一個(gè)Gradle項(xiàng)目匾灶。
如果在稍后棱烂,您將通過(guò)向?qū)蛟擁?xiàng)目添加一個(gè)Android庫(kù),將創(chuàng)建另一個(gè)項(xiàng)目子目錄并將其添加到此文件阶女。
最后一個(gè)文件被調(diào)用gradle-wrapper.properties颊糜,它配置了所謂的Gradle Wrapper。這樣就可以編譯Android項(xiàng)目秃踩,而無(wú)需首先安裝Gradle衬鱼。
該文件的內(nèi)容應(yīng)類似于:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip
前四行表示當(dāng)包裝器第一次運(yùn)行時(shí),它將下載Gradle分發(fā)并將其存儲(chǔ)在主目錄.gradle/wrapper/dists中的目錄中吞瞪。最后一行顯示的是distributionUrl馁启,它是Gradle將下載指定分布的位置驾孔。
具體版本號(hào)可能與此處顯示的不同(3.4.1)芍秆,URL可能指的是二進(jìn)制版本(-bin),而不是-all本示例中顯示
的complete()版本翠勉。
三妖啥、查看頂級(jí)Gradle構(gòu)建文件
項(xiàng)目build.gradle文件的內(nèi)容應(yīng)該類似于:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.4.0-alpha7'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
- 1、下載插件塊:repositories
- 2对碌、標(biāo)識(shí)Android插件:dependencies
- 3荆虱、頂級(jí)和模塊項(xiàng)目的配置:allprojects
- 4、特設(shè)任務(wù):task clean
Gradle定義了用于構(gòu)建的域特定語(yǔ)言(DSL)朽们,用于構(gòu)建文件中怀读。
該buildscript標(biāo)簽是該DSL的一部分。
它告訴Gradle骑脱,構(gòu)建需要一個(gè)可能不是基線Gradle分布的插件菜枷,并告訴Gradle在哪里找到它。
在這種情況下叁丧,所需的插件是使用坐標(biāo)語(yǔ)法“group:name:version”指定的啤誊,其中組是com.android.tools.build 名稱 gradle岳瞭,版本是 2.4.0-alpha7。
Gradle插件的版本號(hào)經(jīng)常更新蚊锹。
請(qǐng)使用最新的插件瞳筏,因?yàn)樗鼘锌捎玫腻e(cuò)誤修復(fù)和性能改進(jìn)。
當(dāng)Gradle首次構(gòu)建該項(xiàng)目時(shí)牡昆,該插件將被下載并緩存姚炕,因此此任務(wù)僅執(zhí)行一次。
該allprojects
標(biāo)簽保存適用于頂級(jí)項(xiàng)目及其包含的任何子項(xiàng)目的配置詳細(xì)信息丢烘。
在這種情況下钻心,該塊指定從jcenter公共Bintray Artifactory存儲(chǔ)庫(kù)
https://jcenter.bintray.com下載任何所需的依賴關(guān)系。
最后铅协,構(gòu)建文件包含一個(gè)調(diào)用的自定義(或臨時(shí))任務(wù)clean捷沸。
它使用內(nèi)置的任務(wù)類型Delete,并對(duì)其進(jìn)行配置狐史,該clean任務(wù)將刪除
buildDir的rootProject痒给。兩者都是項(xiàng)目屬性,其值默認(rèn)build為此應(yīng)用程序所在的項(xiàng)目中的目錄骏全。
四苍柏、查看應(yīng)用程序模塊中的構(gòu)建文件
打開(kāi)模塊中的build.gradle文件app。第一行是:
apply plugin: 'com.android.application'
這將“應(yīng)用”Android插件(buildscript在頂級(jí)構(gòu)建文件的部分中引用)到當(dāng)前項(xiàng)目姜贡。Gradle中的插件可以為Gradle項(xiàng)目添加自定義任務(wù)试吁,新配置,依賴關(guān)系和其他功能楼咳。在這種情況下熄捍,應(yīng)用Android插件會(huì)添加各種各樣的任務(wù),這些任務(wù)由android下一個(gè)塊組態(tài)母怜。
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "org.gradle.helloworldgradle"
minSdkVersion 19
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'
}
}
}
這些屬性與Gradle構(gòu)建系統(tǒng)相比余耽,與Android相關(guān),對(duì)于這些屬性將不會(huì)在這里進(jìn)行輕描淡寫(xiě)苹熏。簡(jiǎn)而言之:
該compileSdkVersion和buildToolsVersion與Android SDK的關(guān)聯(lián)碟贾,并且應(yīng)該永遠(yuǎn)是每個(gè)最新版本
該defaultConfig部分保存由應(yīng)用程序的所有變體(構(gòu)建類型和變體的組合)共享的屬性。
這applicationId是基于創(chuàng)建應(yīng)用程序時(shí)指定的域名和項(xiàng)目名稱轨域,并且在Google Play商店中必須是唯一的袱耽。
該值minSdkVersion是您愿意為此應(yīng)用程序支持的最小Android API,而targetSdkVersion應(yīng)該是最新的Android版本干发。
該值versionCode應(yīng)該是在將新版本的應(yīng)用程序上傳到Google Play商店之前遞增的整數(shù)朱巨。與此同時(shí),這個(gè)值applicationId告訴Google铐然,這是一個(gè)現(xiàn)有應(yīng)用程序的新版本蔬崩,而不是一個(gè)新的應(yīng)用程序恶座。
該versionName值用于您自己的內(nèi)部版本跟蹤。
該testInstrumentationRunner屬性配置為使用為Android應(yīng)用程序配置的JUnit 4測(cè)試運(yùn)行器沥阳。
在這一節(jié)下面是一個(gè)叫做“塊”的塊buildTypes跨琳。默認(rèn)情況下,Android應(yīng)用程序支持兩種構(gòu)建類型桐罕,debug和release脉让。此部分允許您配置你喜歡的一個(gè)。該debug部分在此處未顯示功炮,這意味著debug正在使用的所有默認(rèn)設(shè)置溅潜。
在android塊之后,有一個(gè)塊顯示用于此應(yīng)用程序的庫(kù)薪伏。
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.3.1'
testCompile 'junit:junit:4.12'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
}
配置依賴關(guān)系是構(gòu)建Gradle應(yīng)用程序的基礎(chǔ)滚澜。在這種情況下,dependencies部分顯示的值compile嫁怀,testCompile和androidTestCompile配置设捐。
首先采取最簡(jiǎn)單的方法,testCompile依賴關(guān)系只包含最新穩(wěn)定的JUnit 4分發(fā)塘淑。JUnit類和測(cè)試注釋將在編譯時(shí)在src/test/java層次結(jié)構(gòu)中可用萝招。
該androidTestCompile依賴性是指咖啡的測(cè)試庫(kù),用于Android應(yīng)用程序的集成測(cè)試存捺。在這種情況下槐沼,請(qǐng)求沒(méi)有support-annotations通常包含的庫(kù)的Espresso ,因?yàn)橐呀?jīng)通過(guò)其他依賴關(guān)系包含了不同的版本捌治。在稍后的步驟中岗钩,您將看到如何找出包含該庫(kù)的版本以及為什么。
最后具滴,有三行添加依賴關(guān)系的compile配置:
第一個(gè)凹嘲,fileTree(dir: 'libs', include: ['*.jar'])是fileTree將文件libs夾中的任何jar文件添加到編譯類路徑的依賴項(xiàng)
第二個(gè),com.android.support:appcompat-v7:25.3.1將Android兼容性庫(kù)添加到項(xiàng)目中构韵。這允許您在任何Android應(yīng)用程序中使用與SDK版本7一樣的材料設(shè)計(jì)主題和其他功能
最后一行,com.android.support.constraint:constraint-layout:1.0.2將新的約束布局添加到項(xiàng)目中趋艘。結(jié)合兼容性庫(kù)疲恢,您可以創(chuàng)建具有最新布局功能的應(yīng)用程序
五、運(yùn)行標(biāo)準(zhǔn)Gradle任務(wù)
Android Studio可以輕松地通過(guò)IDE構(gòu)建和部署應(yīng)用程序的調(diào)試版本瓷胧,但最終仍然涉及到Gradle显拳。要查看此內(nèi)容,請(qǐng)?jiān)贏ndroid Studio中打開(kāi)終端窗口(或打開(kāi)外部命令提示符并導(dǎo)航到應(yīng)用程序的根目錄)搓萧。從那里你可以運(yùn)行build任務(wù)杂数。
$ ./gradlew build
這將執(zhí)行許多任務(wù)宛畦,最終返回“建立成功”。要查看所產(chǎn)生的APK(Android軟件包揍移,Android應(yīng)用的可部署版本)次和,請(qǐng)查看目錄app/build/outputs/apk。在那里你會(huì)發(fā)現(xiàn)兩個(gè)文件:
app-debug.apk
app-release-unsigned.apk
調(diào)試APK是將部署到仿真器或連接設(shè)備的版本那伐。如果要部署APK踏施,您需要首先創(chuàng)建一個(gè)簽名配置,這超出了本指南的范圍罕邀,但這是資源中描述的一個(gè)簡(jiǎn)單的過(guò)程畅形。
從終端,您還可以找出support-annotations項(xiàng)目中正在使用的模塊的版本诉探。為此日熬,首先dependencies在app項(xiàng)目中運(yùn)行任務(wù),compile僅查詢配置的詳細(xì)信息肾胯。
$ ./gradlew :app:dependencies --configuration compile
:app:dependencies
------------------------------------------------------------
Project :app
------------------------------------------------------------
compile - Classpath for compiling the main sources.
+--- com.android.support:appcompat-v7:25.3.1
| +--- com.android.support:support-annotations:25.3.1
| +--- com.android.support:support-v4:25.3.1
| | +--- com.android.support:support-compat:25.3.1
| | | \--- com.android.support:support-annotations:25.3.1
| | +--- com.android.support:support-media-compat:25.3.1
| | | +--- com.android.support:support-annotations:25.3.1
| | | \--- com.android.support:support-compat:25.3.1 (*)
| | +--- com.android.support:support-core-utils:25.3.1
| | | +--- com.android.support:support-annotations:25.3.1
| | | \--- com.android.support:support-compat:25.3.1 (*)
| | +--- com.android.support:support-core-ui:25.3.1
| | | +--- com.android.support:support-annotations:25.3.1
| | | \--- com.android.support:support-compat:25.3.1 (*)
| | \--- com.android.support:support-fragment:25.3.1
| | +--- com.android.support:support-compat:25.3.1 (*)
| | +--- com.android.support:support-media-compat:25.3.1 (*)
| | +--- com.android.support:support-core-ui:25.3.1 (*)
| | \--- com.android.support:support-core-utils:25.3.1 (*)
| +--- com.android.support:support-vector-drawable:25.3.1
| | +--- com.android.support:support-annotations:25.3.1
| | \--- com.android.support:support-compat:25.3.1 (*)
| \--- com.android.support:animated-vector-drawable:25.3.1
| \--- com.android.support:support-vector-drawable:25.3.1 (*)
\--- com.android.support.constraint:constraint-layout:1.0.2
\--- com.android.support.constraint:constraint-layout-solver:1.0.2
(*) - dependencies omitted (listed previously)
BUILD SUCCESSFUL
從輸出中可以看出碍遍,support-annotations模塊25.3.1是appcompat-v7庫(kù)的依賴。
查看所需版本的另一種方法是使用dependencyInsight任務(wù)阳液。運(yùn)行以下命令(全部在一行)怕敬。
$ ./gradlew :app:dependencyInsight --dependency support-annotations \
--configuration compile
:app:dependencyInsight
com.android.support:support-annotations:25.3.1
+--- com.android.support:appcompat-v7:25.3.1
| \--- compile
+--- com.android.support:support-compat:25.3.1
| +--- com.android.support:support-v4:25.3.1
| | \--- com.android.support:appcompat-v7:25.3.1 (*)
| +--- com.android.support:support-vector-drawable:25.3.1
| | +--- com.android.support:appcompat-v7:25.3.1 (*)
| | \--- com.android.support:animated-vector-drawable:25.3.1
| | \--- com.android.support:appcompat-v7:25.3.1 (*)
| +--- com.android.support:support-media-compat:25.3.1
| | +--- com.android.support:support-v4:25.3.1 (*)
| | \--- com.android.support:support-fragment:25.3.1
| | \--- com.android.support:support-v4:25.3.1 (*)
| +--- com.android.support:support-core-utils:25.3.1
| | +--- com.android.support:support-v4:25.3.1 (*)
| | \--- com.android.support:support-fragment:25.3.1 (*)
| +--- com.android.support:support-core-ui:25.3.1
| | +--- com.android.support:support-v4:25.3.1 (*)
| | \--- com.android.support:support-fragment:25.3.1 (*)
| \--- com.android.support:support-fragment:25.3.1 (*)
+--- com.android.support:support-core-ui:25.3.1 (*)
+--- com.android.support:support-core-utils:25.3.1 (*)
+--- com.android.support:support-media-compat:25.3.1 (*)
\--- com.android.support:support-vector-drawable:25.3.1 (*)
(*) - dependencies omitted (listed previously)
BUILD SUCCESSFUL
無(wú)論是dependency和dependencyInsight任何Gradle項(xiàng)目任務(wù)是可用的。他們可以幫助您跟蹤和解決庫(kù)版本沖突的任何問(wèn)題帘皿。
六东跪、使用Gradle窗口
Android Studio包含一個(gè)用于執(zhí)行Gradle任務(wù)的特殊窗口。Android項(xiàng)目提供超過(guò)80個(gè)不同的任務(wù)鹰溜,此窗口嘗試將其組織到類別中虽填。
打開(kāi)下面的Tasks文件夾:app,然后查看該android類別曹动。下圖顯示了一個(gè)例子斋日。
由于signingReport任務(wù)不需要任何參數(shù),您可以直接雙擊它來(lái)執(zhí)行墓陈。結(jié)果如下圖所示恶守。
該signingReport任務(wù)告訴您公鑰在哪里存儲(chǔ)(這里是debug.keystore用戶根目錄下的文件),其別名及其MD5和SHA1散列贡必。
請(qǐng)注意兔港,目前沒(méi)有釋放密鑰。查看install類別中Gradle窗口中列出的任務(wù)仔拟,如下圖所示衫樊。
你會(huì)看到有一個(gè)installDebug任務(wù)和一個(gè)uninstallDebug任務(wù),一個(gè)uninstallRelease任務(wù),甚至一個(gè)uninstallAllTask科侈。然而载佳,由于缺席而顯而易見(jiàn),這是一項(xiàng)installRelease任務(wù)臀栈。該任務(wù)僅在您創(chuàng)建發(fā)布密鑰的簽名配置時(shí)可用蔫慧,Gradle可用于創(chuàng)建簽名的發(fā)行版APK。
如果您現(xiàn)在要啟動(dòng)多個(gè)仿真器或附加多個(gè)設(shè)備挂脑,則可以通過(guò)執(zhí)行installDebug任務(wù)將應(yīng)用程序部署到所有這些設(shè)備中藕漱。
$ ./gradlew installDebug
這不同于通過(guò)IDE運(yùn)行應(yīng)用程序。在這種情況下崭闲,您將選擇單個(gè)連接的設(shè)備或仿真器肋联,并且將安裝該應(yīng)用程序并啟動(dòng)它。installDebugGradle 的任務(wù)將會(huì)在所有連接的設(shè)備上部署應(yīng)用程序刁俭,盡管它不會(huì)啟動(dòng)任何應(yīng)用程序橄仍。結(jié)果將與下圖相似。
您可以像往常一樣雙擊圖標(biāo)來(lái)啟動(dòng)應(yīng)用程序牍戚。您也可以使用uninstallAll任務(wù)刪除該應(yīng)用程序侮繁。
$ ./gradlew uninstallAll
這將從所有連接的設(shè)備中刪除該應(yīng)用。
七如孝、運(yùn)行構(gòu)建掃描
構(gòu)建掃描會(huì)生成關(guān)于構(gòu)建的所有依賴項(xiàng)宪哩,插件,測(cè)試輸出和性能的完整報(bào)告第晰。您可以通過(guò)--scan使用版本3.4及以上版本的任何Gradle命令附加標(biāo)志锁孟,或使用-Dscan早期版本的Gradle上的標(biāo)志來(lái)請(qǐng)求構(gòu)建掃描。
為了使用構(gòu)建掃描茁瘦,您需要添加構(gòu)建掃描插件并同意許可證品抽。有關(guān)詳細(xì)信息,請(qǐng)參閱...中的Build Scan入門指南甜熔,但總而言之圆恤,將以下部分添加到頂級(jí)build.gradle文件:
buildscript {
repositories {
jcenter()
maven { url 'https://plugins.gradle.org/m2' }
}
dependencies {
classpath 'com.android.tools.build:gradle:2.4.0-alpha7'
classpath 'com.gradle:build-scan-plugin:1.7.1'
}
}
apply plugin: com.gradle.build-scan
buildScan {
licenseAgreementUrl = 'https://gradle.com/terms-of-service'
licenseAgree = 'yes'
}
現(xiàn)在當(dāng)你運(yùn)行:
$ ./gradlew build --scan
您將收到一個(gè)鏈接到結(jié)果,托管在Gradle腔稀。結(jié)果頁(yè)面將類似于:
隨意探索所有細(xì)節(jié)盆昙。該報(bào)告包含許多功能的信息,包括依賴關(guān)系烧颖。如果您挖掘依賴關(guān)系部分并打開(kāi)_debugCompile配置弱左,appcompat-v7庫(kù)內(nèi)部是support-annotations前面描述的庫(kù)。
構(gòu)建掃描是分析您的構(gòu)建的有效方式炕淮。