build 文件中自定义变量读取JSON等操作版本控制教学并在代码中获取当前变量

apply plugin: 'com.android.application'
//1首先导入JSON 依赖
import groovy.json.JsonSlurper
//使用def 定义自己的函数 getAppVersionCode 获取JSON文件中当前的版本号
def getAppVersionCode() {
    //默认版本如果没有读取到就使用默认
    int vvCode = 1
    //读取自己File文件
    File f = project.file("../version.json")
    if (f.exists()) {
        println "-----------"
         //转为JSON
        def json = new JsonSlurper().parse(f)
        //获取当前JSON中KEY的值  根据KEY取值
        vvCode = json.getAt("vCode")
    }
    //打印输出
    println "-----------" + vvCode
    //并返回出去
    return vvCode
}


/*def curPath =System.getProperty("version.json")
println "curPath:"+curPath
println "projectDir:"+projectDir
println "rootDir:"+rootDir
println "buildDir:"+buildDir*/

//获取当前版本名称 同上一直的逻辑
def getAppVersionName() {
    String vvName = "1.0.0"
    File f = project.file("../version.json")
    if (f.exists()) {
        def json = new JsonSlurper().parse(f)
        vvName = json.getAt("vName")
    }
    println vvName
    return vvName
}
//获取当前是否测试
def getAppVersionPublicNet() {
    boolean  publicNet=false
    File f = project.file("../version.json")
    if (f.exists()) {
        def json = new JsonSlurper().parse(f)
        publicNet = json.getAt("PublicNet")
    }
    println "----------*"+publicNet
    return publicNet
}
//在这一定要调用函数然后进行赋值不调用是没有用的
def vNewt=getAppVersionPublicNet()
def vCode= getAppVersionCode()
def vName=getAppVersionName()

android {

    compileSdkVersion 28
    defaultConfig {

        applicationId "com.example.myapplication"
        minSdkVersion 15
        targetSdkVersion 28
        //赋值当前版本号
        versionCode vCode
        //赋值当前版本名称
        versionName vName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    //在buildTypes 中自定义函数buildConfigField  第一个值是类型,第二个是变量名称,第三个是 变量值
    //在这一定要给当前第三个变量值前面加  ""不然会报错的
    buildTypes {
        release {
            minifyEnabled false
            buildConfigField 'boolean','publicNet',""+vNewt
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        debug{
            buildConfigField 'boolean','publicNet',""+vNewt
        }
    }

}

以上有注释,大家自行理解,接下来我把我的JSON贴出来和JSON文件的位置  

这是我JSON文件

{
    "PublicNet": true,
    "vCode":132,
    "vName":"2.2.1"
}

那么我把JSON放到了 当前项目的根目录下

 接下来大家看我是如何获取自定咋们变量值的 

//publicNet 就是咋们在Gradle中buildConfigField的第二个参数大家没忘了吧这边进行调用就OK那么这个
//值其实就被build到一个类中
boolean publicNet=BuildConfig.publicNet;

以上是用法一下是被build到这个BuildConfig类中我这边贴出来方便大家屡思路 

 咋们上边不是在build 中使用打印方法了吗   println 大家可以看下上边然后我告诉他家 println中打印到那个位置了 大家每次build 都会打印。

OK 到这就全部写完,看懂的记得点个赞哟。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值