列子
project
//定義全局屬性
buildscript {
//定義依賴包的來源倉庫
repositories {
//使用jcenter作為倉庫竖幔,jcenter是maven庫的分支板乙,可以和maven互相切換并且支持https
jcenter()
//使用maven
// maven {
// url "http://repo.acmecorp.com/maven2"
// }
}
//構(gòu)建過程中的依賴信息,一般不建議定義model中的依賴包拳氢,只需要定義android插件
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.1.5'
// 配置apt 插件, 使用該插件募逞,dagger2生成的class在build/generated目錄中。這樣可以直接引用馋评。
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
//定義各個model的默認(rèn)屬性
allprojects {
repositories {
jcenter()
}
}
//擴展屬性放接,可以定義一些全局常量
ext{
//model 中使用 "compileSdkVersion rootProject.ext.compileSdkVersion"
compileSdkVersion = 23
buildToolsVersion = '23.0.1'
supportLibraryVersion = '23.0.1'
junitVersion = '4.12'
mockitoVersion = '1.10.19'
espressoVersion = '2.2.1'
}
model
/**
* 官方文檔
* http://google.github.io/android-gradle-dsl/current/index.html
*/
/**
* 只影響該model的配置
*/
/**
* 指明該model build時使用的工具,這里使用android官方提供的插件留特,可以直接使用內(nèi)置的屬性和task纠脾。
* com.android.application 調(diào)用android的應(yīng)用插件玛瘸,用于應(yīng)用的構(gòu)建和打包。
* com.android.library 調(diào)用依賴庫插件
*/
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt' // 注釋處理
//配置android屬性
android {
/*
* 這兩個屬性是必須的
*/
//應(yīng)用編譯版本號
compileSdkVersion rootProject.ext.compileSdkVersion
//build應(yīng)用時使用的build工具的版本號(aapt,zipalign,dx and renderscript)
buildToolsVersion rootProject.ext.buildToolsVersion
//定義model的核心屬性苟蹈,會重寫manifest.xml中的屬性
defaultConfig {
/*重寫manifest中的包名package name
* 但是appId和pname之間有點不同:在使用gradle build項目之前糊渊,pname有兩個作用,一個是應(yīng)用的唯一標(biāo)志慧脱,另一個是用作R資源的包名渺绒。
* package name依然被用來作為包名和R文件的包名,而applicationid將被用于設(shè)備和應(yīng)用商店中的唯一標(biāo)志。
*/
applicationId "hj.demo"
minSdkVersion 14
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
//聲明本地文件存儲路徑
sourceSets {
main {
//導(dǎo)入libs下的資源文件菱鸥,有時候需要這樣才能導(dǎo)入so文件
jniLibs.srcDirs = ['libs']
// manifest {
// srcFile 'AndroidManifest.xml'
// }
// res {
// srcDir 'res'
// }
// java {
// srcDir 'src'
// }
// assets {
// srcDir 'assets'
// }
}
}
//定義一個本地倉庫
repositories {
flatDir {
/**
* 當(dāng)要引入一個第三方的model時宗兼,可以引入該model的aar包(聲明名com.android.library類型的model編譯后會在build/output/aar/下生成一個aar文件)。
* 然后在當(dāng)前項目下新建一個aars文件夾氮采,將第三方的aar文件拷貝到該目錄下针炉。
* 如果引入成功的話,在當(dāng)前項目中可以看見該aar文件夾扳抽。目錄:build/intermediates/exploded-aar/(aar名字)
*/
dirs 'aars'
}
}
compileOptions {
// 使用Java1.8
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
packagingOptions {
// 注釋沖突 解決dagger2和butterknife沖突
exclude 'META-INF/services/javax.annotation.processing.Processor'
}
//簽名證書
// signingConfigs{
// debug {
// storeFile file("D:\\keystore\\debug.keystore")
// storePassword "android"
// keyAlias "androiddebugkey"
// keyPassword "android"
// }
//
// release {
// storeFile file("D:\\keystore\\kjtj.keystore")
// storePassword "client51tjzjkjtj"
// keyAlias "kjtj.keystore"
// keyPassword "client51tjzjkjtj"
// }
// }
//項目 build類型篡帕,一般就只有兩個:debug和release
// buildTypes {
// debug{
// // 是否進行混淆
// minifyEnabled false
// // 混淆文件的位置 前一個是系統(tǒng)默認(rèn)的混淆文件,后一個是用戶自定義的混淆文件
// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//
// // 簽名 調(diào)用上面debug簽名證書
// signingConfig signingConfigs.debug
// }
// release {
// minifyEnabled true
// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// signingConfig signingConfigs.release
// }
// }
//發(fā)布各個版本
productFlavors{
baidu{
minSdkVersion 14
targetSdkVersion 21
manifestPlaceholders = [APP_CHANNEL_VALUE: "百度",APP_NAME_VALUE: "百度test"]
}
huawei{
minSdkVersion 14
targetSdkVersion 21
manifestPlaceholders = [APP_CHANNEL_VALUE: "華為"]
}
//直接使用flavor的name,這樣就不需要在各個flavor中配置manifestPlaceholders了贸呢。
// productFlavors.all { flavor ->
// flavor.manifestPlaceholders = [APP_CHANNEL_VALUE: name]
// }
}
}
dependencies {
//導(dǎo)入本地jar包:導(dǎo)入本地libs文件下的所有jar包
compile fileTree(dir: 'libs', include: ['*.jar'])
/**
* 使用第三方model
* 1. 直接引入model項目: compile project(':libraryname') libraryname一般是model項目名(參照settings中的配置或者model項目下的iml文件中的project.id)
* 2. 使用aar文件導(dǎo)入: compile(name:'aarFilename', ext:'aar') aarFilename是aar文件的名字镰烧。簡寫:compile ':aarFilename@aar'
*/
/**
* 依賴包格式:group:name:version
* 如 com.android.support:appcompat-v7:22+
* 完整格式:group:'group',name:'name',version:'version'
* 如 group:'com.android.support',name:'appcompat-v7',version:'23.1.0'
*/
//version使用了動態(tài)版本"+":使用最新的版本(不建議,有可能不穩(wěn)定).
compile (group:'com.android.support',name:'appcompat-v7',version:"$rootProject.supportLibraryVersion")
//compile 'com.android.support:appcompat-v7:+'
compile "com.android.support:design:$rootProject.supportLibraryVersion"
//xml和java之間的id映射
compile 'com.jakewharton:butterknife:7.0.1'
//dagger2
compile 'com.google.dagger:dagger:2.0.2'
compile 'com.google.dagger:dagger-compiler:2.0.2'
compile 'io.reactivex:rxandroid:1.1.0' // RxAndroid
compile 'io.reactivex:rxjava:1.1.0' // 推薦同時加載RxJava
compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' // Retrofit網(wǎng)絡(luò)處理
compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2' // Retrofit的rx解析庫
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2' // Retrofit的gson庫
//java注釋解析 dagger2自身依賴此包
provided 'org.glassfish:javax.annotation:10.0-b28'
testCompile "junit:junit:$rootProject.ext.junitVersion"
androidTestCompile "junit:junit:$rootProject.ext.junitVersion"
// Google Espresso UI Testing
//簡單說下楞陷,下來在詳細學(xué)習(xí)下(will study) Espresso 單應(yīng)用測試怔鳖,Uiautomator支持多應(yīng)用測試。
androidTestCompile "com.android.support.test.espresso:espresso-core:$rootProject.espressoVersion"
androidTestCompile "com.android.support.test.espresso:espresso-contrib:$rootProject.espressoVersion"
androidTestCompile "com.android.support.test.espresso:espresso-intents:$rootProject.espressoVersion"
}
/**
compile 是對所有的build type以及favlors都會參與編譯并且打包到最終的apk文件中固蛾。
provided 是對所有的build type以及favlors只在編譯時使用结执,類似eclipse中的external-libs,只參與便于,不打包到最終apk艾凯。
apk 只會打包到apk文件中献幔,而不參與編譯,所以不能再代碼中直接調(diào)用jar中的類或方法趾诗,否則在編譯時會報錯
testCompile,androidTestCompile 僅僅是針對單元測試代碼的編譯編譯以及最終打包測試apk時有效蜡感,而對正常的debug或者release apk包不起作用。
debugCompile 僅僅針對debug模式的編譯和最終的debug apk打包恃泪。
releaseProvided 僅僅針對Release 模式的編譯和最終的Release apk打包郑兴。
*/
補充
compile
在上面的例子中會出現(xiàn)compile,androidTestCompile贝乎,testCompile等例如*Compile 的樣式情连。這個編譯多個依賴項目時很有用。
比如有一個主項目module0,還有幾個其他依賴項目module1,module2,module3览效,module4等却舀,項目會根據(jù)不同情況依賴不同的module球榆。
android {
productFlavors {
proa
prob
}
}
dependencies {
compile project(':module1') //module1是各種情況都需要的
proaCompile project(':module2') //proa 使用module2和module3
proaCompile project(':module3')
probCompile project(':module4') //proa 使用module4和module3
}