本文主要總結(jié)的內(nèi)容如下:
Groovy介紹
一、Gradle簡介(定義與特性)
-
二、Gradle使用
- 1漓帚、Multi-Projects Build
- 2篮昧、gradle命令
- 3赋荆、gradle的工作流程
- 4、Gradle編程模型
-
三懊昨、Android中使用Gradle
- 1窄潭、相關(guān)文件
- 2、Android tasks
- 3酵颁、相關(guān)配置
- 4嫉你、Gradle模板舉例
0、Groovy介紹:
Gradle
選擇了Groovy
躏惋。Groovy
基于Java
并拓展了Java
幽污。
Gradle選擇了Groovy的原因:
Groovy
基于Java并拓展了Java。 Java程序員可以無縫切換到使用Groovy開發(fā)程序簿姨。Groovy說白了就是把寫Java程序變得像寫腳本一樣簡單距误。寫完就可以執(zhí)行,Groovy內(nèi)部會將其編譯成Javaclass
然后啟動虛擬機來執(zhí)行扁位。
1准潭、定義:Groovy是在 java平臺上的、 具有像
Python
域仇,Ruby
和Smalltalk
語言特性的靈活動態(tài)語言刑然, Groovy保證了這些特性像 Java語法一樣被 Java開發(fā)者使用。2暇务、Groovy是一種動態(tài)語言泼掠。
-
3、Groovy與Java的關(guān)系:
當(dāng)我執(zhí)行Groovy腳本時般卑,Groovy會先將其編譯成Java類字節(jié)碼武鲁,然后通過Jvm來執(zhí)行這個Java類。
Java蝠检、Groovy和Jvm的關(guān)系示意圖 -
4沐鼠、特性:
- Groovy注釋標(biāo)記和Java一樣,支持//或者/**/
- Groovy語句可以不用分號結(jié)尾。
- Groovy中支持動態(tài)類型饲梭,即定義變量的時候可以不指定其類型乘盖。Groovy中,變量定義可以使用關(guān)鍵字def憔涉。注意订框,雖然def不是必須的,但是為了代碼清晰兜叨,建議還是使用def關(guān)鍵字穿扳。
- 函數(shù)定義時,參數(shù)的類型也可以不指定国旷。
- 除了變量定義可以不指定類型外矛物,Groovy中函數(shù)的返回值也可以是無類型的
//無類型的函數(shù)定義,必須使用def關(guān)鍵字 def nonReturnTypeFunc(){ last_line //最后一行代碼的執(zhí)行結(jié)果就是本函數(shù)的返回值 } //如果指定了函數(shù)返回類型跪但,則可不必加def關(guān)鍵字來定義函數(shù) String getString(){ return"I am a string" }
快速學(xué)習(xí)攻略:Groovy腳本基礎(chǔ)全攻略
一履羞、Gradle簡介
1、定義
1屡久、Gradle是一個工具忆首,同時它也是一個編程框架。
2被环、Gradle中糙及,每一個待編譯的工程都叫一個
Project
。
每一個Project
在構(gòu)建的時候都包含一系列的Task
筛欢。
比如一個Android APK的編譯可能包含:Java源碼編譯Task丁鹉、資源編譯Task、JNI編譯Task悴能、lint檢查Task、打包生成APK的Task雳灾、簽名Task等漠酿。3、Gradle是一個框架谎亩,作為框架炒嘲,它負(fù)責(zé)定義流程和規(guī)則。而具體的編譯工作則是通過插件的方式來完成的匈庭。比如編譯Java有Java插件夫凸,編譯Groovy有Groovy插件,編譯Android APP有Android APP插件阱持,編譯Android Library有Android Library插件夭拌。
2、特性:
- 使用靈活的語言來寫構(gòu)建規(guī)則。
-
Gradle
是一種DSL
鸽扁,即Domain Specific Language蒜绽,領(lǐng)域相關(guān)語言。
二桶现、Gradle使用
1鸿染、Multi-Projects Build
將多個Project
進行統(tǒng)一編譯钳垮,類似這種操作,在Gradle中,可以稱之為Multi-Projects Build
猎提。
1.1、使用方式:
1酱讶、在工程根目錄(如圖中g(shù)radleProjects)下添加一個
build.gradle
文件(用于配置其他子Project的)-
2阵翎、在工程根目錄(如圖中g(shù)radleProjects)下添加一個
settings.gradle
文件(名稱必須為settings.gradle
用于告知Gradle包含多少個子Project
)。Multi-Projects Build 文件夾示意圖
1.2东囚、.gradle
內(nèi)容:
1跺嗽、build.gralde:
為子Project添加一些屬性。這個build.gradle有沒有都無所屬页藻。-
2桨嫁、
settings.gradle
#settings.gradle include 'project1', 'project2', 'project3', 'project4'
2、gradle命令:
2.1份帐、查看工程信息:
- 命令:
gradle projects
在根目錄(如gradleProjects)下打開終端璃吧,執(zhí)行此命令 - 結(jié)果:顯示有多少個
project
2.2、查看任務(wù)信息:
- 命令:
gradleproject-path:tasks
在子目錄(如project1)下打開終端废境,執(zhí)行此命令畜挨。若不在子目錄中則需要加上project-path
。 - 結(jié)果:顯示當(dāng)前項目的任務(wù)信息
由于我這個子目錄下什么也沒有噩凹,所以顯示的信息是這個樣子巴元。
2.3、執(zhí)行任務(wù)(task)
- 命令:
gradle task-name
task-name
為指定任務(wù)的名稱驮宴,如clean
清理任務(wù) - 示例:
-
gradle clean
是執(zhí)行清理任務(wù)逮刨,和make clean類似。 -
gradle properites
用來查看所有屬性信息堵泽。
-
3修己、gradle的工作流程:
包含三個階段:
1、首先是初始化階段(
Initiliazation phase
)迎罗。
對我們前面的multi-project build
而言睬愤,就是執(zhí)行settings.gradle
。-
2纹安、
Configration
階段的目標(biāo)是解析每個project
中的build.gradle
尤辱。比如multi-project build例子中砂豌,解析每個子目錄中的build.gradle。在這兩個階段之間啥刻,我們可以加一些定制化的Hook奸鸯。這當(dāng)然是通過API來添加的。
Configuration
階段完了后可帽,整個build的project以及內(nèi)部的Task關(guān)系就確定了娄涩。一個Project包含很多Task,每個Task之間有依賴關(guān)系映跟。Configuration
會建立一個有向圖來描述Task之間的依賴關(guān)系蓄拣。所以,我們可以添加一個HOOK
努隙,即當(dāng)Task
關(guān)系圖建立好后球恤,執(zhí)行一些操作。
3荸镊、最后一個階段就是執(zhí)行任務(wù)了咽斧。
你在gradle xxx中指定什么任務(wù),gradle就會將這個xxx任務(wù)鏈上的所有任務(wù)全部按依賴順序執(zhí)行一遍躬存!
任務(wù)執(zhí)行完后张惹,我們還可以加Hook。
4岭洲、Gradle編程模型
Gradle基于Groovy宛逗,Groovy又基于Java。所以盾剩,Gradle執(zhí)行的時候和Groovy一樣雷激,會把腳本轉(zhuǎn)換成Java對象。
Gradle主要有三種對象告私,這三種對象和三種不同的腳本文件對應(yīng)屎暇,在gradle執(zhí)行的時候,會將腳本轉(zhuǎn)換成對應(yīng)的對端:
Gradle對象:
當(dāng)我們執(zhí)行gradle xxx
或者什么的時候驻粟,gradle會從默認(rèn)的配置腳本中構(gòu)造出一個Gradle對象
恭垦。在整個執(zhí)行過程中,只有這么一個對象格嗅。Gradle對象的數(shù)據(jù)類型就是Gradle。
我們一般很少去定制這個默認(rèn)的配置腳本唠帝。Project對象:
每一個build.gradle
會轉(zhuǎn)換成一個Project對象
屯掖。Settings對象:
每一個settings.gradle
都會轉(zhuǎn)換成一個Settings對象
。
各種類型Gradle對應(yīng)的對象類型:
腳本類型 | 關(guān)聯(lián)對象類型 |
---|---|
Build script | Project |
Init script | Gradle |
Settings script | Settings |
4.1襟衰、Gradle對象:
gradle對象的屬性如圖贴铜,其中的幾個屬性說明如下:
-
hashCode()
在settings.gradle和build.gradle中,gradle實例對象的hashCode是一樣的 -
HomeDir
是指在哪個目錄存儲的gradle可執(zhí)行程序 -
User Home Dir
gradle自己設(shè)置的目錄,里邊存儲了一些配置文件绍坝,以及編譯過程中的緩存文件徘意,生成的類文件,編譯中依賴的插件等等轩褐。
4.2椎咧、Project對象:
1、每一個
build.gradle
文件都會轉(zhuǎn)換成一個Project對象把介。在Gradle術(shù)語中勤讽,Project對象對應(yīng)的是BuildScript
。2拗踢、Project包含若干Tasks脚牍。由于Project對應(yīng)具體的工程,所以需要為Project加載所需要的插件巢墅,比如為Java工程加載Java插件诸狭。其實,一個Project包含多少Task往往是插件決定的君纫。
-
3驯遇、一個項目在構(gòu)建時都具備如下流程:
- 為當(dāng)前項目創(chuàng)建一個Settings類型的實例。
- 如果當(dāng)前項目存在
settings.gradle
文件庵芭,則通過該文件配置剛才創(chuàng)建的Settings實例妹懒。 - 通過Settings實例的配置創(chuàng)建項目層級結(jié)構(gòu)的Project對象實例。
- 最后通過上面創(chuàng)建的項目層級結(jié)構(gòu)Project對象實例去執(zhí)行每個Project對應(yīng)的
build.gradle
腳本双吆。
-
4眨唬、在Project中,需要:
- 加載插件(調(diào)用apply函數(shù)):
//二進制插件(如jar包) //Android中的build.gradle apply plugin: 'com.android.library' <==如果是編譯Library好乐,則加載此插件 apply plugin: 'com.android.application' <==如果是編譯Android APP匾竿,則加載此插件 //加載一個gradle文件 apply from: rootProject.getRootDir().getAbsolutePath() + "/utils.gradle"
- 不同插件有不同的配置。在Project中配置后蔚万,插件就知道從何處讀取源文件
- 設(shè)置屬性:
單個腳本岭妖,不需要考慮屬性的跨腳本傳播。
extra property
(額外屬性):通過ext
前綴標(biāo)示是一個額外屬性反璃。定義好之后昵慌,后面的存取就不需要ext前綴了。ext屬性支持Project和Gradle對象淮蜈。即Project和Gradle對象都可以設(shè)置ext屬性://第一次定義或者設(shè)置它的時候需要ext前綴 gradle.ext.api =properties.getProperty('sdk.api') println gradle.api //再次存取api的時候斋攀,就不需要ext前綴了
- 加載插件(調(diào)用apply函數(shù)):
三、Android中的Gradle
Android自己定義了好多Script Block梧田。Android定義的DSL參考文檔在
https://developer.android.com/tools/building/plugin-for-gradle.html下載淳蔼。
1侧蘸、相關(guān)文件
- Android中g(shù)radle項目基本的目錄結(jié)構(gòu):
demoApp |-- build.gradle |-- settings.gradle |-- app |-- build.gradle |-- gradlew |-- gradlew.bat |-- gradle |-- wrapper |-- gradle-wrapper.jar |-- gradle-wrapper.properties |-- gradle.properties |-- local.properties
1.1、local.properties
對于Android來說鹉梨,local.properties
是必須的讳癌,下面兩個配置sdk.dir和ndk.dir是Android Gradle必須要指定的。
#設(shè)置sdk目錄
sdk.dir=xxx
#設(shè)置ndk目錄
ndk.dir=yyy
1.2存皂、項目根目錄(頂層)的build.gradle
一般情況下晌坤,這個build.gradle
是做一些全局配置,其配置最終會被應(yīng)用到所有項目中艰垂。它典型的配置如下:
apply from: 'dependencies.gradle'
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
}
}
allprojects {
repositories {
jcenter()
google()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
buildscript
:定義了 Android 編譯工具的類路徑泡仗。repositories
中的 jCenter和
mavenCentral` 是兩個倉庫。allprojects
:中定義的屬性會被應(yīng)用到所有module
中猜憎,但是為了保證每個項目的獨立性娩怎,我們一般不會在這里面操作太多共有的東西。(一般外部依賴庫都在其中胰柑,gradle會通過查找在這里配置的倉庫來比編譯指定的依賴庫截亦?)
1.3、每個子項目中的build.gradle
針對每個module 的配置柬讨,如果其build.gradle
中定義的選項和頂層build.gradle
定義的相同崩瓤,則頂層中的配置會被覆蓋。典型的配置內(nèi)容如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
buildToolsVersion "28.0.3"
defaultConfig {
applicationId "com.demo.testapp"
minSdkVersion 14
targetSdkVersion 28
versionCode 1.1.1
versionName "111"
}
signingConfigs {
debug {
storeFile file("../debug.jks")
storePassword "123456"
keyAlias "haha"
keyPassword "123456"
}
release {
storeFile file("../release.jks")
storePassword "123456"
keyAlias "haha"
keyPassword "123456"
}
}
buildTypes {
debug {
minifyEnabled false //是否混淆
shrinkResources false //去除沒有用到的資源文件
}
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), "proguard-rules.pro"
signingConfig signingConfigs.release
}
}
repositories {
//添加aar
flatDir {
dirs 'libs'
}
}
}
dependencies {
api fileTree(include: ['*.jar'], dir: 'libs')
api "com.android.support:appcompat-v7:27.1.1"
}
apply plugin:gradle插件踩官,作為Android 的應(yīng)用程序却桶,這一步是必須的,因為plugin中提供了Android 編譯蔗牡、測試颖系、打包等等的所有task。
-
android:關(guān)于android 的所有特殊配置都在這個代碼塊中辩越,這就是由上面聲明的 plugin 提供的嘁扼。
- defaultConfig:程序的默認(rèn)配置;這里配置的相關(guān)屬性會覆蓋
AndroidManifest.xml
中定義的屬性(如versionName) - applicationId:定義了APP的包名黔攒,不同于
AndroidManifest.xml
中的package
屬性趁啸。
- defaultConfig:程序的默認(rèn)配置;這里配置的相關(guān)屬性會覆蓋
buildTypes:定義了編譯類型,針對每個類型我們可以有不同的編譯配置督惰,不同的編譯配置對應(yīng)的有不同的編譯命令不傅。默認(rèn)的有
debug
、release
的類型赏胚。dependencies:gradle 的依賴配置蛤签。它定義了當(dāng)前項目需要依賴的其他庫。
1.4栅哀、Gradle Wrapper
gradle wrapper
是針對gradle
新版本對舊版本的向后兼容性問題而使用的震肮。
gradlw wrapper 包含一些腳本文件和針對不同系統(tǒng)下面的運行文件。wrapper 有版本區(qū)分留拾,但是并不需要你手動去下載戳晌,當(dāng)你運行腳本的時候,如果本地沒有會自動下載對應(yīng)版本文件痴柔。
在不同操作系統(tǒng)下面執(zhí)行的腳本不同沦偎,在 Mac 系統(tǒng)下執(zhí)行./gradlew ...,在windows 下執(zhí)行g(shù)radle.bat進行編譯咳蔚。
- gradle wrapper目錄結(jié)構(gòu):
demoApp |-- gradlew |-- gradlew.bat |-- gradle |-- wrapper |-- gradle-wrapper.jar |-- gradle-wrapper.properties
2豪嚎、Android tasks
2.1、基本的tasks:
-
assemble
:對buildType
下的所有配置類型生成相應(yīng)的apk包 -
clean
:移除所有編譯輸出的文件谈火,如apk -
check
:執(zhí)行lint
檢測編譯 -
build
:同時執(zhí)行assemble
和check
這些基本的task侈询,在實際項目中會根據(jù)不同的配置,會對這些task 設(shè)置不同的依賴糯耍。如默認(rèn)的 assmeble
會依賴 assembleDebug
和assembleRelease
扔字,如果直接執(zhí)行assmeble
,最后會編譯debug
和release
的所有版本出來温技。如果我們只需要編譯debug
版本革为,我們可以運行assembleDebug
。
2.2舵鳞、新增task:
-
install
震檩,會將編譯后的apk 安裝到連接的設(shè)備。
3蜓堕、相關(guān)配置
3.1抛虏、BuildConfig
這個類是由gradle根據(jù)配置文件生成的,通過配置一些key-value
的鍵值對俩滥,可以用BuildConfig獲取相應(yīng)的字段嘉蕾。例如:
//module下的build.gradle
buildTypes {
debug {
//配置網(wǎng)絡(luò)請求根地址
buildConfigField 'String', 'API_URL', '"http://test.com/api/debug/"'
//配置app名稱
resValue "string", "app_name", "測試版"
}
release {
//配置網(wǎng)絡(luò)請求根地址
buildConfigField 'String', 'API_URL', '"http://test.com/api/release/"'
//配置app名稱
resValue "string", "app_name", "上線版"
}
}
在使用時,只需要調(diào)用BuildConfig.API_URL
霜旧,就能獲得當(dāng)前環(huán)境(debug或release)下的值错忱。
而用resValue
配置的,則不需要再strings.xml
中配置相應(yīng)名稱的值挂据,否則會報錯以清。
3.2、Repositories
repositories中配置的是代碼倉庫崎逃。在dependencies
中配置的一些依賴庫都是從這里下載的掷倔。
Gradle 支持三種類型的倉庫:Maven
、Ivy
和一些靜態(tài)文件或者文件夾个绍。在編譯的執(zhí)行階段勒葱,gradle 將會從倉庫中取出對應(yīng)需要的依賴文件浪汪,當(dāng)然,gradle 本地也會有自己的緩存凛虽,不會每次都去取這些依賴死遭。
-
gradle 支持多種
Maven
倉庫,一般常用的是jCenter
凯旋。//項目根目錄下的build.gradle repositories { jcenter() google() }
-
有一些項目呀潭,可能是一些公司私有的倉庫中的,這時候需要手動加入倉庫連接至非,而有的需要用戶名和密碼钠署,
//項目根目錄下的build.gradle repositories { maven { url 'https://jitpack.io' credentials { username 'xxx' password 'yyy' } } }
-
可以使用相對路徑配置本地倉庫,通過配置項目中存在的靜態(tài)文件夾作為本地倉庫:
//module下的build.gradle android { ...... repositories { flatDir { dirs 'libs' } } }
3.3荒椭、Dependencies
依賴庫的配置谐鼎。
- File dependencies
通過files()方法可以添加文件依賴,如果有很多jar文件戳杀,我們也可以通過fileTree()方法添加一個文件夾该面,除此之外,我們還可以通過通配符的方式添加信卡,如下:
//module下的build.gradle
dependencies {
api fileTree(include: ['*.jar'], dir: 'libs')
}
- aar dependencies
可以將項目打包成aar
文件隔缀,通過文件的形式來引用:
//module下的build.gradle
//其中的aarname是打包的aar文件的名稱,后面的ext是固定的
dependencies {
api(name: 'aarname', ext: 'aar')
}
3.4傍菇、Source sets
封裝所有變體的源集配置猾瘸。
- 1、Native libraries
配置本地 .so庫丢习。在配置文件中做如下配置牵触,然后在對應(yīng)位置建立文件夾,加入對應(yīng)平臺的.so文件咐低。
//方式一:
android {
sourceSets {
main {
jniLibs.srcDirs = ['libs', , 'src/main/jni']
}
}
}
//方式二
android {
sourceSets.main {
jni.srcDirs 'libs'
}
}
- 2揽思、配置源集:
sourceSets { main { //更改Java源的目錄。默認(rèn)目錄是:'src/main/java'见擦。 java.srcDirs = ['other/java'] // 默認(rèn)目錄是'src/main/res' res.srcDirs = [ 'other/res1', 'other/res2' ] //設(shè)置清單钉汗。默認(rèn)目錄是:src/main/AndroidManifest.xml manifest.srcFile 'other/AndroidManifest.xml' ... } //創(chuàng)建其他塊以配置其他源集。 androidTest { setRoot 'src/tests' ... } }
main
中的res.srcDirs
如果列出多個目錄鲤屡,Gradle將使用它們來收集源损痰。由于Gradle為這些目錄提供了相同的優(yōu)先級,如果在多個目錄中定義相同的資源酒来,則在合并資源時會出現(xiàn)錯誤卢未。對于每個源集,只能指定一個AndroidManifest.xml。
如果源集的所有文件都位于單個根目錄下辽社,則可以使用setRoot屬性指定該目錄伟墙。收集源集的源時,Gradle僅在相對于您指定的根目錄的位置中查找滴铅。例如远荠,在將配置應(yīng)用于androidTest源集之后,Gradle僅在
src/tests/java/
目錄中查找Java源失息。
3.5、Product flavors:
關(guān)于構(gòu)建不同的Product flavors
档址,可以參考如下:
Build Variants
技術(shù):Android打包簽名總結(jié)
4盹兢、Gradle模板舉例
-
4.1、Project的
build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules. //全局引入gradle文件 apply from: 'dependencies.gradle' //gradle腳本執(zhí)行所需依賴守伸,包含依賴倉庫和插件 buildscript { //配置遠(yuǎn)程倉庫 repositories { //從Android Studio3.0后新增了google()配置绎秒,可以引用google上的開源項目 google() //一個類似于github的代碼托管倉庫,聲明了jcenter()配置尼摹,可以輕松引用 jcenter上的開源項目 jcenter() //本地倉庫 mavenLocal() //maven中央倉庫 mavenCentral() //指定maven倉庫 maven { url "https://jitpack.io" } maven { url 'https://maven.google.com' } } //配置插件 dependencies { //此處是android的插件gradle见芹,gradle是一個強大的項目構(gòu)建工具 classpath 'com.android.tools.build:gradle:3.2.1' //其他插件,這里是數(shù)據(jù)庫greendao的插件 classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' } } //項目本身需要的依賴蠢涝,比如項目所需的maven庫 allprojects { repositories { jcenter() google() maven { url 'https://jitpack.io' } maven { url 'https://maven.google.com' } } } //清除任務(wù) task clean(type: Delete) { delete rootProject.buildDir }
-
4.2玄呛、Module的
build.gradle
//app應(yīng)用插件,聲明為Android應(yīng)用程序 apply plugin: 'com.android.application' //表示是一個應(yīng)用程序模塊和二,直接運行 //apply plugin: 'com.android.library' //表示是一個庫模塊徘铝,被其他module依賴 apply plugin: 'walle' //其他插件,這里是打包插件 //定義變量 def versionConfigs = rootProject.extensions.getByName("ext") android { //編譯時用的Android版本 compileSdkVersion versionConfigs.androidCompileSdkVersion //構(gòu)建工具的版本 buildToolsVersion versionConfigs.androidBuildToolsVersion //默認(rèn)配置惯吕,會被下面的相同的配置覆蓋 defaultConfig { //項目包名惕它,唯一標(biāo)識,和AndroidManifest.xml中的package(Java文件包名)不同 applicationId "com.example.app" //程序最低兼容的運行版本废登,低于此版本無法安裝 minSdkVersion versionConfigs.androidMinSdkVersion //項目的目標(biāo)版本 targetSdkVersion versionConfigs.androidTargetSdkVersion //版本號 versionCode VERSION_CODE as int //版本名稱淹魄,給用戶看的 versionName VERSION_NAME //支持multidex // multiDexEnabled true //表明要使用AndroidJUnitRunner進行單元測試 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } //程序在編譯的時候會檢查lint,有任何錯誤提示會停止build堡距,我們可以關(guān)閉這個開關(guān) lintOptions { //打包release版本的時候進行檢測 checkReleaseBuilds false //即使報錯也不會停止打包 abortOnError false //屏蔽translate引起的warning disable "MissingTranslation" } //自動化打包配置甲锡,可以自定義配置多種打包配置 signingConfigs { //測試配置 debug { //debug簽名文件路徑 storeFile file("../debug.jks") //簽名相關(guān)信息,配置在了gradle.properties中了 storePassword SIGNINGCONFIGS_PSW keyAlias SIGNINGCONFIGS_KEYALIAS keyPassword SIGNINGCONFIGS_PSW } //上線配置 release { //release簽名文件路徑 storeFile file("../release.jks") //簽名相關(guān)信息吏颖,配置在了gradle.properties中了 storePassword SIGNINGCONFIGS_PSW keyAlias SIGNINGCONFIGS_KEYALIAS keyPassword SIGNINGCONFIGS_PSW } } //構(gòu)建類型搔体,可自定義多種類型 buildTypes { debug { minifyEnabled false //是否混淆 shrinkResources false //去除沒有用到的資源文件 } release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), "$rootDir/ModuleLibs/config/proguard-rules.pro" signingConfig signingConfigs.release } } repositories { //添加本地aar目錄 flatDir { dirs 'libs' } } //配置源集 sourceSets {//目錄指向配置 main { jniLibs.srcDirs = ['libs']//指定lib庫目錄 } } } //依賴 dependencies { //本地文件依賴 api fileTree(include: ['*.jar'], dir: 'libs') //測試用例庫 testImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) //依賴corelib的module api project(':corelib') //定義外部變量的引用 def andlibs = rootProject.ext.andlibs def libs = rootProject.ext.libs api andlibs.appcompat_v7 }
相關(guān)鏈接:
Android Plugin DSL Reference
Gradle Android插件用戶指南翻譯
深入理解Android之Gradle
史上最全Android build.gradle配置詳解
Gradle 完整指南(Android)
Gradle 提速:每天為你省下一杯喝咖啡的時間