Android Gradle插件繼承于Java插件酥筝,具有Java插件的的特性梅忌;現(xiàn)在就新建1個(gè) APP工程,演示App的工程目錄悦施,以及開發(fā)中常用的Gradle配置;
新建了1個(gè)APP工程去团,上圖就是工程常用的App工程目錄抡诞;
其中包括app Project穷蛹,和rootProject;
每個(gè)Project都 包含1個(gè)build.gralde文件,其中rootProject還包含1個(gè)settings.gralde文件昼汗;
現(xiàn)在先來分析rootProject肴熏,App工程的根目錄
build.gradle 配置文件:
repositories 配置倉庫,默認(rèn)依賴的是google和jcenter顷窒,當(dāng)我們配置依賴倉庫的時(shí)候蛙吏,Gradle就會(huì)去倉庫里尋找我們的依賴;
dependencies:也是配置依賴鞋吉,由于Gradle是屬于第三方的插件鸦做,所以需要依賴于他們的classPath
allprojects 是針對于所有的工程項(xiàng)目配置,在根目錄配置谓着,子目錄就不需要重復(fù)配置了
現(xiàn)在我們接著看根目錄下的settings.gralde
接著創(chuàng)建1個(gè)Moudle泼诱,命名為Lib_test;
此時(shí)看settings.gralde文件
需要在工程內(nèi)配置的Moudle都需要此文件中注冊
此外工程中還有
local.properties:配置工程的sdk和ndk目錄
工程的gradle文件夾
該文件夾下有個(gè)wrapper,wrapper其實(shí)就是對Gradle的一層包裝,我們在項(xiàng)目開發(fā)中赊锚,其實(shí)是有的都是Wrapper這種方式治筒,內(nèi)部是一堆的腳本,所以我們在工程中沒有配置gradle的時(shí)候舷蒲,提示的也不是noFound耸袜,而是提示下載并構(gòu)建;
gradle-wrapper.properties內(nèi)部是這樣的
其中distributionUrl我們需要稍微關(guān)注下阿纤,決定了我媽媽依賴的是哪個(gè)版本的Gradle句灌,上圖可以看到我的工程依賴的就是4.6版本;
好了以上計(jì)算rootProject目錄下的文件解釋欠拾,現(xiàn)在接著看下我們主工程(app)下的文件
Android Gradle的工程配置胰锌,都是在andorid{}中,這個(gè)是唯一的1個(gè)入口藐窄,通過在它內(nèi)部的配置资昧,我們可以對Android Gradle工程進(jìn)行自定義的配置;
我們先解釋下標(biāo)準(zhǔn)配置荆忍,之后在開始對gradle的自定義格带;
App插件id:com.android.application
Library的插件id:com.android.library
Test插件id:com.android.test
由于我們app的一個(gè)APP工程,所以使用apply plugin:'com.android.application' 依賴該插件
接著看android{}中的配置
compileSdkVersion:配置我們編譯的Android 工程的SDK
defaultConfig:默認(rèn)的配置刹枉,它是一個(gè)ProductFlavor,之后會(huì)解釋ProductFlavor叽唱,現(xiàn)在只需要知道ProductFlavor允許我們根據(jù)不同的情況同時(shí)生成多個(gè)不同的apk包即可;
defaultConfig{
applicationId:包名微宝,默認(rèn)null,構(gòu)建的時(shí)候是從AndroidManifest.xml文中讀取的棺亭,也就是manifest中的pack值
minSdkVersion:最低支持的Android系統(tǒng)的ApI
targetSdkVersion:表明我們是基于哪個(gè)Andorid 系統(tǒng)開發(fā)的
versionCode:App應(yīng)用內(nèi)部的版本號(hào)
versionName:App應(yīng)用的版本名稱,對外蟋软,用戶可見
testInstrumentationRunner:默認(rèn)是android.support.test.runner.AndroidJUnitRunner镶摘,配置單元測試時(shí)候使用的Runner
}
buildType{}是1個(gè)域?qū)ο笏宰透鶶ourceSet一樣,有release,debug等不同 的BuildType凄敢;
release{
minifyEnabled:是否啟動(dòng)混淆
proguardFiles:混淆文件
}
dependencies{...}依賴庫
以上就是一個(gè)APP工程默認(rèn)創(chuàng)建的文件解釋碌冶;現(xiàn)在開始我們開始增加1些我們自定義的配置
1:配置測試App的包名,也就是測試包名
2:對生成的App簽名
App工程的debug是有個(gè)默認(rèn)的debug簽名的涝缝,而release版本是沒配置簽名的波丰,所以我們構(gòu)建release版本的時(shí)候就需要自己簽名了获黔;
現(xiàn)在我們就生成2個(gè)簽名文件骚烧,1個(gè)debug環(huán)境使用血筑,1個(gè)在relese環(huán)境使用,保存在app目錄下消恍;
在build.gradle中配置簽名,需要使用到signingConfig{}對生成的app簽名
以上就是配置了App的簽名以现,我們只要在之后的構(gòu)建應(yīng)用類型中使用即可完成簽名
3:構(gòu)建不同的應(yīng)用類型
Android Gradle內(nèi)置了debug和release2種構(gòu)建類型狠怨,這兩種的主要差別就在于能否在設(shè)備上調(diào)試和簽名不一樣,其他文件和資源都是一致的
構(gòu)建不同的應(yīng)用類型主要是在buildTypes里面配置邑遏,那我們就接著看看這里面的可配置修改信息
上圖是常見的支持的debug和release版本的buildTypes佣赖;
minifyEnabled :是否啟動(dòng)混淆
proguardFiles:混淆文件位置
我們構(gòu)建下該情況下的apk,
可見记盒,在還為配置簽名的情況下憎蛤,debug模式默認(rèn)是簽名的,而release版本是未簽名的纪吮;現(xiàn)在配置上簽名
配置上簽名后俩檬,重新Build就多了1個(gè)app-release簽完名的apk文件了
debuggable:配置該apk是否可供調(diào)試
jniDebuggable:配置該apk是否可供調(diào)試jni代碼
multiDexEnabled:配置是否啟用自動(dòng)拆分多個(gè)dex的功能,解決65535
shrinkResources:配置是否自動(dòng)清理未使用的資源碾盟,默認(rèn)是false
zipAlignEnabled :這個(gè)是Android為我們提供的整理優(yōu)化apk文件的工具
以上就是基礎(chǔ)功能的BuildType棚辽,跟BuildType相關(guān)的還有多渠道打包,同樣是構(gòu)建不同的包冰肴;
未完待續(xù)