如何通过Gradle命令行设置Android应用的versionCode和versionName
Gradle命令行设置Android应用版本号的正确方案
错误原因
本次报错核心是两个问题:
- 命令行传入的
versionCode为字符串类型,但Android要求versionCode必须是整数,高版本Android Gradle Plugin(AGP)不再自动做类型转换,会直接报错 - 未做参数存在性校验,若运行时没有传入对应变量,直接读取
project.versionCode会导致配置解析失败
正确配置步骤
1. 修改app/build.gradle配置
在defaultConfig代码块中按如下方式调整版本配置,增加类型转换和兜底逻辑:
defaultConfig { // versionCode处理:优先取命令行参数,转整数,无传入则用默认值1 versionCode project.hasProperty('versionCode') ? project.versionCode.toInteger() : 1 // versionName处理:优先取命令行参数,无传入则用默认值1.0.0 versionName project.hasProperty('versionName') ? project.versionName : "1.0.0" // 其余原有配置保持不变 [...] }
如果需要同时支持本地配置文件local.properties设置默认值(无需每次传参),可以使用完整配置:
// 放在android代码块之前,读取local.properties配置 def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { localPropertiesFile.withReader('UTF-8') { reader -> localProperties.load(reader) } } android { defaultConfig { // 优先级:命令行参数 > local.properties配置 > 默认值 versionCode project.hasProperty('versionCode') ? project.versionCode.toInteger() : (localProperties.getProperty('versionCode') ? localProperties.getProperty('versionCode').toInteger() : 1) versionName project.hasProperty('versionName') ? project.versionName : (localProperties.getProperty('versionName') ?: "1.0.0") // 其余原有配置保持不变 [...] } }
需要本地配置时在local.properties中添加如下内容即可:
versionCode=100 versionName=1.0.0
2. 执行打包命令
和你之前的使用方式一致,命令行传入参数即可生效:./gradlew bundleRelease -PversionName=1.0.0 -PversionCode=100
如果需要打APK包,将bundleRelease替换为assembleRelease即可。
内容的提问来源于stack exchange,提问作者Maykon Michel
相关产品推荐
相关产品推荐

