apk打包输出路径修改及版本号自动迭代的实现
开发打包版本的时候, 打包的apk默认名称都是app_release.apk.不方便辨认最新版本, 同时每次也需要手动修改版本号, 这里记录下如何更优雅的解决这些问题
版本号自动迭代
首先在全局gradle文件中加入配置信息,和release版本检查方法:
// 通过taskName判断当前操作是否是在打release包
def checkRelease() {
def runTasks = gradle.startParameter.taskNames
for (String task : runTasks) {
// 我这里认为执行“assemble”和非“debug”的任务就是执行“release”的任务
if (task.contains("assemble") && !task.contains("Debug")) {
// targetTask = task
return true
}
}
return false
}
ext { // 定义当前gradle文件的全局变量, 是否是release版本
isRelease = checkRelease()
}
然后在app模块的gradle文件中添加获取版本号的方法,放在apply plugin下面就行:
//apply plugin: 'com.android.application'
/**
* 获取版本号,每次release包自动迭代
* @return
*/
def increasedVersionCode() {
def propFile = file('../gradle.properties')
def Properties props = new Properties()
props.load(new FileInputStream(propFile))
// 读取gradle.properties文件中定义的VERSION_CODE属性
def code = props.getProperty('VERSION_CODE',"0").toInteger()
if (isRelease) {
code++
props['VERSION_CODE'] = code.toString()
// 将最新的versionCode写入gradle.properties文件中
props.store(propFile.newWriter(), null)
}
return code
}
修改原来固定的版本号为 versionCode increasedVersionCode()
完成以上步骤, 后面每次打包release版本的时候版本号都会自动累加.
修改release包输出路径及名称
在android{} 模块最后添加以下代码:
3.0及以上使用如下代码
/**
* 修改release包的apk文件名和路径
* Studio3.0
*/
android.applicationVariants.all { variant ->
if (variant.buildType.name == 'release') {
def buildTypeName = variant.buildType.name
variant.outputs.all {
// def outputFile = output.outputFile
def oldFile = variant.outputs[0].outputFile
def releaseApkName = "app_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${buildTypeName}.apk"
println("版本名称--->" + defaultConfig.versionName + " 版本号--->" + defaultConfig.versionCode)
outputFileName = releaseApkName//new File(oldFile.parent, releaseApkName)
}
}
}
3.0以下使用如下代码
android {
...........
// 修改release包的apk文件名和路径
applicationVariants.all { variant ->
def buildTypeName = variant.buildType.name
if (variant.buildType.name == 'release') {
variant.outputs.each { output ->
def oldFile = variant.outputs[0].outputFile
def releaseApkName = "app_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${buildTypeName}.apk"
println("版本名称--->" + defaultConfig.versionName+" 版本号--->"+defaultConfig.versionCode)
output.outputFile = new File(oldFile.parent, releaseApkName)
}
}
}
}
上面是输出在app模块目录下, 名称为app_v+版本名_+版本号+_打包类型.apk
目录和apk名称格式都可以修改成自己喜欢的.