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
网友评论