文章摘要
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)用程序名稱(chē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)類(lèi)似于:
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)該類(lèi)似于:
// 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 名稱(chēng) 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下載任何所需的依賴(lài)關(guān)系。
最后,構(gòu)建文件包含一個(gè)調(diào)用的自定義(或臨時(shí))任務(wù)clean。
它使用內(nèi)置的任務(wù)類(lèi)型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ù),新配置,依賴(lài)關(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)建類(lèi)型和變體的組合)共享的屬性。
這applicationId是基于創(chuàng)建應(yīng)用程序時(shí)指定的域名和項(xiàng)目名稱(chē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)建類(lèi)型,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'
}
配置依賴(lài)關(guān)系是構(gòu)建Gradle應(yīng)用程序的基礎(chǔ)。在這種情況下,dependencies部分顯示的值compile,testCompile和androidTestCompile配置。
首先采取最簡(jiǎn)單的方法,testCompile依賴(lài)關(guān)系只包含最新穩(wěn)定的JUnit 4分發(fā)。JUnit類(lèi)和測(cè)試注釋將在編譯時(shí)在src/test/java層次結(jié)構(gòu)中可用。
該androidTestCompile依賴(lài)性是指咖啡的測(cè)試庫(kù),用于Android應(yīng)用程序的集成測(cè)試。在這種情況下,請(qǐng)求沒(méi)有support-annotations通常包含的庫(kù)的Espresso ,因?yàn)橐呀?jīng)通過(guò)其他依賴(lài)關(guān)系包含了不同的版本。在稍后的步驟中,您將看到如何找出包含該庫(kù)的版本以及為什么。
最后,有三行添加依賴(lài)關(guān)系的compile配置:
第一個(gè),fileTree(dir: 'libs', include: ['*.jar'])是fileTree將文件libs夾中的任何jar文件添加到編譯類(lèi)路徑的依賴(lài)項(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ún)配置的詳細(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ù)的依賴(lài)。
查看所需版本的另一種方法是使用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ù),此窗口嘗試將其組織到類(lèi)別中。
打開(kāi)下面的Tasks文件夾:app,然后查看該android類(lèi)別。下圖顯示了一個(gè)例子。

由于signingReport任務(wù)不需要任何參數(shù),您可以直接雙擊它來(lái)執(zhí)行。結(jié)果如下圖所示。

該signingReport任務(wù)告訴您公鑰在哪里存儲(chǔ)(這里是debug.keystore用戶(hù)根目錄下的文件),其別名及其MD5和SHA1散列。
請(qǐng)注意,目前沒(méi)有釋放密鑰。查看install類(lèi)別中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)建的所有依賴(lài)項(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入門(mén)指南,但總而言之,將以下部分添加到頂級(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è)面將類(lèi)似于:

隨意探索所有細(xì)節(jié)。該報(bào)告包含許多功能的信息,包括依賴(lài)關(guān)系。如果您挖掘依賴(lài)關(guān)系部分并打開(kāi)_debugCompile配置,appcompat-v7庫(kù)內(nèi)部是support-annotations前面描述的庫(kù)。

構(gòu)建掃描是分析您的構(gòu)建的有效方式。