Package Name — шта је то, реверзна доменска нотација и захтеви

Аутор: 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 (Модул: 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-а критична одлука за сваки пројекат програмера.

Реверзна доменска нотација и конвенције

Реверзна доменска нотација — је стандард именовања у којем се име домена компаније записује обрнутим редоследом: 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-а једног модула може утицати на importе у другим модулима. Ако модул data има пакет com.example.data, а модул domain користи његове класе, након промене идентификатора ажурирајте importе у свим зависним модулима. Gradle прикључак за Android верзије 8.0+ поједностављује овај процес аутоматским генерисањем namespace-а из build.gradle.

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

Тренутни Application ID се може добити кроз класу BuildConfig: BuildConfig.APPLICATION_ID. Ово је згодно за условну логику у коду, везивање за окружење или приказ идентификатора на debug екранима. BuildConfig се аутоматски генерише на основу build.gradle.

kotlin
// Добијање Application ID у току извршавања
val packageName = BuildConfig.APPLICATION_ID
val packageManager = packageManager
val appInfo = packageManager.getPackageInfo(packageName, 0)

println("Верзија апликације: ${appInfo.versionName} (${appInfo.versionCode})")
println("Пакет: $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-а може бити оправдана при ребрендирању компаније, преносу апликације на други налог програмера или при стварању засебне верзије за други регион. У сваком случају, пре промене се препоручује обавештавање корисника кроз стару апликацију и припрема плана миграције са преносом података. Без плана миграције, корисници ће изгубити приступ купљеном садржају, претплатама и сачуваним подацима апликације. Миграција укључује пренос базе података и датотека путем 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 за нови пројекат?

Користите реверзну доменску нотацију ваше компаније или надимак: com.domen.imeaplikacije. Уверите се да је идентификатор јединствен у Google Play-у. Избегавајте опште речи (todo, test, app) и проверите да ли идентификатор није заузет од стране другог програмера претрагом у Google Play-у.

Може ли се променити Package Name пре објављивања у Google Play-у?

Да, пре објављивања у Google Play-у, Package Name се може променити без последица. Након промене биће потребно поново генерисати google-services.json, ажурирати структуру директоријума и проверити све importе. Android Studio пружа алате Refactor -> Move за аутоматизацију процеса.

Како је Package Name повезан са потписом апликације?

Package Name заједно са сертификатом потписа чини јединствену везу која идентификује апликацију у Google Play-у. Чак и ако две апликације имају различит Package Name, могу бити потписане истим кључем. Промена сертификата потписа је могућа кроз Key Rotation у Play Console-и без губитка идентификатора.

Завршни преглед

  • Package Name — јединствени идентификатор Android апликације у формату реверзне доменске нотације
  • Правила именовања — латиница, бројеви, тачка, доња црта; највише 150 знакова
  • Реверзни домен гарантује глобалну јединственост: com.company.appname
  • Application ID у build.gradle одговара Package Name-у и може имати суфиксе израде
  • Промена након објављивања није могућа — нова апликација губи оцене и рецензије
  • Android Studio пружа алате за рефакторисање ради безбедне промене пре објављивања
  • Препорука — изаберите смислени идентификатор пре објављивања, избегавајте општа и заузета имена

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође