gradle小技巧--项目依赖库的统一版本管理

日常开发项目中, 有时候会有需要在本地依赖多个库module的情况, 那么我们为了保证所有库支持的系统版本统一. 就需要用到这个技巧了.


--- 2018年6月6日 更新---

最整洁友好的方式:

在项目根目录下建立一个自定义名字的.gradle文件. 例如我创建的是:

ext.gradle

ext{
    appVersionCode = 1
    appVersionName = "1.0"
    compileSdkVersion = 27
    minSdkVersion = 15
    targetSdkVersion = 27

    supportVersion = "27.1.1"

    appcompat = "com.android.support:appcompat-v7:$supportVersion"
    design = "com.android.support:design:$supportVersion"
    constraint = "com.android.support.constraint:constraint-layout:1.1.1"
    junit = "junit:junit:4.12"
    runner = "com.android.support.test:runner:1.0.2"
    espresso = "com.android.support.test.espresso:espresso-core:3.0.2"

    // 友盟推送
    umengCommon = "com.umeng.sdk:common:1.5.3"
    umengUtdid = "com.umeng.sdk:utdid:1.1.5.3"
    umengPush = "com.umeng.sdk:push:4.2.0"
}

之后在项目根目录的 build.gradle 文件的最后写入这样一行代码, 把 ext.gradle 文件插入到配置文件中

buildscript {
    
  ...

task clean(type: Delete) {
    delete rootProject.buildDir
}

apply from: rootProject.file('ext.gradle')

之后在app 模块下的 build.gradle 这样写. 

apply plugin: 'com.android.application'

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    defaultConfig {
        applicationId "app.geekqian.com.umengtest"
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode rootProject.ext.appVersionCode
        versionName rootProject.ext.appVersionName
        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 rootProject.ext.appcompat
    implementation rootProject.ext.design
    implementation rootProject.ext.constraint
    testImplementation rootProject.ext.junit
    androidTestImplementation rootProject.ext.runner
    androidTestImplementation rootProject.ext.espresso
    //PushSDK必须依赖基础组件库,所以需要加入对应依赖
    implementation rootProject.ext.umengCommon
    //PushSDK必须依赖utdid库,所以需要加入对应依赖
    implementation rootProject.ext.umengUtdid
    //PushSDK
    implementation rootProject.ext.umengPush
}

----- 2018年3月9日 更新 -----

#1. **推荐第一种比较方便**:
    
首先打开根目录下的 build.gradle 文件。并在文档最后换行输入以下代码:                          

    ext{
        //SDK
        minSdkVersion = 15  
        targetSdkVersion = 26
        compileSdkVersion = 26
    
        //dependencies
        supportLibraryVersion ='27.1.0'
        butterknifeVersion = '8.8.1'
    }

如下图 : 



接着打开 app mudule下的 build.gradle 文件, 使用刚刚配置的 ext


---------------

引用自 http://www.jianshu.com/p/a092bcc3de7d


# 这种太麻烦了, 废弃

首先我们在项目根目录下创建一个任意命名的xxx.gradle文件. 例如 : custom.gradle

在里面按照下面例子写入我们依赖的库版本.


custom.gradle
 
 
 
 
 
 
ext {
    android = [
            compileSdkVersion        : 26,
            buildToolsVersion        : "26.0.1",
            applicationId            : "com.ingdan.innews",
            minSdkVersion            : 15,
            targetSdkVersion         : 26,
            versionCode              : 1,
            versionName              : "1.0",
            testInstrumentationRunner: "android.support.test.runner.AndroidJUnitRunner"
    ]

    dependencies = [
            "appcompat-v7"      : "com.android.support:appcompat-v7:26.0.1",
            "kotlin_version"    : "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version",
            "constraint-layout" : "com.android.support.constraint:constraint-layout:1.0.2",
            "junit"             : "junit:junit:4.12",
            "runner"            : "com.android.support.test:runner:1.0.0",
            "espresso-core"     : "com.android.support.test.espresso:espresso-core:3.0.0",
            "ahbottomnavigation": "com.aurelhubert:ahbottomnavigation:2.0.6",
            "rxjava"            : "io.reactivex:rxjava:1.1.3",
            "rxandroid"         : "io.reactivex:rxandroid:1.1.0",
            "retrofit"          : "com.squareup.retrofit2:retrofit:2.0.0-beta4",
            "gson"              : "com.google.code.gson:gson:2.6.2",
            "converter-gson"    : "com.squareup.retrofit2:converter-gson:2.0.0-beta4",
            "adapter-rxjava"    : "com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4",
            "butterknife"       : "com.jakewharton:butterknife:7.0.1",
    ]

}


接着打开项目根目录下的build.gradle, 在最顶上依赖我们刚刚创建的custom.gradle. 实例如下:

build.gradle
 
 
//Top-level build file where you can add configuration options common to all sub-projects/modules.
apply from : "custom.gradle"

buildscript {
    ext.kotlin_version = '1.1.3-2'
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0-beta3'
        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
    }
}

allprojects {

    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

接着打开app module 中的build.gradle文件, 按照下面实例格式修改:
(PS: 看第一句代码就可以知道, 这里是获取刚刚写的custom.gradle中的ext块中两个配置的对象, 典型的面向对象编程, 下面大家应该就都能看懂了. 不同的是android节点的可以使用 obj.xx的方式来调用, 而dependencies是使用类似数组的["xxx"]来调用 )

build.gradle
 
 
apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

def cfg = rootProject.ext.android
def dpc = rootProject.ext.dependencies

android {
    compileSdkVersion cfg.compileSdkVersion
    buildToolsVersion cfg.buildToolsVersion
    defaultConfig {
        applicationId cfg.applicationId
        minSdkVersion cfg.minSdkVersion
        targetSdkVersion cfg.targetSdkVersion
        versionCode cfg.versionCode
        versionName cfg.versionName
        testInstrumentationRunner cfg.testInstrumentationRunner
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation dpc["kotlin_version"]
    implementation dpc["appcompat-v7"]
    implementation dpc["constraint-layout"]
    testImplementation dpc["junit"]
    androidTestImplementation dpc["runner"]
    androidTestImplementation dpc["espresso-core"]
    //底部导航
    compile dpc["ahbottomnavigation"]
}


之后我们要改动的话直接在custom.gradle中的ext区域改就行了.
PS: 这里注意一下, implementation 以及 testImplementation 以及 androidTestImplementation 这些依赖修饰符我也不清楚有啥区别, 但是我测试了下使用compile来写也没啥问题, 照样跑的动.

再补充学习另一种统一配置方式

在项目根目录下有个gradle.properties文件, 在文件中这样写

 
 
 
 
 
 
APPCOMPAT = com.android.support:appcompat-v7:26.0.1
GSON = com.google.code.gson:gson:2.6.2

然后在app module中的build.gradle文件dependencies{}中引用

compile APPCOMPAT
compile GSON


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值