Package Name — är en unik identifierare för Android-applikationer, baserad på omvänd skrivning av domännamn (reverse domain notation). Den används av systemet för att särskilja applikationer på användarens enhet, i Google Play för att identifiera produkten och i Firebase-tjänster för att binda alla projektkonfigurationer. Enligt Android Developer Documentation förblir Package Name oförändrat under hela applikationens livscykel efter publicering.
Huvudpunkter
Package Name — är en unik sträng som Android använder för att identifiera applikationen på operativsystemsnivå. Den motsvarar fältet package i filen AndroidManifest.xml och fältet applicationId i filen build.gradle för applikationsmodulen. Utan ett unikt Package Name är installation av applikationen på användarens enhet omöjlig.
På enheten fungerar Package Name som en nyckel för hantering av applikationer: systemet lagrar data, inställningar och cache för varje applikation i katalogen /data/data/[packageName]. Två applikationer med samma identifierare kan inte samexistera — vid försök att installera en dubblett föreslår systemet att den befintliga tas bort.
I Android Gradle Plugin version 0.11+ uppstod en separation mellan Package Name (i manifestet) och Application ID (i build.gradle). Application ID är den faktiska identifieraren för applikationen för systemet och Google Play. Package Name i manifestet används för resursupplösning och generering av R-klassen. Det rekommenderas att hålla dem lika för enkelhetens skull.
// build.gradle (Modul: app)
android {
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 24
targetSdkVersion 34
versionCode 1
versionName "1.0"
}
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
}
Fältet applicationIdSuffix gör det möjligt att lägga till ett suffix till Application ID för olika kompileringskonfigurationer. Debug-versionen kan ha identifieraren com.example.app.debug, vilket gör det möjligt att installera den bredvid produktionsversionen för parallell testning.
Google Play fastställer strikta regler för Package Name som måste följas vid publicering. Identifieraren måste vara unik i hela butikens skala, uppfylla syntaktiska krav och inte bryta mot policy för användning av varumärken.
Package Name får endast innehålla latinska bokstäver (A-Z, a-z), siffror (0-9), punkt (.) och understreck (_). Maximal längd — 150 tecken. Varje segment mellan punkter måste börja med en bokstav. Bindestreck, mellanslag och specialtecken är förbjudna enligt Google Plays regler.
| Krav | Värde | Exempel |
|---|---|---|
| Tillåtna tecken | Latinska bokstäver, siffror, punkt, understreck | com.example.my_app |
| Maximal längd | 150 tecken | com.example.verylongappname |
| Segmentstart | Endast bokstav | com — inte 3com |
| Förbjudet | Bindestreck, mellanslag, kyrilliska | com.min-domän — fel |
| Unikhet | Global i Google Play | Kontroll vid skapande |
Unikhet för Package Name — är ett absolut krav från Google Play Store. Om en annan applikation redan använder den valda identifieraren kommer publiceringen att avvisas. Google frigör inte identifierare för borttagna applikationer, därför är valet av det första Package Name ett kritiskt beslut för varje utvecklingsprojekt.
Omvänd domännotation — är en namngivningsstandard där företagets domännamn skrivs i omvänd ordning: com.example istället för example.com. Ett sådant system garanterar global unikhet för identifierare, eftersom varje domännamn per definition är unikt.
Utvecklare använder vanligtvis prefix som motsvarar TLD för deras domän: com för kommersiella organisationer, org för ideella, io för tekniska projekt, net för nätverkstjänster och lösningar. För personliga projekt är det tillåtet att använda com.github.username eller com.email.
För applikationer som släpps på iOS och Android rekommenderas att använda samma identifierare på båda plattformarna. Detta förenklar integrationen med Firebase, AppsFlyer, Adjust och andra analyssystem som är knutna till projektidentifieraren. Till exempel kommer com.mycompany.myapp att vara Bundle ID på iOS och Package Name på Android.
Konfigurera Package Name i ett Android-projekt innebär att ändra applicationId i build.gradle och motsvarande katalogstruktur för Java/Kotlin-kod. Android Studio tillhandahåller verktyg för att refaktorera Package Name, men för komplexa projekt rekommenderas stegvis migrering.
// Filsökvägen motsvarar 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)
}
}
I Kotlin och Java måste Package Name i källfiler motsvara katalogstrukturen. Vid ändring av Package Name i build.gradle måste filer flyttas till motsvarande kataloger och alla package- och importdeklarationer uppdateras. Android Studio kan göra detta automatiskt via Refactor -> Move, men för stora projekt med dussintals filer rekommenderas att kontrollera resultatet efter refaktorering.
Om projektet använder Data Binding, View Binding eller Hilt kommer ändring av Package Name också att påverka genererade klasser. Bindningsklasser skapas baserat på modulens Package Name och layoutkatalogen. Efter ändring av identifieraren måste projektet byggas om för att uppdatera alla genererade referenser. Det rekommenderas att utföra en clean build efter ändring av Package Name för att eliminera fel på grund av cachade gamla referenser.
I Gradle 7.0+ tillkom stöd för namespace i build.gradle, som ersatte package i AndroidManifest.xml för generering av R-klass och resurser. Application ID förblir dock den faktiska identifieraren för applikationen för systemet och Google Play. Detta gör det möjligt att ha olika applicationId och namespace, vilket är användbart för biblioteksmoduler där namespace är fast och den publika identifieraren kan ändras vid kompilering.
För projekt med modulär arkitektur kan ändring av Package Name för en modul påverka importer i andra moduler. Om datamodulen har paketet com.example.data och domänmodulen använder dess klasser, uppdatera importerna i alla beroende moduler efter identifierarändringen. Gradle-plugin för Android version 8.0+ förenklar denna process genom automatisk generering av namespace från build.gradle.
Aktuell Application ID kan hämtas via klassen BuildConfig: BuildConfig.APPLICATION_ID. Detta är praktiskt för villkorslogik i kod, bindning till miljön eller visning av identifieraren på debug-skärmar. BuildConfig genereras automatiskt baserat på build.gradle.
// Hämta Application ID vid körning
val packageName = BuildConfig.APPLICATION_ID
val packageManager = packageManager
val appInfo = packageManager.getPackageInfo(packageName, 0)
println("Appversion: ${appInfo.versionName} (${appInfo.versionCode})")
println("Paket: $packageName")
Ändra Package Name efter publicering av applikationen i Google Play — är en operation som innebär att skapa en helt ny produkt. Systemet tillåter inte uppdatering av en befintlig applikation med ett annat Package Name, därför är beslutet att ändra identifieraren likvärdigt med att starta om projektet i butiken.
Vid ändring av Package Name förloras: alla betyg och recensioner, installationsstatistik, integration med Google Services (om inte överförd), referenser till Firebase-projekt (kräver skapande av ny google-services.json). Användare får ingen automatisk uppdatering — de kommer att se en ny applikation i butiken.
Ändring av Package Name kan vara motiverad vid omprofilering av företaget, överföring av applikationen till ett annat utvecklarkonto eller vid skapande av en separat version för en annan region. I vilket fall som helst rekommenderas att informera användare via den gamla applikationen och förbereda en migreringsplan med dataöverföring. Utan migreringsplan förlorar användare åtkomst till köpt innehåll, prenumerationer och sparade applikationsdata. Migrering innefattar överföring av databas och filer via SharedPreferences eller Room.
Innan du ändrar Package Name, se till att den nya identifieraren är unik och följer namnreglerna. Skapa en ny applikation i Google Play med det nya Package Name och publicera den som en separat produkt. I beskrivningen av den gamla applikationen lägger du till en länk till den nya. Överväg att använda Google Play Custom Store Listing för att omdirigera användare.
Vanliga frågor
I Package Name är understreck (_) tillåtet, men inte bindestreck (-). Understreck används sällan men är acceptabelt: com.example.my_app. Bindestreck är förbjudet enligt Google Plays regler och orsakar fel vid publicering. Det rekommenderas att endast använda punkt som avgränsare för segment.
Package Name — är identifieraren i AndroidManifest.xml, som används för resursupplösning och generering av R-klassen. Application ID — fältet i build.gradle som bestämmer applikationens identifierare för systemet och Google Play Store. Det rekommenderas att hålla dem lika, men skillnad är acceptabel vid användning av applicationIdSuffix.
Använd omvänd domännotation för ditt företag eller användarnamn: com.domän.appnamn. Se till att identifieraren är unik i Google Play. Undvik allmänna ord (todo, test, app) och kontrollera om identifieraren är upptagen av en annan utvecklare genom sökning i Google Play.
Ja, före publicering i Google Play kan Package Name ändras utan konsekvenser. Efter ändring måste google-services.json återskapas, katalogstrukturen uppdateras och alla importer kontrolleras. Android Studio tillhandahåller verktygen Refactor -> Move för automatisering av processen.
Package Name tillsammans med signaturcertifikatet bildar en unik koppling som identifierar applikationen i Google Play. Även om två applikationer har olika Package Name kan de signeras med samma nyckel. Ändring av signaturcertifikat är möjlig via Key Rotation i Play Console utan förlust av identifieraren.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också