Как отличать 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.
Соблюдая эти правила, вы предотвратите большинство проблем при рефакторинге и публикации.