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 到这就全部写完,看懂的记得点个赞哟。