“资源因配置而异”错误是什么意思?

use*_*117 1 android android-studio

在Android Studio 2.2.2中,AndroidManifest.xml文件中显示错误

Resources referenced from the manifest cannot vary by configuration

此消息上还有其他人提出StackOverflow问题,但答案仅描述了如何忽略它。我想知道是什么意思?

与错误相关的行说

android:versionName="@string/appvername"
Run Code Online (Sandbox Code Playgroud)

该错误是什么意思?如何防止(不仅忽略)该错误?在这种情况下,什么是“配置”?

Com*_*are 5

在这种情况下,什么是“配置”?

引用文档

您应该始终将应用程序代码中的资源(例如图像和字符串)外部化,以便可以独立维护它们。将资源外部化还可以使您提供支持特定设备配置的替代资源,例如不同的语言或屏幕尺寸,这随着越来越多的Android设备具有不同的配置而变得越来越重要。为了提供与不同配置的兼容性,必须使用各种按类型和配置对资源进行分组的子目录来组织项目的res /目录中的资源。

因此,配置是设备功能和状态的混合,控制要加载哪些资源。例如,设备区域设置可从可用的字符串资源中确定使用哪些字符串。

我想知道是什么意思?

并非清单中的每个属性都可以由资源填充,因为系统无法根据配置处理变化的值。

例如,您不能通过<activity>使用中的字符串资源来更改的Java类名称,而是android:name着眼于使用具有不同屏幕尺寸的不同Java类。虽然这是一个有趣的概念,但尚未设置Android来支持该概念。

我该如何预防(而不只是忽略)呢?

在这种情况下,我认为您遇到了一个IDE错误。android:versionName应该支持字符串资源,因为这是面向用户的值,因此您可能需要转换字符串。因此,添加tools:ignore="ManifestResource"<manifest>元素,直到错误得到修复