參考http://m.itdecent.cn/p/8b8a550246bd,整理為自己需要的方便查看
App
settings.gradle
配置Project和module
include ':app' , ':module1',':module2'
build.gradle
buildscript
gradle自身所使用的資源。可以聲明的資源包括依賴(lài)項(xiàng)、第三方插件、倉(cāng)庫(kù)地址等
repositories
倉(cāng)庫(kù) jcenter()、maven()和google()等
dependencies
配置依賴(lài) classpath:'group:name:version'
ext
自定義屬性
- 只在當(dāng)前配置文件使用的,在當(dāng)前文件定義
ext.xxx_name='xxx',使用的時(shí)候$xxx_name獲取值 - 通用自定義配置,單獨(dú)定義文件
ext{xxx_1='xxx'}在需要使用的文件中apply from: '文件名',使用${xxx_1}獲取值
allprojects
為所有項(xiàng)目提供共同所需依賴(lài)包
task
task clean(type: Delete) {
delete rootProject.buildDir
}
運(yùn)行g(shù)radle clean時(shí),執(zhí)行此處定義的task,刪除根目錄中的build目錄
Module
每個(gè)module都有一個(gè)build.gradle文件
build.gradle
這里主要就是dependencies,和一些plugin。主要介紹下plugin,以'com.android.application'插件為例
plugin
apply plugin:'×××': 二進(jìn)制插件,一般都是被打包在一個(gè)jar里獨(dú)立發(fā)布的
apply from:'×××':應(yīng)用腳本插件,其實(shí)就是把這個(gè)腳本加載進(jìn)來(lái)
插件的作用
- 添加一些task,幫助完成一些工作
- 添加一些依賴(lài)
- 給現(xiàn)有對(duì)象添加一些擴(kuò)展,android{}這個(gè)配置塊就是Android Gradle插件為Project對(duì)象添加的一個(gè)擴(kuò)展
- 對(duì)項(xiàng)目進(jìn)行一些約定,比如應(yīng)用Java插 件之后,約定src/main/java目錄下是我們的源代碼存放位置
com.android.application插件
android{} 是Android插件提供的一個(gè)擴(kuò)展類(lèi)型,可以讓我們自定義Android Gradle工程,是Android Gradle工程配置的唯一入口。下面列舉一下主要的配置項(xiàng)。
- compileSdkVersion 是編譯所依賴(lài)的Android SDK的版本,這里是API Level。
- buildToolsVersion 是構(gòu)建該Android工程所用構(gòu)建工具的版本。
- defaultConfig{} 它是一個(gè)ProductFlavor的默認(rèn)的配置,后面會(huì)介紹ProductFlavor
1. applicationId 包名,app的唯一標(biāo)識(shí)。跟AndroidManifest里面的package是可以不同的。package指的是代碼目錄下路徑;applicationId指的是app對(duì)外發(fā)布的唯一標(biāo)識(shí),會(huì)在簽名、申請(qǐng)第三方庫(kù)、發(fā)布時(shí)候用到。
2. minSdkVersion 是支持的Android系統(tǒng)的api level
3. targetSdkVersion 基于哪個(gè)Android版本開(kāi)發(fā)的
4. versionCode app應(yīng)用內(nèi)部版本號(hào),一般用于控制app升級(jí)
5. versionName app應(yīng)用的版本名稱(chēng),一般是發(fā)布的時(shí)候?qū)懺赼pp上告訴用戶(hù)的
6. multiDexEnabled 是否啟用自動(dòng)拆分多個(gè)Dex的功能
7. ndk{} 多平臺(tái)編譯,生成有so包的時(shí)候使用,包括四個(gè)平臺(tái)'armeabi', 'x86', 'armeabi-v7a', 'mips'
8. flavorDimensions 定義需要定制化的字段,然后在productFlavors中使用
- sourceSets 源代碼集合,是Java插件用來(lái)描述和管理源代碼及資源的一個(gè)抽象概念,是一個(gè)Java源代碼文件和資源文件的集合,我們可以通過(guò)sourceSets更改源集的Java目錄或者資源目錄等。
- buildTypes 構(gòu)建類(lèi)型,內(nèi)置了debug和release兩個(gè)構(gòu)建類(lèi)型,一般用在代碼混淆
name:build type的名字
applicationIdSuffix:應(yīng)用id后綴
versionNameSuffix:版本名稱(chēng)后綴
debuggable:是否生成一個(gè)debug的apk
minifyEnabled:是否混淆
proguardFiles:混淆文件
signingConfig:簽名配置
manifestPlaceholders:清單占位符
shrinkResources:是否去除未利用的資源,默認(rèn)false,表示不去除。
zipAlignEnable:是否使用zipalign工具壓縮。
multiDexEnabled:是否拆成多個(gè)Dex
multiDexKeepFile:指定文本文件編譯進(jìn)主Dex文件中
multiDexKeepProguard:指定混淆文件編譯進(jìn)主Dex文件中
- signingConfigs 簽名配置。一個(gè)app只有在簽名之后才能被發(fā)布、安裝、使用,簽名是保護(hù)app的方式,標(biāo)記該app的唯一性。
storeFile: 簽名文件
storePassword: 簽名證書(shū)文件的密碼
storeType: 簽名證書(shū)類(lèi)型
keyAlias: 簽名證書(shū)中秘鑰別名
keyPassword: 簽名證書(shū)中改密鑰的密碼
- productFlavors Gradle的多渠道打包,你可以在不同的包定義不同的變量,實(shí)現(xiàn)自己的定制化版本的需求。
defaultConfig 中定義的 flavorDimensions
manifestPlaceholders 占位符,我們可以通過(guò)它動(dòng)態(tài)配置AndroidManifest文件一些內(nèi)容,譬如app的名字
buildConfigField 是BuildConfig文件的一個(gè)函數(shù),而B(niǎo)uildConfig這個(gè)類(lèi)是Android Gradle構(gòu)建腳本在編譯后生成的,而buildConfigField就是其中的自定義函數(shù)變量
定義常量 buildConfigField "boolean","isTest","true"
就會(huì)在BuildConfig類(lèi)中添加一個(gè)變量 public static final boolean isTest = true
然后我們就可以在代碼中使用 BuildConfig.isTest
-
dexOptions{} dx命令只是一個(gè)腳本,它調(diào)用的還是Java編寫(xiě)的dx.jar庫(kù),是Java程序處理的,所以當(dāng)內(nèi)存不足的時(shí)候,就會(huì)內(nèi)存溢出。給dx分配的內(nèi)存是一個(gè)G,給它增加內(nèi)存分配來(lái)解決這個(gè)問(wèn)題。
dexOptions { javaMaxHeapSize "2g" incremental = true }
dependencies{}
- compile fileTree(include: ['.jar'], dir: 'libs')* 依賴(lài)本地libs文件夾下的擴(kuò)展名為jar
- compile project('×××') 引入某個(gè)本地module
- compile group:name:version
gradle 3.0中依賴(lài)implementation、api的區(qū)別
- api跟以前的compile沒(méi)什么區(qū)別,指令依賴(lài)會(huì)傳遞,只需要引入一次,其它module不用再次引入
- implementation指令依賴(lài)是不會(huì)傳遞的,也就是說(shuō)當(dāng)前引用的第三方庫(kù)僅限于本module內(nèi)使用