Android Studio 3.1中设置Release版本名称覆盖失败求助
Android Studio 3.1升级后版本名修改代码报错的解决办法
之前我一直用这段代码在release构建时给所有应用变体的版本名加上构建时间戳,方便区分不同的发布包:
android.applicationVariants.all { variant -> if (variant.buildType.name == "release") { variant.outputs.all { output -> output.setVersionNameOverride(output.processResources.versionName + "-build" + new Date().format('yyyyMMddHHmmss')) } } }
结果把Android Studio升级到3.1之后,直接报了**配置项目':app'时出现问题。无法获取未知属性...**的错误,折腾了好一会儿才找到解决办法,分享给大家:
问题原因
Android Gradle Plugin(AGP)3.0+版本对API做了不少调整,之前通过output.processResources.versionName获取版本名的方式已经失效了,而且setVersionNameOverride的调用方式也有变化,这才导致了报错。
修复后的代码
把代码改成下面这样就可以正常运行了:
android.applicationVariants.all { variant -> if (variant.buildType.name == "release") { variant.outputs.all { output -> // 获取原始的版本名称 def originalVersionName = variant.versionName // 拼接上当前构建的时间戳 def newVersionName = "${originalVersionName}-build${new Date().format('yyyyMMddHHmmss')}" // 设置新的版本名 output.versionNameOverride = newVersionName } } }
关键修改点
- 直接从
variant.versionName获取原始版本名:AGP 3.0+之后,output对象不再直接暴露processResources的可访问属性,所以换了更直接的获取方式 - 改用属性赋值
output.versionNameOverride:替代之前的setVersionNameOverride()方法,这是AGP更新后的标准写法
额外提示
如果修改后还是有问题,可以试试:
- 先同步项目(点击工具栏的Sync Project with Gradle Files按钮)
- 清理构建缓存后重新构建(Build -> Clean Project,再Build -> Rebuild Project)
内容的提问来源于stack exchange,提问作者Jongz Puangput
相关产品推荐
相关产品推荐

