例子5 編寫一個(gè)通用的利于管理依賴庫版本的腳本文件
參考項(xiàng)目
再應(yīng)用Android插件時(shí)匙头,我們通常會(huì)配置很多版本號(hào),例如
...
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
}
}
...
其中的com.android.tools.build:gradle:3.1.2
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.newtrekwang.test"
minSdkVersion 18
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0-alpha3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
其中的18仔雷,28蹂析,com.android.support:appcompat-v7:28.0.0-alpha3,com.android.support:appcompat-v7:28.0.0-alpha3等等
問題
這樣直接顯示配置的方式碟婆,版本號(hào)少量還行电抚,多了就有點(diǎn)難受了。
- 構(gòu)建的時(shí)候你要一個(gè)一個(gè)從別的地方copy版本號(hào)
- 加入多個(gè)module都依賴了相同的版本號(hào)竖共,豈不是改一處喻频,到處都要改
- 一些配置語句太長了
解決
把版本號(hào)分在另一個(gè)文件,其它地方要用就從文件里拿
例:
1.建一個(gè)gradle文件肘迎,存放常用的版本號(hào)和庫名甥温,可以看作存放的都是些鍵值對,利用gradle的project的擴(kuò)展可以把這些鍵值對暫時(shí)放進(jìn)去妓布,然后其他gradle文件要用這些值時(shí)通過project獲取就行姻蚓。
version.gradle
// 版本號(hào)
ext.deps = [:]
def versions = [:]
versions.arch_core = '1.1.1'
versions.constrant_layout= '1.0.2'
versions.room = '1.1.1'
versions.lifcycle = '1.1.1'
versions.support = "27.1.1"
versions.dagger = "2.15"
versions.junit = "4.12"
versions.espresso = "3.0.1"
versions.rxjava2 = "2.1.3"
versions.rx_android = "2.0.1"
versions.retrofit = "2.3.0"
versions.okhttp3 = "3.9.1"
versions.mockwebserver = "3.8.1"
versions.apache_commons = "2.5"
versions.mockito = "2.7.19"
versions.mockito_all = "1.10.19"
versions.dexmaker = "2.2.0"
versions.glide = "4.7.1"
versions.timber = "4.5.1"
versions.android_gradle_plugin = "3.1.2"
versions.atsl_runner = "1.0.1"
versions.atsl_rules = "1.0.1"
versions.hamcrest = "1.3"
versions.kotlin = "1.2.41"
versions.paging = "1.0.1"
versions.work = "1.0.0-alpha04"
versions.navigation = "1.0.0-alpha01"
versions.arouter = "1.2.2"
versions.arouter_compiler = "1.1.3"
def deps = [:]
// support庫
def support = [:]
support.annotations = "com.android.support-annotations:$versions.support"
support.app_compat = "com.android.support:appcompat-v7:$versions.support"
support.recyclerview = "com.android.support:recyclerview-v7:$versions.support"
support.cardview = "com.android.support:cardview-v7:$versions.support"
support.design = "com.android.support:design:$versions.support"
support.v4 = "com.android.support:support-v4:$versions.support"
support.core_utils = "com.android.support:support-core-utils:$versions.support"
support.constrant_layout = "com.android.support.constrant:constrant-layout:$versions.constrant_layout"
deps.support = support
//room相關(guān)庫
def room = [:]
room.runtime = "android.arch.persistence.room:runtime:$versions.room"
room.compiler = "android.arch.persistence.room:compiler:$versions.room"
room.rxjava2 = "android.arch.persistence.room:rxjava2:$versions.room"
room.testing = "android.arch.persistence.room:testing:$versions.room"
deps.room = room
//lifecycle相關(guān)庫
def lifecycle = [:]
lifecycle.runtime = "android.arch.lifecycle:runtime:$versions.lifecycle"
lifecycle.extensions = "android.arch.lifecycle:extensions:$versions.lifecycle"
lifecycle.java8 = "android.arch.lifecycle:common-java8:$versions.lifecycle"
lifecycle.compiler = "android.arch.lifecycle:compiler:$versions.lifecycle"
deps.lifecycle = lifecycle
// arch_core庫
def arch_core = [:]
arch_core.testing = "android.arch.core:core-testing:$versions.arch_core"
deps.arch_core = arch_core
//dagger 庫
def dagger = [:]
dagger.runtime = "com.google.dagger:dagger:$versions.dagger"
dagger.android = "com.google.dagger:dagger-android:$versions.dagger"
dagger.android_support = "com.google.dagger:dagger-android-support:$versions.dagger"
dagger.compiler = "com.google.dagger:dagger-compiler:$versions.dagger"
dagger.android_support_compiler = "com.google.dagger:dagger-android-processor:$versions.dagger"
deps.dagger = dagger
//glide庫
def glide = [:]
glide.runtime = "com.github.bumptech.glide:glide:$versions.glide"
glide.compiler = "com.github.bumptech.glide:compiler:$versions.glide"
deps.glide = glide
// rxjava
deps.rxjava2 = "io.reactivex.rxjava2:rxjava:$versions.rxjava2"
deps.rx_android = "io.reactivex.rxjava2:rxandroid:$versions.rx_android"
// gradle插件
deps.android_gradle_plugin = "com.android.tools.build:gradle:$versions.android_gradle_plugin"
// junit
deps.junit = "junit:junit:$versions.junit"
// ARouter
deps.arouter = "com.alibaba:arouter-api:$versions.arouter"
deps.arouter_compiler = "com.alibaba:arouter-compiler:$versions.arouter_compiler"
// retrofit
deps.retrofit = "com.squareup.retrofit2:retrofit:$versions.retrofit"
deps.okhttp3 = "com.squareup.okhttp3:okhttp:$versions.okhttp3"
deps.okhttp3_interceptor = "com.squareup.okhttp3:logging-interceptor:$versions.okhttp3"
deps.retrofit_converter_gson = "com.squareup.retrofit2:converter-gson:$versions.retrofit"
deps.retrofti_adapter_rxjava = "com.squareup.retrofit2:adapter-rxjava:$versions.retrofit"
ext.deps = deps
def build_versions = [:]
build_versions.min_sdk = 19
build_versions.target_sdk = 28
build_versions.build_tools = "27.0.3"
ext.build_versions = build_versions
2.在根目錄的build.gradle的buildscript塊中使project應(yīng)用version.gradle,把version.gradle里的鍵值對加入擴(kuò)展匣沼,應(yīng)用后狰挡,后面的地方就可以由鍵名獲取鍵值了,當(dāng)然鍵值就是你配置的常用的版本號(hào)释涛。
buildscript {
apply from: 'version.gradle'
repositories {
google()
jcenter()
}
dependencies {
classpath deps.android_gradle_plugin
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
比如其中deps.android_gradle_plugin就指的是com.android.tools.build:gradle:versions.android_gradle_plugin加叁,然后versions.android_gradle_plugin指的是3.1.2
同樣的道理,一個(gè)libModule的build.gradle就可以配置為這樣
apply plugin: 'com.android.library'
android {
compileSdkVersion build_versions.target_sdk
buildToolsVersion build_versions.build_tools
defaultConfig {
minSdkVersion build_versions.min_sdk
targetSdkVersion build_versions.target_sdk
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
//support
api deps.support.app_compat
api deps.support.recyclerview
api deps.support.cardview
api deps.support.design
api deps.support.v4
api deps.support.core_utils
//junit
testImplementation deps.junit
//rxJava
api deps.rxjava2
api deps.rx_android
// net
api deps.retrofit
api deps.okhttp3
api deps.okhttp3_interceptor
api deps.retrofit_converter_gson
api deps.retrofti_adapter_rxjava
//dagger2
api deps.dagger.runtime
annotationProcessor deps.dagger.compiler
}
要改版本號(hào)就在version.gradle里改,而且可以在version.gradle盡可能多的版本號(hào)或庫名字唇撬,下次新建項(xiàng)目它匕,直接copy version.gradle進(jìn)去應(yīng)用就可以了,不必再到處查庫名和版本號(hào)