Kotlin: Разница между app.R и com.google.android.material.R

Разработчики Android нередко сталкиваются с путаницей относительно использования различных версий класса R, особенно когда речь идет о доступе к ресурсам своего приложения и сторонних библиотек. Эта статья поможет разобраться в разнице между app.R и com.google.android.material.R, а также научит правильно обращаться к нужным ресурсам.

Что такое классы R?


Класс R представляет собой специальную структуру, автоматически создаваемую Android Studio во время процесса сборки проекта. Он служит контейнером ссылок на ресурсы вашего приложения (изображения, цвета, стили, макеты и т.д.). Каждый ресурс автоматически получает уникальный числовой идентификатор, хранящийся в соответствующих полях класса R.

Классы R бывают двух типов:
  • Ваш собственный класс R, называемый app.R, соответствует ресурсам вашего проекта.
  • Класс R сторонней библиотеки, обозначаемый именем пакета библиотеки (например, com.google.android.material.R), содержит ссылки на ресурсы конкретной внешней библиотеки.

app.R


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

Как используется?
Используя класс app.R, вы обращаетесь к собственным ресурсам приложения:
setBackgroundColor(ContextCompat.getColor(context, R.color.my_color))
setImageResource(R.drawable.ic_launcher_background)

com.google.android.material.R


Что это?Библиотека Material Components for Android (com.google.android.material) предлагает набор готовых элементов дизайна и стилей, которые соответствуют руководствам Material Design. Каждое расширение предоставляет собственные ресурсы, которые упаковываются отдельно от ресурсов основного приложения.

Как используется?
Класс com.google.android.material.R даёт возможность обратиться к ресурсам, принадлежащим самой библиотеке Material Components. Например, к стилю кнопки, цвету акцента, форме полей ввода и другим элементам оформления:
style="@style/Widget.MaterialComponents.Button.OutlinedButton.Icon"
colorPrimary="@color/material_on_primary_emphasis_high_type"

Обратите внимание, что обращаться к этим ресурсам нужно именно через полный путь, так как они принадлежат отдельной библиотеке:
setBackgroundColor(ContextCompat.getColor(context, com.google.android.material.R.color.design_default_color_secondary))

Когда использовать каждый из них?



Используйте app.R, когда вам нужно обратиться к ресурсу вашего приложения:
  • Цвета, определённые в "colors.xml".
  • Строки, прописанные в "strings.xml".
  • Макеты и образы из папки "drawable".

Используйте com.google.android.material.R, когда используете ресурсы из библиотеки Material Components:
  • Стили кнопок, чекбоксов и переключателей.
  • Типографика и оформление экранов согласно гайдлайнам Material Design.

Подведём итоги


  • app.R содержит ресурсы вашего собственного приложения.
  • com.google.android.material.R включает ресурсы библиотеки Material Components.
  • Обращаться к нужному классу ресурсов необходимо соответствующим образом, учитывая источник происхождения ресурса.

Умение верно обращаться к разным классам R сделает ваш код аккуратным и безопасным, предотвратив потенциальные ошибки при сборке и развертывании приложения.

Автор:  26.02.2026 07:17:30 am