gradle配置总结

作者: 奔跑吧李博 | 来源:发表于2021-03-19 14:46 被阅读0次

gradle的生命周期

gradle声明周期的监听方式:

1、initalization初始化阶段:
解析整个工程中所有Project,构建所有的Project对应的project对象
2、Configuration 配置阶段:
解析所有的projects对象中的task,构建好所有的task的拓扑图
3、Execution 执行阶段:
执行具体的task及其依赖task

在项目的build.gradle中监听gradle的生命周期回调:

beforeEvaluate {
    println '配置阶段开始前的监听回调'
}

afterEvaluate {
    println '配置阶段完成以后的回调'
}

gradle.buildStarted {
    println 'build开始的回调监听'
}

gradle.buildFinished {
    println 'build完毕后的回调监听'
}

gradle.beforeProject {
    println 'gradle执行前的回调监听'
}

gradle.afterProject {
    println 'gradle执行前的回调监听'
}
gradle方法:
/**
 * 获取所有Project
 */
getAllprojects().eachWithIndex { Project entry, int i ->

}

/**
 * 获取所有子Project
 */
getSubprojects().eachWithIndex { Project entry, int i ->

}

/**
 * 配置当前project和其subproject的所有project(module)
 */
allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
}

/**
 * 配置subproject的所有project(module)
 */
subprojects {

}

/**
 * 获取根Project
 */
getRootProject()
gradle.properties声明,可在gradle中引用该配置
#dev          开发环境
#beta         测试环境
#release      正式上线环境
NET_TYPE=dev
android.useAndroidX=true
android.enableJetifier=true
android.injected.testOnly=false
kotlin.code.style=official

gradle配置全局变量

1.gradle的ext属性

ext属性是ExtensionAware类型的一个特殊的属性,本质是一个Map类型的变量。
ext属性可以伴随对应的ExtensionAware对象在构建的过程中被其他对象访问,例如你在rootProject中声明的ext中添加的内容,就可以在任何能获取到rootProject的地方访问这些属性。

在android的rootProject的build.gradle中,定义如下代码块

ext.commonConfig = [
        minSdkVersion    : 21,
        targetSdkVersion : 26,
        compileSdkVersion: 29,
        versionName      : "1.0.0",
        versionCode      : 1,
]

然后在模块下使用该数据,这里首先用def定义一个变量ext = rootProject.ext.commonConfig

def ext = rootProject.ext.commonConfig
android {
    compileSdkVersion ext.compileSdkVersion

    defaultConfig {
        applicationId "com.example.mvvmframe"
        minSdkVersion ext.minSdkVersion
        targetSdkVersion ext.targetSdkVersion
        versionCode ext.versionCode
        versionName ext.versionName
    }
}
2.配置请求环境变量

在项目的build.gradle文件中,配置出开发,测试,正式环境的变量。

buildscript {

    //配置3种环境
    ext.isDev = 0
    ext.isBeta = 1
    ext.isRelease = 2

    //当前打包环境
    ext.curEnv = isRelease
}

在app模块下的build.gradle文件的android->defaultConfig代码块中,添加如下代码。

    defaultConfig {

        if (curEnv == isDev) {
            manifestPlaceholders.put('APP_NAME', "开眼-开发")
        } else if (curEnv == isBeta) {
            manifestPlaceholders.put('APP_NAME', "开眼-测试")
        } else if (curEnv == isRelease){
            manifestPlaceholders.put('APP_NAME', "开眼-正式")
        }

    }

curEnv、isDev、isBeta、isRelease变量都是之前定义过的,能直接引用到。通过manifestPlaceholders注入APP_NAME的属性到manifest文件中,在menifest中设置application的名字为当前环境对应的名字,从而实现app名字为对应环境的名字,manifestPlaceholders 可以替换androidmanifest文件中的标签。这里添加:

android:label="${APP_NAME}"

在网络请求所属模块下的android->defaultConfig代码块中,像BuildConfig文件注入如下四个属性:

    defaultConfig {

        //将环境变量注入到buildConfig中
        buildConfigField 'int', 'CUR_ENV', "$curEnv"
        buildConfigField 'int', 'IS_DEV', "0"
        buildConfigField 'int', 'IS_BETA', "1"
        buildConfigField 'int', 'IS_RELEASE', "2"
    }

经过编译之后就自动生成了该四个属性和值:


最后一步,根据配置的环境变量配置域名:

/** 开发服务器地址  */
        private const val SERVER_ADDRESS_DEV = ""

        /** 测试服务器地址  */
        private const val SERVER_ADDRESS_BETA = ""

        /** 正式服务器地址  */
        private const val SERVER_ADDRESS_RELEASE = ""

        /**
         * 获取服务器域名
         */
        fun getBaseUrl(): String? {
            return when (BuildConfig.CUR_ENV) {
                BuildConfig.IS_DEV -> {
                    ToastUtil.show("开发环境")
                    SERVER_ADDRESS_DEV
                }
                BuildConfig.IS_BETA -> {
                    ToastUtil.show("测试环境")
                    SERVER_ADDRESS_BETA
                }
                BuildConfig.IS_RELEASE -> {
                    ToastUtil.show("正式环境")
                    SERVER_ADDRESS_RELEASE
                }
                else -> ""
            }
        }

gradle中创建task的两种方式

task myTask {
    println '执行myTask'
}

tasks.create(name: 'myTask') {
    println '执行myTask'
}
代码配置地址

参考 https://blog.csdn.net/huangxiaoguo1/article/details/103618209

相关文章

  • Gradle配置总结

    伴随着 Android Studio2.0的发布, Gradle 也进行了一次非常大的升级,叫Instant Ru...

  • gradle配置总结

    1.gradle的ext属性 ext属性是ExtensionAware类型的一个特殊的属性,本质是一个Map类型的...

  • Gradle-配置文件拆解

    扔物线课程学习总结 Gradle配置文件拆解 Gradle项目结构,以及Task Gradle执行的生命周期 1....

  • 01.Gradle的使用

    * 关于Gradle配置的小结关于Gradle配置的小结 - 推酷 - Gradle基础配置Gradle基础 -b...

  • gradle加速

    gradle自身配置 修改gradle配置文件gradle.properties配置如下: IDE配置(IJ为例)

  • Gradle 常用配置总结

    这里分享下我在日常开发中对 Gradle 的常用配置规则 一、版本号配置 当项目逐渐演进的过程中,主工程依赖的 M...

  • Android Gradle 配置总结

    本文主要总结了module name/app/build.gradle文件中用到的配置属性。 1. 资源文件目录 ...

  • Android 代码检查自动化

    检查工具:Lint,FindBugs任务配置:jenKins任务配置gradle gradle配置 配置gradl...

  • Idea插件开发中使用ProGuard混淆代码

    配置gradle插件 gradle配置ProGuard插件 添加混淆task 配置task依赖关系 配置混淆文件 ...

  • GreenDao3.X的基本使用

    1、在project的Gradle中配置: 2、在app的Gradle中配置: 3、在app的Gradle中配置数...

网友评论

    本文标题:gradle配置总结

    本文链接:https://www.haomeiwen.com/subject/gfsxsctx.html