Package Name — este un identificator unic al aplicației Android, bazat pe scrierea inversă a numelui de domeniu (reverse domain notation). Este folosit de sistem pentru a diferenția aplicațiile pe dispozitivul utilizatorului, în Google Play pentru identificarea produsului și în serviciile Firebase pentru legarea tuturor configurațiilor proiectului. Conform Android Developer Documentation, Package Name rămâne neschimbat pe tot ciclul de viață al aplicației după publicare.
Principalele puncte
Package Name — este un șir unic pe care Android îl folosește pentru identificarea aplicației la nivelul sistemului de operare. Acesta corespunde câmpului package din fișierul AndroidManifest.xml și câmpului applicationId din fișierul build.gradle al modulului aplicației. Fără un Package Name unic, instalarea aplicației pe dispozitivul utilizatorului este imposibilă.
Pe dispozitiv, Package Name servește ca cheie pentru gestionarea aplicațiilor: sistemul stochează datele, setările și memoria cache a fiecărei aplicații în directorul /data/data/[packageName]. Două aplicații cu același identificator nu pot coexista — la încercarea de a instala un duplicat, sistemul propune eliminarea aplicației existente.
În Android Gradle Plugin versiunea 0.11+ a apărut separarea între Package Name (în manifest) și Application ID (în build.gradle). Application ID este identificatorul real al aplicației pentru sistem și Google Play. Package Name în manifest este folosit pentru rezolvarea resurselor și generarea clasei R. Se recomandă să le păstrați identice pentru simplitate.
// build.gradle (Modul: app)
android {
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 24
targetSdkVersion 34
versionCode 1
versionName "1.0"
}
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
}
Câmpul applicationIdSuffix permite adăugarea unui sufix la Application ID pentru diferite configurații de compilare. Versiunea debug poate avea identificatorul com.example.app.debug, permițând instalarea ei lângă versiunea de producție pentru testare paralelă.
Google Play stabilește reguli stricte pentru Package Name care trebuie respectate la publicare. Identificatorul trebuie să fie unic la scara întregului magazin, să respecte cerințele sintactice și să nu încalce politica de utilizare a mărcilor comerciale.
Package Name poate conține doar litere latine (A-Z, a-z), cifre (0-9), punct (.) și caracterul de subliniere (_). Lungimea maximă — 150 de caractere. Fiecare segment dintre puncte trebuie să înceapă cu o literă. Liniuțele, spațiile și caracterele speciale sunt interzise de regulile Google Play.
| Cerință | Valoare | Exemplu |
|---|---|---|
| Caractere permise | Litere latine, cifre, punct, subliniere | com.example.my_app |
| Lungimea maximă | 150 de caractere | com.example.verylongappname |
| Începutul segmentului | Doar literă | com — nu 3com |
| Interzis | Liniuțe, spații, chirilică | com.domeniul-meu — eroare |
| Unicitatea | Globală în Google Play | Verificare la creare |
Unicitatea Package Name — este o cerință absolută a Google Play Store. Dacă o altă aplicație folosește deja identificatorul ales, publicarea va fi respinsă. Google nu eliberează identificatorii aplicațiilor șterse, de aceea alegerea primului Package Name este o decizie critică pentru fiecare proiect de dezvoltare.
Notația inversă de domeniu — este un standard de denumire în care numele de domeniu al companiei se scrie în ordine inversă: com.example în loc de example.com. Un astfel de sistem garantează unicitatea globală a identificatorilor, deoarece fiecare nume de domeniu este unic prin definiție.
Dezvoltatorii folosesc de obicei prefixul corespunzător TLD-ului domeniului lor: com pentru organizații comerciale, org pentru non-profit, io pentru proiecte tehnologice, net pentru servicii de rețea și soluții. Pentru proiecte personale este permisă utilizarea com.github.username sau com.email.
Pentru aplicațiile lansate pe iOS și Android, se recomandă utilizarea aceluiași identificator pe ambele platforme. Aceasta simplifică integrarea cu Firebase, AppsFlyer, Adjust și alte sisteme analitice care se leagă de identificatorul proiectului. De exemplu, com.mycompany.myapp va fi Bundle ID pe iOS și Package Name pe Android.
Configurarea Package Name în proiectul Android include modificarea applicationId în build.gradle și a structurii corespunzătoare de directoare a codului Java/Kotlin. Android Studio oferă instrumente pentru refactorizarea Package Name, dar pentru proiecte complexe se recomandă migrarea pas cu pas.
// Calea fișierului corespunde 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)
}
}
În Kotlin și Java, Package Name în fișierele sursă trebuie să corespundă structurii de directoare. La modificarea Package Name în build.gradle, trebuie să mutați fișierele în directoarele corespunzătoare și să actualizați toate declarațiile package și import. Android Studio poate face acest lucru automat prin Refactor -> Move, dar pentru proiecte mari cu zeci de fișiere, se recomandă verificarea rezultatului după refactorizare.
Dacă proiectul folosește Data Binding, View Binding sau Hilt, modificarea Package Name va afecta și clasele generate. Clasele Binding sunt create pe baza Package Name al modulului și a directorului layout. După schimbarea identificatorului, va fi necesară reconstruirea proiectului pentru a actualiza toate referințele generate. Se recomandă efectuarea unui clean build după modificarea Package Name pentru a elimina erorile cauzate de referințele vechi stocate în cache.
În Gradle 7.0+ a apărut suportul pentru namespace în build.gradle, care a înlocuit package din AndroidManifest.xml în scopul generării clasei R și a resurselor. În același timp, applicationId rămâne identificatorul real al aplicației pentru sistem și Google Play. Aceasta permite să aveți applicationId și namespace diferite, ceea ce este util pentru modulele bibliotecă, unde namespace este fix, iar identificatorul public se poate schimba la compilare.
Pentru proiecte cu arhitectură modulară, modificarea Package Name a unui modul poate afecta importurile din alte module. Dacă modulul data are pachetul com.example.data, iar modulul domain folosește clasele sale, după schimbarea identificatorului actualizați importurile în toate modulele dependente. Pluginul Gradle Android versiunea 8.0+ simplifică acest proces prin generarea automată a namespace-ului din build.gradle.
Application ID curent poate fi obținut prin clasa BuildConfig: BuildConfig.APPLICATION_ID. Acest lucru este convenabil pentru logica condiționată în cod, legarea de mediu sau afișarea identificatorului în ecranele de debug. BuildConfig este generat automat pe baza build.gradle.
// Obținerea Application ID în timpul executării
val packageName = BuildConfig.APPLICATION_ID
val packageManager = packageManager
val appInfo = packageManager.getPackageInfo(packageName, 0)
println("Versiunea aplicației: ${appInfo.versionName} (${appInfo.versionCode})")
println("Pachet: $packageName")
Modificarea Package Name după publicarea aplicației în Google Play — este o operație care înseamnă crearea unui produs complet nou. Sistemul nu permite actualizarea aplicației existente cu un alt Package Name, de aceea decizia de schimbare a identificatorului este echivalentă cu repornirea proiectului în magazin.
La schimbarea Package Name se pierd: toate ratingurile și recenziile, statisticile de instalare, integrarea cu Google Services (dacă nu a fost transferată), referințele la proiectul Firebase (necesită crearea unui nou google-services.json). Utilizatorii nu vor primi actualizare automată — vor vedea o nouă aplicație în magazin.
Schimbarea Package Name poate fi justificată la rebrandingul companiei, transferul aplicației pe un alt cont de dezvoltator sau la crearea unei versiuni separate pentru o altă regiune. În orice caz, înainte de schimbare se recomandă anunțarea utilizatorilor prin vechea aplicație și pregătirea unui plan de migrare cu transferul datelor. Fără un plan de migrare, utilizatorii vor pierde accesul la conținutul achiziționat, abonamente și datele salvate ale aplicației. Migrarea include transferul bazei de date și al fișierelor prin SharedPreferences sau Room.
Înainte de schimbarea Package Name, asigurați-vă că noul identificator este unic și respectă regulile de denumire. Creați o nouă aplicație în Google Play cu noul Package Name și publicați-o ca produs separat. În descrierea vechii aplicații, adăugați un link către cea nouă. Luați în considerare utilizarea Google Play Custom Store Listing pentru redirecționarea utilizatorilor.
Întrebări frecvente
În Package Name este permis caracterul de subliniere (_), dar nu și liniuța (-). Sublinierea este folosită rar, dar este acceptabilă: com.example.my_app. Liniuța este interzisă de regulile Google Play și va cauza o eroare la publicare. Se recomandă utilizarea doar a punctului ca separator de segmente.
Package Name — este identificatorul din AndroidManifest.xml, folosit pentru rezolvarea resurselor și generarea clasei R. Application ID — câmpul din build.gradle care determină identificatorul aplicației pentru sistem și Google Play Store. Se recomandă să le păstrați identice, dar diferența este acceptabilă la utilizarea applicationIdSuffix.
Folosiți notația inversă de domeniu a companiei sau pseudonimului dumneavoastră: com.domeniu.numeaplicație. Asigurați-vă că identificatorul este unic în Google Play. Evitați cuvintele generice (todo, test, app) și verificați dacă identificatorul nu este ocupat de alt dezvoltator prin căutare în Google Play.
Da, înainte de publicarea în Google Play, Package Name poate fi schimbat fără consecințe. După schimbare, va fi necesară regenerarea google-services.json, actualizarea structurii de directoare și verificarea tuturor importurilor. Android Studio oferă instrumentele Refactor -> Move pentru automatizarea procesului.
Package Name împreună cu certificatul de semnătură formează o legătură unică care identifică aplicația în Google Play. Chiar dacă două aplicații au Package Name diferit, ele pot fi semnate cu aceeași cheie. Schimbarea certificatului de semnătură este posibilă prin Key Rotation în Play Console fără pierderea identificatorului.
Concluzii
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și