Android(安卓)用groovy在gradle自定义字段方法实现一键切换versionName版本
16lz
2021-01-26
一、问题:在平时开发中经常会对某些项目状态进行变更,通过debug状态来区分环境,代码里通过BuildConfig,但gradle里却没有类似的方法,下面演示了如何在gradle文件里自定义一个字段实现状态切换(主要是groovy不够熟悉)
- 例如Android文件里判断环境:
if (BuildConfig.DEBUG) {// TODO: xxx}else{// TODO: xxx}
以上情况在代码里使用确实很方便,但如果转移到build.gradle
里,比如输出版本类型,就只有在buildTypes
里通过自定义buildConfigField来配置不同版本类型的versionName
了
- 在gradle里辨别环境
android.applicationVariants.all { variant -> println("${variant.name}-${variant.versionName}-${variant.versionCode}}.apk")}
二、解决:在gradle里自定义字段实现一键切换
碍于麻烦,每次打包要去多处修改版本号,于是给统一到另一个config.gradle
统一管理,这样便于打包前修改,例如我想通过一个boolean值控制是否输入dev信息:
/** * 获取当前APP打包版本号 * debug版本有dev后缀 * @return 经过debug和release 区分后的versionName */def getVersionName(){ for (def property : getProperties()){ System.out.println("日志------>>> ${property.key} : ${property.value}") } def versionType = hasProperty("isReleaseVersion") ? isReleaseVersion : ext.isReleaseVersion as boolean return versionType ? "1.0.0" : "1.0.0dev"}ext { // 1.appConfig complileSdkVersion = 29 minSdkVersion = 21 targetSdkVersion = 29 // FIXME: 2020/8/19 打apk前需要修改[isReleaseVersion]为需要的值 isReleaseVersion = Boolean.TRUE // 是否打正式包信息, debug:false release:true versionCode = 1 // 注意:方法调用不能放在属性上面,否则方法里会报找不到属性名 versionName = getVersionName()// 2.dependencies dependencies = [ "key" : "value" ]}
在build.gradle
里使用,两个gradle
文件在同一级目录下的情况下,不需要导包,且可直接使用rootProject
android { compileSdkVersion rootProject.ext.complileSdkVersion defaultConfig { applicationId "com.xxx.xxx" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode rootProject.ext.versionCode versionName rootProject.ext.versionName // 此时引用的versionName就是经过版本环境转换过的 }}
三、结语:groovy是门非常强大的语言,能用自动化来减轻开发中很多琐碎的事,在研究过程中遇到一个问题:方法调用不能在其他属性字段定义之上,否则会方法里用到的字段会报错找不到
更多相关文章
- Android(安卓)8.0 SystemUI 源码分析(二):启动流程和初始化
- Android中AsyncTask使用教程及源码分析
- Android(安卓)RecyclerView中ViewHolder的复用导致数据错乱解决
- Android(安卓)手机app三种方法获取定位地址(自带API,外接SDK,获取外
- android笔记一:java内部类
- Android(安卓)实践:做一款可用的天气 APP
- Android(安卓)消息机制:Handler、Looper、Message源码 详细版解析
- Android(安卓)DiskLruCache缓存完全解析(网易新闻)
- eclipse中为android工程第三方jar包关联源代码的方法