gradle常量定义和使用

1. gradle自定义常量的原因

在多module中,gradle文件里存在大量常量,而且基本上是相同的。在项目或者依赖库版本升级的时候,修改起来十分的不友好。一两个module时可能无所谓,但是正常开发中可能涉及到十几个module的情况,一方面是修改起来十分不友好,工作量太大,一方面可能出现漏改的情况,导致依赖冲突、打包失败等的问题。这个时候就可以通过自定义全局常量来改变这种情况。

2. 自定义常量的方法

gradle可以通过ext来自定义常量,要做到常量共用的话,就要在根节点下的build.gradle文件中进行常量定义。

写法1
buildscript {

    repositories {
        google()
        jcenter()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.1'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

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

ext {
    android = [
            compileSdkVersion: 29,
            buildToolsVersion: "29.0.2",
            applicationId    : "com.geeboo.jetpackproject",
            minSdkVersion    : 16,
            targetSdkVersion : 29,
            versionCode      : 1,
            versionName      : "1.0"
    ]

    libs = [
            libAndroidAppcompat: 'androidx.appcompat:appcompat:1.1.0',
            libAndroidConstraintlayout: 'androidx.constraintlayout:constraintlayout:1.1.3',
            libJunit: 'junit:junit:4.12',
            libTestJunit: 'androidx.test.ext:junit:1.1.1',
            libTestEspresso: 'androidx.test.espresso:espresso-core:3.2.0'
    ]
}

直接在build.gradle中进行定义,这种方式在自定义常量太多时,看起来似乎不太舒服,而且根结点的gradle中经常需要配置一些其他的东西,可能导致整个文件一大堆代码。所以还可以用插件的方式单独进行常量定义

写法2

在根目录下创建一个common.gradle文件(文件名称随意)专门用来定义常量

ext {
    android = [
            compileSdkVersion: 29,
            buildToolsVersion: "29.0.2",
            applicationId    : "com.xxx.xxx",
            minSdkVersion    : 16,
            targetSdkVersion : 29,
            versionCode      : 1,
            versionName      : "1.0"
    ]

    libs = [
            libAndroidAppcompat: 'androidx.appcompat:appcompat:1.1.0',
            libAndroidConstraintlayout: 'androidx.constraintlayout:constraintlayout:1.1.3',
            libJunit: 'junit:junit:4.12',
            libTestJunit: 'androidx.test.ext:junit:1.1.1',
            libTestEspresso: 'androidx.test.espresso:espresso-core:3.2.0'
    ]
}

然后在根节点下的build.gradle中添加 apply from: file(‘common.gradle’)

apply from: file('common.gradle')
buildscript {

    repositories {
        google()
        jcenter()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.1'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

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

3. 使用常量的方法

apply plugin: 'com.android.application'

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
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation libs.libAndroidAppcompat
    implementation libs.libAndroidConstraintlayout
    testImplementation libs.libJunit
    androidTestImplementation libs.libTestJunit
    androidTestImplementation libs.libTestEspresso
}

跟未修改前的代码对比一下,修改后的看起来简直不能太爽。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值