參考http://www.reibang.com/p/8b8a550246bd居夹,整理為自己需要的方便查看
App
settings.gradle
配置Project和module
include ':app' , ':module1',':module2'
build.gradle
buildscript
gradle自身所使用的資源窘拯。可以聲明的資源包括依賴項迈窟、第三方插件近尚、倉庫地址等
repositories
倉庫 jcenter()、maven()和google()等
dependencies
配置依賴 classpath:'group:name:version'
ext
自定義屬性
- 只在當前配置文件使用的,在當前文件定義
ext.xxx_name='xxx'
谁鳍,使用的時候$xxx_name
獲取值 - 通用自定義配置,單獨定義文件
ext{xxx_1='xxx'}
在需要使用的文件中apply from: '文件名'
,使用${xxx_1}
獲取值
allprojects
為所有項目提供共同所需依賴包
task
task clean(type: Delete) {
delete rootProject.buildDir
}
運行gradle clean時倘潜,執(zhí)行此處定義的task余佛,刪除根目錄中的build目錄
Module
每個module都有一個build.gradle文件
build.gradle
這里主要就是dependencies,和一些plugin窍荧。主要介紹下plugin辉巡,以'com.android.application'插件為例
plugin
apply plugin:'×××'
: 二進制插件,一般都是被打包在一個jar里獨立發(fā)布的
apply from:'×××'
:應用腳本插件蕊退,其實就是把這個腳本加載進來
插件的作用
- 添加一些task郊楣,幫助完成一些工作
- 添加一些依賴
- 給現(xiàn)有對象添加一些擴展,android{}這個配置塊就是Android Gradle插件為Project對象添加的一個擴展
- 對項目進行一些約定瓤荔,比如應用Java插 件之后净蚤,約定src/main/java目錄下是我們的源代碼存放位置
com.android.application插件
android{} 是Android插件提供的一個擴展類型,可以讓我們自定義Android Gradle工程输硝,是Android Gradle工程配置的唯一入口今瀑。下面列舉一下主要的配置項。
- compileSdkVersion 是編譯所依賴的Android SDK的版本点把,這里是API Level橘荠。
- buildToolsVersion 是構(gòu)建該Android工程所用構(gòu)建工具的版本。
- defaultConfig{} 它是一個ProductFlavor的默認的配置郎逃,后面會介紹ProductFlavor
1. applicationId 包名哥童,app的唯一標識。跟AndroidManifest里面的package是可以不同的褒翰。package指的是代碼目錄下路徑贮懈;applicationId指的是app對外發(fā)布的唯一標識,會在簽名优训、申請第三方庫朵你、發(fā)布時候用到。
2. minSdkVersion 是支持的Android系統(tǒng)的api level
3. targetSdkVersion 基于哪個Android版本開發(fā)的
4. versionCode app應用內(nèi)部版本號揣非,一般用于控制app升級
5. versionName app應用的版本名稱抡医,一般是發(fā)布的時候?qū)懺赼pp上告訴用戶的
6. multiDexEnabled 是否啟用自動拆分多個Dex的功能
7. ndk{} 多平臺編譯,生成有so包的時候使用妆兑,包括四個平臺'armeabi', 'x86', 'armeabi-v7a', 'mips'
8. flavorDimensions 定義需要定制化的字段魂拦,然后在productFlavors中使用
- sourceSets 源代碼集合,是Java插件用來描述和管理源代碼及資源的一個抽象概念搁嗓,是一個Java源代碼文件和資源文件的集合芯勘,我們可以通過sourceSets更改源集的Java目錄或者資源目錄等。
- buildTypes 構(gòu)建類型腺逛,內(nèi)置了debug和release兩個構(gòu)建類型荷愕,一般用在代碼混淆
name:build type的名字
applicationIdSuffix:應用id后綴
versionNameSuffix:版本名稱后綴
debuggable:是否生成一個debug的apk
minifyEnabled:是否混淆
proguardFiles:混淆文件
signingConfig:簽名配置
manifestPlaceholders:清單占位符
shrinkResources:是否去除未利用的資源,默認false,表示不去除安疗。
zipAlignEnable:是否使用zipalign工具壓縮抛杨。
multiDexEnabled:是否拆成多個Dex
multiDexKeepFile:指定文本文件編譯進主Dex文件中
multiDexKeepProguard:指定混淆文件編譯進主Dex文件中
- signingConfigs 簽名配置。一個app只有在簽名之后才能被發(fā)布荐类、安裝怖现、使用,簽名是保護app的方式玉罐,標記該app的唯一性屈嗤。
storeFile: 簽名文件
storePassword: 簽名證書文件的密碼
storeType: 簽名證書類型
keyAlias: 簽名證書中秘鑰別名
keyPassword: 簽名證書中改密鑰的密碼
- productFlavors Gradle的多渠道打包,你可以在不同的包定義不同的變量吊输,實現(xiàn)自己的定制化版本的需求饶号。
defaultConfig 中定義的 flavorDimensions
manifestPlaceholders 占位符,我們可以通過它動態(tài)配置AndroidManifest文件一些內(nèi)容季蚂,譬如app的名字
buildConfigField 是BuildConfig文件的一個函數(shù)茫船,而BuildConfig這個類是Android Gradle構(gòu)建腳本在編譯后生成的,而buildConfigField就是其中的自定義函數(shù)變量
定義常量 buildConfigField "boolean","isTest","true"
就會在BuildConfig類中添加一個變量 public static final boolean isTest = true
然后我們就可以在代碼中使用 BuildConfig.isTest
-
dexOptions{} dx命令只是一個腳本扭屁,它調(diào)用的還是Java編寫的dx.jar庫算谈,是Java程序處理的,所以當內(nèi)存不足的時候疯搅,就會內(nèi)存溢出濒生。給dx分配的內(nèi)存是一個G,給它增加內(nèi)存分配來解決這個問題幔欧。
dexOptions { javaMaxHeapSize "2g" incremental = true }
dependencies{}
- compile fileTree(include: ['.jar'], dir: 'libs')* 依賴本地libs文件夾下的擴展名為jar
- compile project('×××') 引入某個本地module
- compile group:name:version
gradle 3.0中依賴implementation、api的區(qū)別
- api跟以前的compile沒什么區(qū)別丽声,指令依賴會傳遞礁蔗,只需要引入一次,其它module不用再次引入
- implementation指令依賴是不會傳遞的雁社,也就是說當前引用的第三方庫僅限于本module內(nèi)使用