Package Name — to unikalny identyfikator aplikacji Android, oparty na odwrotnym zapisie nazwy domeny (reverse domain notation). Jest używany przez system do rozróżniania aplikacji na urządzeniu użytkownika, w Google Play do identyfikacji produktu oraz w serwisach Firebase do powiązania wszystkich konfiguracji projektu. Według Android Developer Documentation, Package Name pozostaje niezmieniony przez cały cykl życia aplikacji po publikacji.
Najważniejsze
Package Name — to unikalny ciąg znaków, którego Android używa do identyfikacji aplikacji na poziomie systemu operacyjnego. Odpowiada on polu package w pliku AndroidManifest.xml oraz polu applicationId w pliku build.gradle modułu aplikacji. Bez unikalnego Package Name instalacja aplikacji na urządzeniu użytkownika jest niemożliwa.
Na urządzeniu Package Name pełni rolę klucza do zarządzania aplikacjami: system przechowuje dane, ustawienia i pamięć podręczną każdej aplikacji w katalogu /data/data/[packageName]. Dwie aplikacje z tym samym identyfikatorem nie mogą współistnieć — przy próbie zainstalowania duplikatu system proponuje usunięcie istniejącej.
W Android Gradle Plugin w wersji 0.11+ pojawiło się rozdzielenie między Package Name (w manifeście) a Application ID (w build.gradle). Application ID to faktyczny identyfikator aplikacji dla systemu i Google Play. Package Name w manifeście jest używany do rozwiązywania zasobów i generowania klasy R. Zaleca się utrzymywanie ich w zgodności dla uproszczenia.
// build.gradle (Moduł: app)
android {
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 24
targetSdkVersion 34
versionCode 1
versionName "1.0"
}
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
}
Pole applicationIdSuffix pozwala dodać sufiks do Application ID dla różnych konfiguracji kompilacji. Wersja debug może mieć identyfikator com.example.app.debug, co umożliwia zainstalowanie jej obok wersji produkcyjnej do równoległego testowania.
Google Play ustanawia ścisłe zasady dla Package Name, których należy przestrzegać przy publikacji. Identyfikator musi być unikalny w skali całego sklepu, spełniać wymagania składniowe i nie naruszać polityki dotyczącej znaków towarowych.
Package Name może zawierać tylko litery łacińskie (A-Z, a-z), cyfry (0-9), kropkę (.) i znak podkreślenia (_). Maksymalna długość — 150 znaków. Każdy segment między kropkami musi zaczynać się od litery. Łączniki, spacje i znaki specjalne są zabronione przez zasady Google Play.
| Wymaganie | Wartość | Przykład |
|---|---|---|
| Dozwolone znaki | Litery łacińskie, cyfry, kropka, podkreślenie | com.example.my_app |
| Maksymalna długość | 150 znaków | com.example.verylongappname |
| Początek segmentu | Tylko litera | com — nie 3com |
| Zakazane | Łączniki, spacje, cyrylica | com.mój-domena — błąd |
| Unikalność | Globalna w Google Play | Sprawdzanie przy tworzeniu |
Unikalność Package Name — to bezwzględny wymóg Google Play Store. Jeśli inna aplikacja już używa wybranego identyfikatora, publikacja zostanie odrzucona. Google nie zwalnia identyfikatorów usuniętych aplikacji, dlatego wybór pierwszego Package Name to krytyczna decyzja dla każdego projektu deweloperskiego.
Odwrotna notacja domenowa — to standard nazewnictwa, w którym nazwa domeny firmy jest zapisywana w odwrotnej kolejności: com.example zamiast example.com. Taki system gwarantuje globalną unikalność identyfikatorów, ponieważ każda nazwa domeny jest z definicji unikalna.
Deweloperzy zazwyczaj używają prefiksu odpowiadającego TLD ich domeny: com dla organizacji komercyjnych, org dla non-profit, io dla projektów technologicznych, net dla usług sieciowych i rozwiązań. Dla projektów osobistych dopuszczalne jest użycie com.github.username lub com.email.
Dla aplikacji wydawanych na iOS i Android zaleca się używanie tego samego identyfikatora na obu platformach. Upraszcza to integrację z Firebase, AppsFlyer, Adjust i innymi systemami analitycznymi, które wiążą się z identyfikatorem projektu. Na przykład com.mycompany.myapp będzie Bundle ID na iOS i Package Name na Android.
Konfiguracja Package Name w projekcie Android obejmuje zmianę applicationId w build.gradle oraz odpowiedniej struktury katalogów kodu Java/Kotlin. Android Studio udostępnia narzędzia do refaktoryzacji Package Name, ale dla złożonych projektów zaleca się migrację krok po kroku.
// Ścieżka pliku odpowiada 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)
}
}
W Kotlin i Java Package Name w plikach źródłowych musi odpowiadać strukturze katalogów. Przy zmianie Package Name w build.gradle należy przenieść pliki do odpowiednich katalogów i zaktualizować wszystkie deklaracje package i import. Android Studio potrafi to robić automatycznie przez Refactor -> Move, ale dla dużych projektów z dziesiątkami plików zaleca się sprawdzenie wyniku po refaktoryzacji.
Jeśli projekt używa Data Binding, View Binding lub Hilt, zmiana Package Name wpłynie również na generowane klasy. Klasy Binding są tworzone na podstawie Package Name modułu i katalogu layout. Po zmianie identyfikatora konieczne będzie przebudowanie projektu, aby zaktualizować wszystkie wygenerowane odniesienia. Zaleca się wykonanie clean build po zmianie Package Name, aby wyeliminować błędy z powodu buforowanych starych odniesień.
W Gradle 7.0+ pojawiła się obsługa namespace w build.gradle, który zastąpił package w AndroidManifest.xml do celów generowania klasy R i zasobów. Przy czym applicationId pozostaje faktycznym identyfikatorem aplikacji dla systemu i Google Play. Pozwala to na posiadanie różnych applicationId i namespace, co jest przydatne dla modułów bibliotecznych, gdzie namespace jest stały, a publiczny identyfikator może się zmieniać podczas kompilacji.
Dla projektów z architekturą modułową zmiana Package Name jednego modułu może wpłynąć na importy w innych modułach. Jeśli moduł data ma pakiet com.example.data, a moduł domain używa jego klas, po zmianie identyfikatora zaktualizuj importy we wszystkich zależnych modułach. Wtyczka Gradle Android w wersji 8.0+ upraszcza ten proces dzięki automatycznej generacji namespace z build.gradle.
Bieżący Application ID można uzyskać przez klasę BuildConfig: BuildConfig.APPLICATION_ID. Jest to wygodne do logiki warunkowej w kodzie, wiązania ze środowiskiem lub wyświetlania identyfikatora na ekranach debug. BuildConfig jest generowany automatycznie na podstawie build.gradle.
// Pobieranie Application ID w czasie wykonania
val packageName = BuildConfig.APPLICATION_ID
val packageManager = packageManager
val appInfo = packageManager.getPackageInfo(packageName, 0)
println("Wersja aplikacji: ${appInfo.versionName} (${appInfo.versionCode})")
println("Pakiet: $packageName")
Zmiana Package Name po publikacji aplikacji w Google Play — to operacja, która oznacza utworzenie całkowicie nowego produktu. System nie pozwala na aktualizację istniejącej aplikacji z innym Package Name, dlatego decyzja o zmianie identyfikatora jest równoznaczna z ponownym uruchomieniem projektu w sklepie.
Przy zmianie Package Name tracone są: wszystkie oceny i recenzje, statystyki instalacji, integracja z Google Services (jeśli nie została przeniesiona), odniesienia do projektu Firebase (wymaga utworzenia nowego google-services.json). Użytkownicy nie otrzymają automatycznej aktualizacji — zobaczą nową aplikację w sklepie.
Zmiana Package Name może być uzasadniona przy rebrandingu firmy, przeniesieniu aplikacji na inne konto deweloperskie lub przy tworzeniu oddzielnej wersji dla innego regionu. W każdym przypadku przed zmianą zaleca się poinformowanie użytkowników przez starą aplikację i przygotowanie planu migracji z przeniesieniem danych. Bez planu migracji użytkownicy stracą dostęp do zakupionych treści, subskrypcji i zapisanych danych aplikacji. Migracja obejmuje przeniesienie bazy danych i plików przez SharedPreferences lub Room.
Przed zmianą Package Name upewnij się, że nowy identyfikator jest unikalny i zgodny z zasadami nazewnictwa. Utwórz nową aplikację w Google Play z nowym Package Name i opublikuj ją jako osobny produkt. W opisie starej aplikacji umieść link do nowej. Rozważ użycie Google Play Custom Store Listing do przekierowania użytkowników.
Często zadawane pytania
W Package Name dozwolony jest znak podkreślenia (_), ale nie łącznik (-). Podkreślenie jest używane rzadko, ale jest dopuszczalne: com.example.my_app. Łącznik jest zabroniony przez zasady Google Play i spowoduje błąd przy publikacji. Zaleca się używanie tylko kropki jako separatora segmentów.
Package Name — to identyfikator w AndroidManifest.xml, używany do rozwiązywania zasobów i generowania klasy R. Application ID — pole w build.gradle, które określa identyfikator aplikacji dla systemu i Google Play Store. Zaleca się utrzymywanie ich w zgodności, ale dopuszczalna jest różnica przy użyciu applicationIdSuffix.
Użyj odwrotnej notacji domenowej swojej firmy lub pseudonimu: com.domena.nazwaaplikacji. Upewnij się, że identyfikator jest unikalny w Google Play. Unikaj ogólnych słów (todo, test, app) i sprawdź, czy identyfikator nie jest zajęty przez innego dewelopera przez wyszukiwanie w Google Play.
Tak, przed publikacją w Google Play Package Name można zmienić bez konsekwencji. Po zmianie konieczne będzie ponowne wygenerowanie google-services.json, aktualizacja struktury katalogów i sprawdzenie wszystkich importów. Android Studio udostępnia narzędzia Refactor -> Move do automatyzacji procesu.
Package Name wraz z certyfikatem podpisu tworzy unikalne powiązanie, które identyfikuje aplikację w Google Play. Nawet jeśli dwie aplikacje mają różny Package Name, mogą być podpisane tym samym kluczem. Zmiana certyfikatu podpisu jest możliwa przez Key Rotation w Play Console bez utraty identyfikatora.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również