错误:在android studio中找不到符号变量BuildConfig.VERSION_CODE
符号:变量VERSION_CODE
位置:类BuildConfig
错误发生时,我更新我的androidstudio到最新版本与gradle构建版本到distributionUrl=https://services.gradle.org/distributions/gradle-7.4-all.zip这在gradle-wrapper.properties,并尝试降级gradle构建工具版本的所有可能性,
我的代码是
String versionCode = String.valueOf(BuildConfig.VERSION_CODE);
可能这是反对或删除在这一点上,我不知道确切的替代品。
1条答案
按热度按时间wf82jlnq1#
在build.gradle中添加versionCode和versionName字段,如下所示:
//
Android Studio 4.1、库模块和VERSION_CODE Android Studio 4.1 --或者更准确地说,是Android Gradle插件的4.1.0版--有一项重大变更:它不再向BuildConfig添加版本代码(有时也添加版本名称)。
这个问题最初是在6月份的Canary 4中报告的,但是尽管是一个P1问题,它在AS 4.1发布之前并没有得到解决。我是从Stack Overflow那里发现的。而且,因为它在发行说明中提到了,所以这可能不会改变。
如果您创建一个scrap AS 4.1项目,您的应用模块将具有典型的versionCode和versionName属性:
该模块使用com.android.application插件,并生成一个包含VERSION_CODE和VERSION_NAME的BuildConfig:
如果您随后将库模块添加到同一项目中,它也将具有相同得versionCode与versionName行...但它们不会反映在模块得BuildConfig中:
我有点惊讶的是,票没有关闭为“工作的意图”,因为这个变化是故意的
这样做是有目的的,因为有一个版本的库(存在于清单文件或代码中)对Android中的库没有意义。2只有应用程序有一个Android版本。3更新:在我发布这篇文章几个小时后,它确实被关闭为“有意行为”。我怀疑是Xavier Ducrohet的某个人发布了一个扩展的解释,解释了这一切是如何发生的。
发行说明建议将来从Gradle DSL中删除versionCode和versionName。
对我有效的方法是根据以下问题注解手动声明它们:
在我的例子中,我只是硬编码了这些值,但是您可以安排从某个公共位置提取它们。
请注意,这里可能会有不同的行为。在堆栈溢出问题中,SO用户Void报告了与我所看到的两个不同之处:
已生成版本名称,但未生成版本代码
对VERSION_CODE使用buildConfigField将不起作用,但使用唯一名称将
在光测试中,我无法重现这些发现,但要为症状的一些变化做好准备。
如果你选择了buildConfigField,最安全的做法是不要使用VERSION_CODE和VERSION_NAME,而是使用你自己的唯一名称,就像Void那样。基本上,将VERSION_CODE和VERSION_NAME视为Google管理的名称空间的一部分,并假设Google可能会对它们造成干扰。如果你使用你自己的名称,幸运的话,它们将不会受到Android Gradle插件未来更改的影响。
更新:在前面提到的扩展解释中,谷歌回应了这一建议:请使用您自己的自定义字段。
***如果您想在您的库中使用它,您可能会有机会为旧版本和新版本的构建工具发生冲突,您必须添加检查或创建唯一的名称,以便在www.example.com文件中生成BuildConfig.java,如下所示:
并使用新的BuildConfig.VERSION_CODE_1,名称代替旧名称,这样可以避免生成多个名称和代码并避免冲突***