Gradle实现统一依赖管理

目的:

在版本迭代过程中,经常遇到一种情况:一旦android SDK、android support包、gradle build tool以及一些第三方包一旦推出新版本,为了保持对新特性的支持,我们需要对每个module中的build.gradle文件都进行一次手动修改(如appcompat-v7包),费时又费力。那么有没有办法对这些依赖进行统一管理呢,答案是肯定的。

方法一:分类属性配置

  • 在项目的根目录创建一个gradle配置文件config.gradle,项目中所有的依赖只要在这个文件中统一配置即可。格式如下(内容根据需要进行修改): 
ext {
    android = [
            compileSdkVersion: 24,
            buildToolsVersion: "24.0.2",
            applicationId    : "com.carme.carmerchant",
            minSdkVersion    : 15,
            targetSdkVersion : 22,
            versionCode      : 3,
            versionName      : "1.0.3"
    ]

    dependencies = [
            "test"                  : "junit:junit:4.12",
            "appcompat-v7"          : "com.android.support:appcompat-v7:25.0.0",
            "support-v4"            : "com.android.support:support-v4:25.0.0",
            "support_design"        : "com.android.support:design:25.0.0",
            "rxjava"                : "io.reactivex:rxjava:1.2.0",
            "rxandroid"             : "io.reactivex:rxandroid:1.2.1",
            "retrofit"              : "com.squareup.retrofit2:retrofit:2.1.0",
            "converter-gson"        : "com.squareup.retrofit2:converter-gson:2.1.0",
            "adapter-rxjava"        : "com.squareup.retrofit2:adapter-rxjava:2.1.0",
            "logging-interceptor"   : "com.squareup.okhttp3:logging-interceptor:3.4.1",
            "pullToRefresh"         : "com.carme.module:pullToRefresh:1.0.13",
            "glide"                 : "com.github.bumptech.glide:glide:3.7.0",
            "glide-okhttp3"         : "com.github.bumptech.glide:okhttp3-integration:1.4.0@aar",
            "recyclerview"          : "com.android.support:recyclerview-v7:25.0.0",
            "bugly"                 : "com.tencent.bugly:nativecrashreport:3.0",
            "bugly-upgrade"         : "com.tencent.bugly:crashreport_upgrade:1.1.7",
            "jpush"                 : "cn.jiguang:jpush:2.2.0",
            "hotfix"                : "com.taobao.android:alisdk-hotfix:1.4.0",
            "rxlifecycle"           : "com.trello:rxlifecycle:0.8.0",
            "rxlifecycle-components": "com.trello:rxlifecycle-components:0.8.0",
            "butterknife"           : "com.jakewharton:butterknife:8.4.0",
            "butterknife-compiler"  : "com.jakewharton:butterknife-compiler:8.4.0",
            "otto"                  : "com.squareup:otto:1.3.8",
            "mpandroidchart"        : "com.github.PhilJay:MPAndroidChart:v3.0.1",
            "multidex"              : "com.android.support:multidex:1.0.1"
    ]
}
  • 其次在根目录的build.gradle文件中添加内容(apply from:”config.gradle”),所有的module都可以从这个(config.gradle)配置文件里读取公共参数。如图:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
apply from: "config.gradle"
buildscript {
    repositories {
        jcenter()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.0'
        classpath 'com.tencent.bugly:symtabfileuploader:2.0.4'
        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
    }
}

allprojects {
    repositories {
        jcenter()

        maven {
            url "https://jitpack.io"
        }

        maven {
            url 'http://192.168.51.199:8081/nexus/content/repositories/Android/'
        }

        maven {
            url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories"
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
  • 在各个module目录下的build.gradle文件中使用如下:
android {  
          compileSdkVersion rootProject .ext.android.compileSdkVersion
          buildToolsVersion rootProject .ext.android.buildToolsVersion
          defaultConfig {
              applicationId rootProject .ext.android.applicationId
              minSdkVersion rootProject .ext.android.minSdkVersion
              targetSdkVersion rootProject .ext.android.targetSdkVersion
              versionCode rootProject .ext.android.versionCode
              versionName rootProject .ext.android.versionName
          }
          ...
      }  
      dependencies {
          ...
          compile rootProject .ext.dependencies[ "design"]
          compile rootProject .ext.dependencies[ "appcompat-v7"]
          compile rootProject .ext.dependencies[ "recyclerview-v7"]
          ...
      }

 

方法二:常量属性配置

  • 步骤1,2同方法一一致,在项目的根目录创建一个gradle配置文件config.gradle,然后在根目录build.gradle中引入。需要注意的一点是在文件中配置的是依赖常量。格式如下: 
ext {
    //Version of compile sdk
    COMPILE_SDK_VERSION = 23
    //Version of Android build tool
    BUILD_TOOLS_VERSION = "23.0.3"
    //Min version of Android sdk
    MIN_SDK_VERSION = 9
    //Version of target Android sdk
    TARGET_SDK_VERSION = 23
    //Use progurad or not
    MINIFY_ENABLED = true
    MINIFY_DISABLED = false
    //Version of "com.android.support:appcompat-v7"
    APPCOMPAT_VERSION = '23.2.0'
    //Version of "junit":
    JUNIT_VERSION= '4.12'
}
  • 在module中的build.gradle中使用情况如下:
apply plugin : 'com.android.library'
android {
    compileSdkVersion COMPILE_SDK_VERSION
    buildToolsVersion BUILD_TOOLS_VERSION
    defaultConfig {
        minSdkVersion MIN_SDK_VERSION
        targetSdkVersion TARGET_SDK_VERSION
        versionCode 1
        versionName "1.0.0"
    }
    buildTypes {
        release {
            minifyEnabled MINIFY_DISABLED
            proguardFiles getDefaultProguardFile('proguard-android.txt' ), 'proguard-rules.pro'
        }
    }
}
dependencies {
    compile fileTree(dir : 'libs', include: ['*.jar' ])
    testCompile "junit:junit: ${JUNIT_VERSION} "
    compile "com.android.support:appcompat-v7: ${APPCOMPAT_VERSION} "
}

 

方法三:在gradle.properties中配置依赖常量

  • 如:在gradle.properties中配置相应的版本号(可以理解为定义一个常量参数)

  • 在单个module中的build.gradle中使用如下:

 

转载于:https://my.oschina.net/u/3389024/blog/868409

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值