一、问题:在平时开发中经常会对某些项目状态进行变更,通过debug状态来区分环境,代码里通过BuildConfig,但gradle里却没有类似的方法,下面演示了如何在gradle文件里自定义一个字段实现状态切换(主要是groovy不够熟悉)
  1. 例如Android文件里判断环境:
if (BuildConfig.DEBUG) {// TODO: xxx}else{// TODO: xxx}

以上情况在代码里使用确实很方便,但如果转移到build.gradle里,比如输出版本类型,就只有在buildTypes里通过自定义buildConfigField来配置不同版本类型的versionName

  1. 在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是门非常强大的语言,能用自动化来减轻开发中很多琐碎的事,在研究过程中遇到一个问题:方法调用不能在其他属性字段定义之上,否则会方法里用到的字段会报错找不到

更多相关文章

  1. Android(安卓)8.0 SystemUI 源码分析(二):启动流程和初始化
  2. Android中AsyncTask使用教程及源码分析
  3. Android(安卓)RecyclerView中ViewHolder的复用导致数据错乱解决
  4. Android(安卓)手机app三种方法获取定位地址(自带API,外接SDK,获取外
  5. android笔记一:java内部类
  6. Android(安卓)实践:做一款可用的天气 APP
  7. Android(安卓)消息机制:Handler、Looper、Message源码 详细版解析
  8. Android(安卓)DiskLruCache缓存完全解析(网易新闻)
  9. eclipse中为android工程第三方jar包关联源代码的方法

随机推荐

  1. android > 搭建 cordova 环境
  2. Android HandlerThread 使用介绍及简单解
  3. Dialog-普通对话框-列表对话框
  4. Android与JS交互---内嵌框架iframe
  5. Android Retrofit 图片上传的最简单和明
  6. Android 监听屏幕熄屏亮屏和主动唤醒屏幕
  7. android显示自定义view
  8. 利用Java反射机制-访问Android隐藏API
  9. android studio 启动失败(Failed to load
  10. Android 三星128G SD卡格式化为内部存储