Как отличать Application ID, package name и ID ресурсов в Android

Краткий ответ: Application ID — уникальный идентификатор приложения в Play и системе (указывать в build.gradle), package name — namespace для кода и манифеста (папки src/main/java и атрибут package в AndroidManifest.xml), ID ресурсов — сгенерированные константы R.* (используются для доступа к strings, drawable, layout и т.д.).

Что такое Application ID и где его менять

Application ID — это глобальный уникальный идентификатор вашего приложения (формат обратного домена, например com.mycompany.myapp). Он привязывается к публикации: два APK с разными Application ID считаются разными приложениями.

Где смотреть и менять:

  • В модуле app/build.gradle (или build.gradle.kts): поле applicationId "com.mycompany.myapp".
  • Менять можно до публикации; после релиза изменение приведёт к созданию нового приложения в Google Play.

Практический совет:

  • Используйте домен компании: com.mycompany.app. Это снижает риск конфликтов.

Если планируете фиче‑виртуализацию (flavors), applicationId можно модифицировать per flavor в Gradle.

Что такое package name и как с ним работать

Package name — это пространство имён для ваших классов Java/Kotlin и значение атрибута package в AndroidManifest.xml. Пример: com.mycompany.myapp.ui.

Где искать и как безопасно менять:

  • AndroidManifest.xml: атрибут package.
  • Папки проекта: app/src/main/java/com/mycompany/myapp.
  • Для переименования используйте Android Studio → Refactor → Rename — инструмент обновит импорты и манифест.

Отличие от Application ID:

  • package name служит для организации кода; applicationId — для идентификации приложения в системе и магазине. Они могут совпадать, но не обязаны.

ID ресурсов (R.*): как устроены и где использовать

ID ресурсов — это целочисленные константы, генерируемые в классе R при компиляции. Они ссылаются на элементы папки res/:

  • res/values/strings.xml → R.string.name
  • res/drawable/ → R.drawable.icon
  • res/layout/ → R.layout.activity_main Используйте getString(R.string.name), setImageResource(R.drawable.icon), setContentView(R.layout.activity_main).

Где смотреть:

  • Файлы в папке res/.
  • Сгенерированный R класс будет виден в коде (но не редактируется вручную).

Не редактируйте R.java вручную — он перезаписывается при сборке. При конфликтах имён в res очистите проект (Build → Clean Project) и проверьте дубликаты.

Частые ошибки

  • Меняете applicationId после публикации → пользователи не получат обновлений.
  • Переименование пакета без Refactor → сломанные импорты и runtime ошибки.
  • Дублированные имена в res/ → ошибки компиляции.
  • Забываете обновить manifest/gradle при миграции библиотек → несовпадение подписи.

Быстрый чек‑лист перед релизом

  • Убедиться, что applicationId совпадает с тем, что в Play Console.
  • Пакеты в коде логично организованы и переименованы через Refactor.
  • Все ресурсы имеют уникальные имена (lower_snake_case для файлов).
  • Собрать релизный билд и проверить: adb shell pm list packages | grep yourapp

FAQ

  • Можно ли поменять applicationId после публикации? Нет — это создаст новое приложение в магазине.
  • Нужно ли package name совпадать с applicationId? Нет, но для простоты часто делают их одинаковыми.
  • Где искать ошибки resource ID? В логах сборки и в папке res — обычно конфликт имён или неверный синтаксис XML.

Соблюдая эти правила, вы предотвратите большинство проблем при рефакторинге и публикации.