我们在开发过程中需要区分内部测试环境和线上环境,两者调用接口的域名路径不一样。每次环境切换,都要动态的修改代码,如果线上环境和测试环境不同的域名路径太多,会很麻烦,并且容易出错。
我们可以通过配置gradle来实现自动的环境配置切换。目标:
1.项目开发调试时环境切换
2.打包时可配置测试环境和线上环境
3.测试包和线上包可同时安装在手机上,并能够以app名称区分
4.打包时配置app的版本号
5.修改输出的apk文件名称
一、使用productFlavors实现环境切换
在配置之前,我们先来看一下,新建一个Android项目,默认支持的apk变种:从图上看就只有debug和release两种。
1.配置flavor,测试环境和线上环境使用不同的applicationId
修改app或对应lib的module下的build.gradle文件,修改如下:
2.配置测试和线上环境使用不同的代码和资源
a.在src文件夹下建立neibu和online两个文件夹,
b.在这两个文件夹下,分别建java和res文件夹,
c.在对应的java文件夹下建立NetConfig.java文件
d.删除掉main文件夹下的NetConfig.java文件
f.在res中配置两个strings.xml,此处不需要删除掉main下的资源文件
二、app版本号参数话和修改apk的文件名称
1.修改apk的文件名称,app目录下的,build.gradle文件
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
def buildTypeName = variant.buildType.name
def flavorName = variant.productFlavors[0].name
def buildTime = new Date().format("yyyy-MM-dd-HH-mm-ss")
def fileName = "learn_${flavorName}_${defaultConfig.versionName}_${defaultConfig.versionCode}_${buildTime}_${buildTypeName}.apk"
output.outputFileName = fileName
}
}
}
打包后,如图:2.配置版本号,可通过gradle命令传递
a.修改根目录下gradle.properties文件,添加两个valueb.修改app文件夹下的,build.gradle文件
defaultConfig {
applicationId "com.example.learngradle"
minSdkVersion 14
targetSdkVersion 28
versionCode project.hasProperty("VERSION_CODE") ? (VERSION_CODE as int) : (DEF_VERSION_CODE as int)
versionName project.hasProperty("VERSION_NAME") ? VERSION_NAME : DEF_VERSION_NAME
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
3.命令行下打包apk
a.命令:gradlew assembleDebug
,生成两个debug包
b.命令:gradlew assembleNeibuDebug
,打包一个测试环境包
c.命令中配置版本号-PVERSION_CODE=142
,-PVERSION_NAME=1.2.1
比如:gradlew assembleRelease -PVERSION_CODE=101 -PVERSION_NAME=2.0.1
代码在github