從Gradle的角度看,Android其實(shí)就是Gradle的一個(gè)第三方插件,它是由Google的Android團(tuán)隊(duì)開發(fā)的。但是從Android的角度看,Android插件是基于Gradle構(gòu)建的,和Android Studio完美搭配的新一代構(gòu)建系統(tǒng)。
1.build.gradle配置參數(shù)
1.1 compileSdkVersion:告訴Gradle用哪個(gè)Android SDK版本編譯你的應(yīng)用,需要強(qiáng)調(diào)的是修改compileSdkVersion不會(huì)改變運(yùn)行時(shí)的行為,它純粹只是在編譯的時(shí)候使用。推薦總是使用最新的SDK進(jìn)行編譯。

1.2 buildToolsVersion
是Android SDK構(gòu)建工具,是構(gòu)建Android應(yīng)用程序所需的Android SDK的一個(gè)組件。它安裝在sdk/build-tools/目錄中,它只是構(gòu)建工具。如下面右圖,我們可以看出SDK platform使我們下載的最新Android SDK編譯版本,前面提到的compileSdkVersion,而SDKTools則是我們下載編譯工具。應(yīng)該始終通過使用Android SDK Manager下載最新版本來更新構(gòu)建工具組件。


image.png
1.3 minSdkVersion
一個(gè)用于指定應(yīng)用運(yùn)行所需最低API級(jí)別的整數(shù)。如果系統(tǒng)的API級(jí)別低于該屬性中指定的值,Android系統(tǒng)將阻止用戶安裝應(yīng)用,應(yīng)該始終聲明該屬性。
我們可以先了解現(xiàn)在市場(chǎng)上手機(jī)各個(gè)版本的占有情況([https://developer.android.com/about/dashboards/](https://developer.android.com/about/dashboards/))通過這個(gè)來幫助我們選擇,通過分析Android4.1x以下的版本占有率僅有0.6%,我們大概可以忽略Android4.1x以下的版本兼容。

image.png
1.4 targetSdkVersion
最重的概念,一個(gè)用于指定應(yīng)用的目標(biāo)API級(jí)別的整數(shù)。如果未設(shè)置,其默認(rèn)值與minSdkVersion指定的值相等。
該屬性用于通知系統(tǒng),您已針對(duì)目標(biāo)版本進(jìn)行測(cè)試,并且系統(tǒng)不應(yīng)啟用任何兼容性行為來保持應(yīng)用于目標(biāo)版本的向前兼容性。targetSdkVersion是Android提供向前兼容的主要依據(jù),在應(yīng)用的targetSdkVersion沒有更新之前系統(tǒng)不會(huì)應(yīng)用最新的行為變化。
要讓應(yīng)用于各Android版本保持同步,并且需要新版本的功能效果,應(yīng)該增加該屬性值,使其與最新API級(jí)別一致,然后再相應(yīng)平臺(tái)版本上對(duì)應(yīng)用進(jìn)行全面測(cè)試。
注意:如果按照上面提示那樣配置,你會(huì)發(fā)現(xiàn)三個(gè)值的關(guān)系是:
minSdkVersion<=targetSdkVersion<=compileSdkVersion(buildToolsVersion)
這種事合理的,如果compileSdkVersion是你的最大值,minSdkVersion是最小值,那么最大值必須至少和最小值一樣大且target必須在兩者之間。
理想上,在穩(wěn)定狀態(tài)下三者的關(guān)系應(yīng)該更像這樣:
minSdkVersion<=targetSdkVersion==compileSdkVersion(latest SDK)
總結(jié)一句話:用較低的minSdkVersion來覆蓋最大的人群,用最新的SDK設(shè)置target和compile來獲得最好的外觀和行為。
1.5 defaultConfig
defaultConfig是默認(rèn)配置,它是一個(gè)ProductFlavor。productFlavor允許我們根據(jù)不同的情況同時(shí)生產(chǎn)多個(gè)不同的apk包。如果不針對(duì)我們自定義的ProductFlavor單獨(dú)配置的話,會(huì)為這個(gè)ProductFlavor使用默認(rèn)的defaultConfig的配置。
1.6 buildTypes
buildTypes是一個(gè)NamedDomainObjectContainer類型,是一個(gè)域?qū)ο?。和SourceSet一樣,SourceSet里面有main、test等,同樣地,buildTypes里面有release、debug等。我們可以在buildTypes{}里新增任意多個(gè)我們需要構(gòu)建的類型,比如debug,Gradle會(huì)幫我們自動(dòng)創(chuàng)建一個(gè)對(duì)應(yīng)的BuildType,名字就是我們定義的名字。
每一個(gè)BuildType都會(huì)生成一個(gè)SourceSet,默認(rèn)位置src/。根據(jù)我們以前講的知識(shí),一個(gè)SourceSet包含源代碼、資源文件等信息,在Android中就包含了我們的Java源代碼、res資源文件以及AndroidManifest文件等。所以針對(duì)不同的BuildType,我們可以單獨(dú)為其指定Java源代碼、res資源等。只要把它們放到src下相應(yīng)的位置即可,
另外需要注意,因?yàn)槊總€(gè)BuildType都會(huì)生成一個(gè)SourceSet,所以新增的BuildType名字一定要注意,不能是main和androidTest,因?yàn)樗鼈儍蓚€(gè)已經(jīng)被系統(tǒng)占用,同時(shí)每個(gè)BuildType之間名稱不同相同。
除了會(huì)生成對(duì)應(yīng)的SourceSet外,每一個(gè)BuildType還會(huì)生成相應(yīng)的assemble任務(wù),比如常用的assembleRelease和assembleDebug就是Android Gradle自動(dòng)生成的兩個(gè)Task任務(wù),它們是release和debug這兩個(gè)BuildType自動(dòng)創(chuàng)建生成的。執(zhí)行相應(yīng)的assemble任務(wù),就能生成對(duì)應(yīng)BuildType的所有apk。
2.Android Gradle 任務(wù)
我們說過,Android插件是基于Java插件,所以Android的插件基本上包含了所有Java插件的功能,包括集成的任務(wù),比如assemble、check、build等。除此之外,Android在大類上海添加了connectedCheck、deviceCheck、lint、install、uninstall等任務(wù),這些是屬于Android特有的功能。
connectedCheck:在所有連接的設(shè)備或者模擬器上運(yùn)行check檢查。
deviceCheck:通過API連接遠(yuǎn)程設(shè)備運(yùn)行checks。
Line在所有的ProductFlavor上運(yùn)行l(wèi)int檢查
install和uninstall:可以直接在我們已連接的設(shè)備上安裝或者卸載你的App。
除此之外,還有一些不太常用的任務(wù),比如signingReport可以打印App的簽名,androidDependencies可以打印Android的依賴。還有其他一些類似的任務(wù),可以通過gradle tasks來查看。