博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gradle之module间依赖版本同步
阅读量:5787 次
发布时间:2019-06-18

本文共 2925 字,大约阅读时间需要 9 分钟。

问题引出

因为公司项目日渐增大,所以想尝试下组件化,为以后业务扩展做准备。但是拆分之后的模块和之前引入的lib中,都含有相同的导包,以后升级也变得很麻烦,就希望可以在项目中个定义一个统一的资源模块加以引用,做到统一管理。

解决方案

定义配置文件

在项目的根目录中有一个gradle.properties ,其中定义的常量是可以在gradle 中直接引用的。我们先定义一些常用的值:

# Android configurationCOMPILE_SDK_VERSION=27BUILD_TOOLS_VERSION=27.0.3TARGET_SDK_VERSION=27MIN_SDK_VERSION=16VERSION_CODE=1VERSION_NAME=1.0# Plugin versionsKOTLIN_VERSION=1.2.71SUPPORT_LIBRARY_VERSION=27.1.1CONSTRAINT_LAYOUT_VERSION=1.1.3RUNNER_VERSION=1.0.2ESPRESSO_CORE_VERSION=3.0.2JUNIT_VERSION=4.12BUTTERKNIFE_VERSION=8.4.0GLIDE_VERSION=3.7.0复制代码

现在我们在gradle文件中引用一下就可以了:

android {    compileSdkVersion Integer.parseInt(COMPILE_SDK_VERSION)    buildToolsVersion BUILD_TOOLS_VERSION    defaultConfig {        applicationId "com.be.www.multimodelproject"        minSdkVersion MIN_SDK_VERSION        targetSdkVersion TARGET_SDK_VERSION        versionCode Integer.parseInt(VERSION_CODE)        versionName VERSION_NAME        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:$SUPPORT_LIBRARY_VERSION"    implementation "com.android.support.constraint:constraint-layout:$CONSTRAINT_LAYOUT_VERSION"    testImplementation "junit:junit:$JUNIT_VERSION"    androidTestImplementation "com.android.support.test:runner:$RUNNER_VERSION"    androidTestImplementation "com.android.support.test.espresso:espresso-core:$ESPRESSO_CORE_VERSION"}复制代码
  • 需要注意的是:compileSdkVersionversionCode 必须为Integer类型,而Gradle支持类型类型解析(Gradle的支持语言是Groovy,而Groovy的底层是java,好多类型和语法都和java相近),我们只需要Integer.parseInt() 一下就好了。对于implementation,我们要注意使用的是“双引号”(""),因为“单引号”是不支持动态赋值的,之后用美元符($)引入即可。

到此来说,已经实现了依赖版本同步的问题。但是如果我每个module中都需要一个*"com.android.support:appcompat-v7:$SUPPORT_LIBRARY_VERSION"* ,也就是我的每个代码块都会存在,显得臃肿和麻烦。我们可以在根目录的gradle中定义一些常用的引用:

buildscript {    ext.kotlin_version = '1.2.41'    ext.deps = [            'junit' : "junit:junit:$JUNIT_VERSION",            'kotlin': [                    'kgp'        : "org.jetbrains.kotlin:kotlin-gradle-plugin:${KOTLIN_VERSION}",                    'kotlin_jdk7': "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${KOTLIN_VERSION}"            ]    ]    repositories {        google()        jcenter()    }    dependencies {        classpath 'com.android.tools.build:gradle:3.0.0'        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"        // NOTE: Do not place your application dependencies here; they belong        // in the individual module build.gradle files    }}复制代码

语法就是ext.deps 样式。引用方式:

implementation deps.kotlin.kotlin_jdk7 testImplementation deps.junit复制代码

是不是代码清爽很多。

我们还可以注意到上边的ext.kotlin_version = '1.2.41' ,也就是说常量也可以在gradle中定义。但是个人比较喜欢清单的形式。

  • 参考链接:

一笑相逢蓬海路,人间风月如尘土。

转载地址:http://pwhyx.baihongyu.com/

你可能感兴趣的文章
STL 算法
查看>>
分享:Backbone.js 样例站点与入门指南
查看>>
图的基本算法
查看>>
《架构之美》摘录三
查看>>
myeclipse6.5上基于JAX-WS开发Webservice(中文示例)
查看>>
HTML基础(一)
查看>>
谈谈冒烟测试
查看>>
boost.circular_buffer简介
查看>>
Database Appliance并非Mini版的Exadata-还原真实的Oracle Unbreakable Database Appliance
查看>>
CORTEX-M3 异常/中断控制(使能和除能)
查看>>
网页图片缩放(js)
查看>>
没有设计模式画小人,有趣画板
查看>>
简易高负载进程记录脚本
查看>>
在VMware上安装CentOS-6.5 minimal - 安装VMware Tools
查看>>
使用 Xtrabackup 在线对MySQL做主从复制
查看>>
linux sort/uniq 使用
查看>>
enq: TT - contention等待事件
查看>>
【资料整理】git的使用
查看>>
python第三方模块—psutil模块
查看>>
Latches and Tuning:Latches
查看>>