Android Studio 中 Gradle 依赖的统一管理

一 为什么我们要对 Gradle 统一管理?

在工作中我们所接触的项目一般都是一个Project中至少会存在两个甚至多个Module。试想,如果每个Module又同时拥有相同的依赖,比如v4v7,当进行版本升级的时候岂不是每个Modulebuild.gradle文件都要改动,这样不仅麻烦不利于维护而且容易出错,所以,将依赖进行统一管理,这对于一个 Project 下拥有多个 Module 的情况来说是非常必要的。本文我们介绍使用脚本 config.gradle和使用配置文件 gradle.properties这两种方式进行Android Studio 中 Gradle 依赖的统一管理。

二 使用脚本 config.gradle

1、假设我们的 Project 目录结构如下

root
  --module1
    --build.gradle
  --module2
    --build.gradle
  ...
  --build.gradle

2、在根目录下新建 config.gradle 文件

root
  --module1
    --build.gradle
  --module2
    --build.gradle
  ...
  --build.gradle
  --config.gradle

3、在 config.gradle 中添加如下代码(具体情况根据自己项目来定)

ext {

    android = [
            compileSdkVersion: 27,
            buildToolsVersion: '27.0.3',
            minSdkVersion    : 19,
            targetSdkVersion : 27,
            applicationId    : "com.yonbor.mydicapp",
            versionCode      : 1,
            versionName      : '1.0.0'
    ]

    def dependVersion = [
            support    : "27.1.1",
            retrofit   : "2.2.0",
            okhttp     : "3.4.1",
            butterknife: "8.5.1",
            rxbinding  : "2.1.1",
            rxlifecycle: "2.0.1"
    ]

    dependencies = [
            //base
            "appcompat-v7"              : "com.android.support:appcompat-v7:${dependVersion.support}",
            "cardview-v7"               : "com.android.support:cardview-v7:${dependVersion.support}",
            "recyclerview-v7"           : "com.android.support:recyclerview-v7:${dependVersion.support}",
            "design"                    : "com.android.support:design:${dependVersion.support}",
            "support-core-ui"           : "com.android.support:support-core-ui:${dependVersion.support}",

            //network
            "retrofit"                  : "com.squareup.retrofit2:retrofit:${dependVersion.retrofit}",
            "converter-fastjson-android": "org.ligboy.retrofit2:converter-fastjson-android:2.1.0",
            "okhttp-logging-interceptor": "com.squareup.okhttp3:logging-interceptor:${dependVersion.okhttp}",
            "retrofit-adapter-rxjava2"  : "com.squareup.retrofit2:adapter-rxjava2:${dependVersion.retrofit}",

            //rx
            "rxjava"                    : "io.reactivex.rxjava2:rxjava:2.0.7",
            "rxandroid"                 : "io.reactivex.rxjava2:rxandroid:2.0.1",
            "rxbinding"                 : "com.jakewharton.rxbinding2:rxbinding:${dependVersion.rxbinding}",
            "rxbinding-support-v4"      : "com.jakewharton.rxbinding2:rxbinding-support-v4:${dependVersion.rxbinding}",
            "rxbinding-appcompat-v7"    : "com.jakewharton.rxbinding2:rxbinding-appcompat-v7:${dependVersion.rxbinding}",
            "rxbinding-design"          : "com.jakewharton.rxbinding2:rxbinding-design:${dependVersion.rxbinding}",
            "rxbinding-recyclerview-v7" : "com.jakewharton.rxbinding2:rxbinding-recyclerview-v7:${dependVersion.rxbinding}",
            "rxlifecycle"               : "com.trello.rxlifecycle2:rxlifecycle:${dependVersion.rxlifecycle}",
            "rxlifecycle-android"       : "com.trello.rxlifecycle2:rxlifecycle-android:${dependVersion.rxlifecycle}",
            "rxlifecycle-components"    : "com.trello.rxlifecycle2:rxlifecycle-components:${dependVersion.rxlifecycle}",
            "rxlifecycle-navi"          : "com.trello.rxlifecycle2:rxlifecycle-navi:${dependVersion.rxlifecycle}",
            "rx-preferences"            : "com.f2prateek.rx.preferences2:rx-preferences:2.0.0-RC1",
            "rxpermissions"             : "com.github.tbruyelle:rxpermissions:0.10.2",
            "rxbroadcast"               : "com.cantrowitz:rxbroadcast:2.0.0",

            // arouter
            "arouter"                   : "com.alibaba:arouter-api:1.2.4",
            "arouter-compiler"          : "com.alibaba:arouter-compiler:1.1.4",

            // 图片
            "fresco"                    : "com.facebook.fresco:fresco:0.14.1",
            "glide"                     : "com.github.bumptech.glide:glide:4.7.1",
            "glide-compiler"            : "com.github.bumptech.glide:compiler:4.7.1",

            // 日志打印
            "logger"                    : "com.orhanobut:logger:2.2.0",
            // 下拉刷新
            "ultra-ptr"                 : "in.srain.cube:ultra-ptr:1.0.11",
            "recyclerview-swipe"        : "com.yanzhenjie:recyclerview-swipe:1.1.4",
            "fastjson"                  : "com.alibaba:fastjson:1.1.56.android",
            "ConvenientBanner"          : "com.bigkoo:ConvenientBanner:2.1.4",
            "eventbus"                  : "org.greenrobot:eventbus:3.0.0",
            // 分包
            "multidex"                  : "com.android.support:multidex:1.0.1",
            //autolayout
            "autolayout"                : "com.zhy:autolayout:1.4.5",
            //butterknife
            "butterknife"               : "com.jakewharton:butterknife:${dependVersion.butterknife}",
            "butterknife-compiler"      : "com.jakewharton:butterknife-compiler:${dependVersion.butterknife}",
            "constraint-layout"         : "com.android.support.constraint:constraint-layout:1.1.2",
    ]
}

4、在 root 目录下的build.gradle 中加上下面这行代码

apply from: "config.gradle"

这里写图片描述
5、在需要添加依赖的 Module 中使用

  • android 节点的使用
    这里写图片描述

  • dependencies 节点的使用
    这里写图片描述

以后再对依赖包进行升级的时候只需修改 config.gradle 文件就 OK 了,是不是相当滴方便。

三 使用配置文件 gradle.properties

对依赖进行统一管理的另一种方法是使用配置文件 gradle.properties(通常 IDE 会自动生成此文件),在此文件中添加键值对:

CARD_VIEW=com.android.support:cardview-v7:27.1.1
RETROFIT=com.squareup.retrofit2:retrofit:2.2.0

在 Module 的 build.gradle 中使用:

dependencies {
    implementation CARD_VIEW
    implementation RETROFIT
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值