Package Name — что это, reverse domain notation и требования

Автор: IT Sectr Опубликовано: 2026-04-17 Время чтения: 8 мин

Package Name — это уникальный идентификатор Android-приложения, основанный на обратной записи доменного имени (reverse domain notation). Он используется системой для разграничения приложений на устройстве пользователя, в Google Play для идентификации продукта и в сервисах Firebase для привязки всех конфигураций проекта. По данным Android Developer Documentation, Package Name остаётся неизменным на всём жизненном цикле приложения после публикации.

Главное

  • Package Name — глобальный идентификатор Android-приложения в формате reverse domain
  • Формат использует домен компании в обратном порядке: com.example.app
  • Уникальность проверяется Google Play при публикации — дубликаты запрещены
  • Изменение Package Name после публикации невозможно без создания нового приложения
  • Application ID в build.gradle соответствует Package Name и настраивается отдельно

Что такое Package Name в Android

Package Name — это уникальная строка, которую Android использует для идентификации приложения на уровне операционной системы. Она соответствует полю package в файле AndroidManifest.xml и полю applicationId в файле build.gradle модуля приложения. Без уникального Package Name установка приложения на устройство пользователя невозможна.

Назначение Package Name

На устройстве Package Name выступает ключом для управления приложениями: система хранит данные, настройки и кэш каждого приложения в директории /data/data/[packageName]. Два приложения с одинаковым идентификатором не могут сосуществовать — при попытке установить дубликат система предлагает удалить существующее.

Package Name и Application ID

В Android Gradle Plugin версии 0.11+ появилось разделение между Package Name (в манифесте) и Application ID (в build.gradle). Application ID — это фактический идентификатор приложения для системы и Google Play. Package Name в манифесте используется для разрешения ресурсов и генерации R-класса. Рекомендуется держать их одинаковыми для простоты.

groovy
// build.gradle (Module: app)
android {
    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 24
        targetSdkVersion 34
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        debug {
            applicationIdSuffix ".debug"
        }
    }
}

Поле applicationIdSuffix позволяет добавить суффикс к Application ID для разных конфигураций сборки. Debug-версия может иметь идентификатор com.example.app.debug, что позволяет установить её рядом с продакшн-версией для параллельного тестирования.

Правила именования Package Name

Google Play устанавливает жёсткие правила для Package Name, которые необходимо соблюдать при публикации. Идентификатор должен быть уникальным в масштабе всего магазина, соответствовать синтаксическим требованиям и не нарушать политику использования торговых марок.

Синтаксические требования

Package Name может содержать только латинские буквы (A-Z, a-z), цифры (0-9), точку (.) и символ подчёркивания (_). Максимальная длина — 150 символов. Каждый сегмент между точками должен начинаться с буквы. Дефисы, пробелы и специальные символы запрещены правилами Google Play.

ТребованиеЗначениеПример
Допустимые символыЛатиница, цифры, точка, подчёркиваниеcom.example.my_app
Максимальная длина150 символовcom.example.verylongappname
Начало сегментаТолько букваcom — не 3com
ЗапрещеноДефисы, пробелы, кириллицаcom.мой-домен — ошибка
УникальностьГлобальная в Google PlayПроверка при создании

Требования к уникальности

Уникальность Package Name — абсолютное требование Google Play Store. Если другое приложение уже использует выбранный идентификатор, публикация будет отклонена. Google не освобождает идентификаторы удалённых приложений, поэтому выбор первого Package Name — критичное решение для каждого проекта разработчика.

Reverse domain notation и соглашения

Reverse domain notation — это стандарт именования, в котором доменное имя компании записывается в обратном порядке: com.example вместо example.com. Такая система гарантирует глобальную уникальность идентификаторов, поскольку каждое доменное имя уникально по определению.

Стандартные префиксы

Разработчики обычно используют префикс, соответствующий TLD их домена: com для коммерческих организаций, org для некоммерческих, io для технологических проектов, net для сетевых сервисов и решений. Для личных проектов допустимо использовать com.github.username или com.email.

  • com.company.app — стандартный формат для коммерческих приложений
  • org.company.app — для некоммерческих и open-source проектов
  • io.company.app — популярно среди стартапов и SaaS-продуктов
  • com.github.username — для личных проектов на GitHub

Соглашения для мультиплатформенных проектов

Для приложений, выпускаемых на iOS и Android, рекомендуется использовать одинаковый идентификатор на обеих платформах. Это упрощает интеграцию с Firebase, AppsFlyer, Adjust и другими аналитическими системами, которые привязываются к идентификатору проекта. Например, com.mycompany.myapp будет Bundle ID на iOS и Package Name на Android.

Настройка Package Name в Android проекте

Настройка Package Name в Android-проекте включает изменение applicationId в build.gradle и соответствующей структуры директорий Java/Kotlin кода. Android Studio предоставляет инструменты для рефакторинга Package Name, но для сложных проектов рекомендуется пошаговая миграция.

Структура директорий и Package Name

kotlin
// Путь к файлу соответствует Package Name
// com/example/myapp/MainActivity.kt

package com.example.myapp

import android.os.Bundle
import androidx.activity.ComponentActivity

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
}

В Kotlin и Java Package Name в исходных файлах должен соответствовать структуре директорий. При изменении Package Name в build.gradle необходимо переместить файлы в соответствующие директории и обновить все объявления package и import. Android Studio умеет делать это автоматически через Refactor -> Move, но для больших проектов с десятками файлов рекомендуется проверять результат после рефакторинга.

Если проект использует Data Binding, View Binding или Hilt, изменение Package Name также затронет генерируемые классы. Binding-классы создаются на основе Package Name модуля и директории layout. После смены идентификатора потребуется пересобрать проект, чтобы обновить все сгенерированные ссылки. Рекомендуется выполнять clean build после изменения Package Name, чтобы исключить ошибки из-за кэшированных старых ссылок.

В Gradle 7.0+ появилась поддержка namespace в build.gradle, который заменил package в AndroidManifest.xml для целей генерации R-класса и ресурсов. При этом applicationId остаётся фактическим идентификатором приложения для системы и Google Play. Это позволяет иметь разные applicationId и namespace, что полезно для библиотечных модулей, где namespace фиксирован, а публичный идентификатор может меняться при сборке.

Для проектов с модульной архитектурой изменение Package Name одного модуля может затронуть импорты в других модулях. Если модуль data имеет пакет com.example.data, а модуль domain использует его классы, после смены идентификатора обновите импорты во всех зависимых модулях. Gradle-плагин Android версии 8.0+ упрощает этот процесс за счёт автоматической генерации namespace из build.gradle.

Проверка Package Name через код

Получить текущий Application ID можно через класс BuildConfig: BuildConfig.APPLICATION_ID. Это удобно для условной логики в коде, привязки к окружению или отображения идентификатора в debug-экранах. BuildConfig генерируется автоматически на основе build.gradle.

kotlin
// Получение Application ID в runtime
val packageName = BuildConfig.APPLICATION_ID
val packageManager = packageManager
val appInfo = packageManager.getPackageInfo(packageName, 0)

println("App version: ${appInfo.versionName} (${appInfo.versionCode})")
println("Package: $packageName")

Изменение Package Name после публикации

Изменение Package Name после публикации приложения в Google Play — операция, которая означает создание совершенно нового продукта. Система не позволяет обновить существующее приложение с другим Package Name, поэтому решение о смене идентификатора равносильно перезапуску проекта в магазине.

Последствия смены Package Name

При смене Package Name теряются: все рейтинги и отзывы, статистика установок, интеграция с Google Services (если не перенесена), ссылки на Firebase-проект (требует создания нового google-services.json). Пользователи не получат автоматическое обновление — они увидят новое приложение в магазине.

  • Рейтинги и отзывы — остаются у старого приложения, не переносятся
  • Статистика установок — обнуляется для нового Package Name
  • Firebase проекты — требуют новой конфигурации google-services.json и повторной настройки всех сервисов
  • Пользователи — не получают автоматическое обновление, нужно уведомлять отдельно

Когда смена Package Name оправдана

Смена Package Name может быть оправдана при ребрендинге компании, переносе приложения под другой аккаунт разработчика или при создании отдельной версии для другого региона. В любом случае, перед сменой рекомендуется уведомить пользователей через старое приложение и подготовить миграционный план с переносом данных. Без миграционного плана пользователи потеряют доступ к purchased-контенту, подпискам и сохранённым данным приложения. Миграция включает перенос базы данных и файлов через SharedPreferences или Room.

Перед сменой Package Name убедитесь, что новый идентификатор уникален и соответствует правилам именования. Создайте новое приложение в Google Play с новым Package Name и опубликуйте его как отдельный продукт. В описании старого приложения укажите ссылку на новое. Рассмотрите возможность использования Google Play Custom Store Listing для перенаправления пользователей.

Часто задаваемые вопросы

Можно ли использовать в Package Name дефис или подчёркивание?

В Package Name допускается символ подчёркивания (_), но не дефис (-). Подчёркивание используется редко, но допустимо: com.example.my_app. Дефис запрещён правилами Google Play и приведёт к ошибке при публикации. Рекомендуется использовать только точку в качестве разделителя сегментов.

Чем отличается Package Name от Application ID в build.gradle?

Package Name — это идентификатор в AndroidManifest.xml, используемый для разрешения ресурсов и генерации R-класса. Application ID — поле в build.gradle, которое определяет идентификатор приложения для системы и Google Play Store. Рекомендуется держать их одинаковыми, но допустимо различие при использовании applicationIdSuffix.

Как правильно выбрать Package Name для нового проекта?

Используйте reverse domain notation вашей компании или никнейма: com.domain.appname. Убедитесь, что идентификатор уникален в Google Play. Избегайте общих слов (todo, test, app) и проверьте, не занят ли идентификатор другим разработчиком через поиск в Google Play.

Можно ли сменить Package Name до публикации в Google Play?

Да, до публикации в Google Play Package Name можно изменить без последствий. После изменения потребуется перегенерировать google-services.json, обновить структуру директорий и проверить все импорты. Android Studio предоставляет инструменты Refactor -> Move для автоматизации процесса.

Как Package Name связан с подписью приложения?

Package Name вместе с сертификатом подписи образует уникальную связку, которая идентифицирует приложение в Google Play. Даже если два приложения имеют разный Package Name, они могут быть подписаны одним ключом. Смена сертификата подписи возможна через Key Rotation в Play Console без потери идентификатора.

Итоги

  • Package Name — уникальный идентификатор Android-приложения в формате reverse domain notation
  • Правила именования — латиница, цифры, точка, подчёркивание; максимум 150 символов
  • Reverse domain гарантирует глобальную уникальность: com.company.appname
  • Application ID в build.gradle соответствует Package Name и может иметь суффиксы сборки
  • Изменение после публикации невозможно — новое приложение теряет рейтинги и отзывы
  • Android Studio предоставляет инструменты рефакторинга для безопасной смены до публикации
  • Рекомендация — выбирать осмысленный идентификатор до публикации, избегать общих и занятых имён

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также