2016-11-21 4 views
0

В Android Studio 2.2.2 У меня есть ошибка в файле AndroidManifest.xml говоряЧто означает ошибка «изменение ресурсов по конфигурации»?

Resources referenced from the manifest cannot vary by configuration

Существует StackOverflow question кем-то еще на это сообщение, но ответ только описывает, как его игнорировать. Я хочу знать, что это значит? Что это значит?

линия, связанная с ошибкой говорит

android:versionName="@string/appvername" 

что это значит ошибка и как предотвратить (а не просто игнорировать) это? Что такое «конфигурация» в этом контексте?

+1

Попробуйте добавить инструменты: ignore = "ManifestResource"? –

+0

сколько у вас определений '@ string/appvername'? – nandsito

+0

_очень много определений @ string/appvername у вас есть?_ Один для каждого языка, потому что каждый языковой стандарт имеет уникальный перевод. (в настоящее время два, но еще впереди) – user316117

ответ

2

Что такое «конфигурация» в этом контексте?

the documentation Цитирование:

Вы всегда должны экстернализовать ресурсы, такие как изображения и строки из кода приложения, так что вы можете поддерживать их независимо друг от друга. Внешние ресурсы также позволяют вам предоставлять альтернативные ресурсы, которые поддерживают определенные конфигурации устройств, такие как разные языки или размеры экрана, что становится все более важным, поскольку все больше устройств на базе Android становятся доступными с различными конфигурациями. Чтобы обеспечить совместимость с различными конфигурациями, вы должны организовать ресурсы в каталоге res/config проекта, используя различные подкаталоги, которые группируют ресурсы по типу и конфигурации.

Таким образом, конфигурация представляет собой сочетание возможностей устройства и состояний, которые контролируют загрузку ресурсов. Например, настройки локали устройства определяют, какие строки будут использоваться из имеющихся ресурсов строки.

Что я хочу знать, что это значит?

Не каждый атрибут манифеста может быть заполнен ресурсом, потому что система не может обрабатывать различные значения на основе конфигурации.

Например, вы не можете изменить имя класса Java для <activity>, используя строковый ресурс в android:name, обращая внимание на использование разных классов Java с различными размерами экрана. Хотя это интересная концепция, Android не настроен для поддержки этого.

как предотвратить (а не просто игнорировать) его?

В этом случае, я думаю, вы сталкиваетесь с ошибкой IDE. android:versionName должен поддерживать строковые ресурсы, так как это значение, обращенное к пользователю, и поэтому вы можете перевести строку. Итак, добавьте tools:ignore="ManifestResource" в элемент <manifest>, до the bug gets fixed.

+0

см. это при интеграции facebook sdk, http://stackoverflow.com/questions/ 35388688/android-facebook-app-id-show-error-in-values-ta-strings-xml-and-cant-able/35451711 @CommonsWare всегда дает хорошие ответы с подробностями, спасибо! – cwhsu

Смежные вопросы