1 Gradle簡介
- 1.1 Gradle是以Groovy語言為基礎(chǔ),面向Java應(yīng)用為主靡狞。基于DSL(領(lǐng)域特定語言)語法的自動化構(gòu)建工具。
- 1.2 gradle支持局部構(gòu)建谚中。
- 1.3 支持多方式依賴管理:包括從maven遠(yuǎn)程倉庫、nexus私服寥枝、ivy倉庫以及本地文件系統(tǒng)的jars或者dirs
- 1.4 gradle是第一個構(gòu)建集成工具(thefirstbuildintegrationtool)宪塔,與ant、maven囊拜、ivy有良好的相容相關(guān)性某筐。
- 1.5 輕松遷移:gradle適用于任何結(jié)構(gòu)的工程(Gradlecanadapttoanystructureyouhave.)。你可以在同一個開發(fā)平臺平行構(gòu)建原工程和gradle工程冠跷。通常要求寫相關(guān)測試南誊,以保證開發(fā)的插件的相似性身诺,這種遷移可以減少破壞性,盡可能的可靠抄囚。這也是重構(gòu)的最佳實踐霉赡。
- 1.6 gradle的整體設(shè)計是以作為一種語言為導(dǎo)向的,而非成為一個嚴(yán)格死板的框架怠苔。
- 1.7 免費開源
2 Gradle之分步解析
以一個As工程為例進(jìn)行說明
Gradle結(jié)構(gòu)如圖
2.1 根目錄下build.gradle
如下(project>build.gradle)
buildscript {
repositories {
// 聲明倉庫源類型同廉,比如我們構(gòu)建了一個安卓庫,要想把庫上傳供他人進(jìn)行使用柑司,則可以上傳到j(luò)center中
jcenter()
}
dependencies {
//當(dāng)前項目使用的gradle版本號
classpath 'com.android.tools.build:gradle:2.2.3'
}
}
//所有android項目均有該配置
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}```
##2.2 `app`目錄下`build.gradle`(module>build.gradle)如下
gradle項目自動編譯的時候要讀取的配置文件迫肖。比如指定項目的依賴包等。
build.grade有兩個攒驰,一個是全局的蟆湖,一個是在模塊里面。
全局的build.grade主要設(shè)置的是聲明倉庫源玻粪,gradle的版本號說明等隅津。
// 說明這個模塊的類型是android項目,如果是多模塊開發(fā)劲室,有可能有的值為java/war
apply plugin: 'com.android.application'
//配置構(gòu)建項目的參數(shù)
android {
//編譯使用的SDK版本
compileSdkVersion 24
//編譯工具的版本
buildToolsVersion "24.0.2"
defaultConfig {
//項目包名伦仍,即是AndroidManifest.xml中package的值
applicationId "com.fcz.funnylife"
//sdk支持的最低版本
minSdkVersion 14
//目標(biāo)Sdk版本
targetSdkVersion 24
//版本號,應(yīng)用升級會用到
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
//發(fā)布版本的設(shè)置
release {
//是否進(jìn)行混淆
minifyEnabled false
//混淆使用的文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
//項目中所依賴的工具包
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.1.0'
testCompile 'junit:junit:4.12'
compile 'com.jakewharton:butterknife:8.4.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
compile 'com.android.support:recyclerview-v7:24.1.0'
compile 'com.android.support:design:24.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.android.support:cardview-v7:24.2.1'
compile 'com.github.bumptech.glide:glide:3.7.0'
}
}
## 2.3 gradle-wrapper.properties
配置信息
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-2.14.1-all.zip
## 2.4 proguard-rules.pro
項目進(jìn)行混淆時的規(guī)則存放文件很洋,需混淆的文件或項目需要說名混淆規(guī)則充蓝,不能混淆的jar包或第三方類庫均需要在此文件中進(jìn)行說明否則項目會出現(xiàn)問題
## 2.5 gradle.properties
grade的運行環(huán)境配置,比如使用多少內(nèi)存之類的喉磁。如:
`org.gradle.jvmargs=-Xmx1536m`
## 2.6 setting.gradle
整個項目的管理谓苟,比如項目包含哪些模塊等。
## 2.7 local.properties
存放一些系統(tǒng)配置信息
- 在此文件中可查看sdk协怒、ndk等的位置信息(默認(rèn)sdk\ndk路徑涝焙,每個機(jī)器對應(yīng)的路徑可能有所不同),一般在新建項目時已經(jīng)自動配置好了孕暇,無須修改
- 同時可以存放一些用戶自定義的配置信息仑撞,如簽名文件
如:
ndk.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk\\ndk-bundle
sdk.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk
key.file=D\:\\workspace\\KeyStore.jks
keyAlias=key
keyPassword=123456
storePassword=123456
- 在`build.gradle`文件中讀取`local.properties`字段
signingConfigs {
config {
//加載資源>local.properties
Properties properties = new Properties()
InputStream inputStream = project.rootProject.file('local.properties').newDataInputStream() ;
properties.load( inputStream )
//讀取local.properties文件
def sdkDir = properties.getProperty('key.file')
storeFile file( sdkDir )
//讀取local.properties中字段
def key_keyAlias = properties.getProperty( 'keyAlias' )
def key_keyPassword = properties.getProperty( 'keyPassword' ) ;
def key_storePassword = properties.getProperty( 'storePassword' ) ;
storePassword key_storePassword
keyAlias key_keyAlias
keyPassword key_keyPassword
}
}
--------------------------------
*后續(xù)內(nèi)容留著待以后補(bǔ)充,同時歡迎給我留言*