本该快快乐乐摸鱼的午后~~
构建出了个错误,搜了一下,好像没有其他工友提到。
记录一下。有什么问题建议的欢迎多多指教
起因
构建老项目,升级 AGP 版本,从版本 3.0.0 升级到 7.0.3。在搞定一系列依赖问题后,构建报了个错误:
error: cannot find symbol BuildConfig.VERSION_NAME
symbol: variable VERSION_NAME
location: class BuildConfig
在 library module 中试图通过 BuildConfig.VERSION_NAME 获取 VERSION_NAME 导致的编译错误。
- library module 里面的 build.gradle
apply plugin: 'com.android.library'
android {
compileSdkVersion 25
defaultConfig {
minSdkVersion 16
targetSdkVersion 22
# 留意这两行
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
... 省略 ...
}
从 Android IssueTrack 中获知,从AGP version 4.1.0-beta05 版本起,文中这两行已经不效了。
versionCode 1
versionName "1.0"
不能在 BuildConfig 生成相应的字段了。 Google 工程师的说法是,version code 在library module 中没有意义,但是我们可以通过读取这个字段识别我们的 library 版本。
当然我们也可以改代码,不再使用 BuildConfig.VERSION_NAME 来获取 library 的版本。如果你不想要修改代码,你可以参考下面的解决方法。
解决方法
在library module 下的 build.gradle 中加上这两行,重新构建就能正常生成,通过编译,解决问题。
# 加上这两行解决问题
buildConfigField("long", "VERSION_CODE", "${defaultConfig.versionCode}")
buildConfigField("String", "VERSION_NAME", "\"${defaultConfig.versionName}\"")
留意是加到 android.defaultConfig 里面, 如果加到 buildTypes.release 下,是无效的,也无法生成相应的字段。
你也可以把文中的 ${defaultConfig.***} 改成你项目中取值方式,我这么写纯粹是因为懒~
The End
新年快乐 GYM ~