Package Name, ters alan adı gösterimine (reverse domain notation) dayalı, Android uygulamaları için benzersiz bir tanımlayıcıdır. Sistem tarafından kullanıcının cihazındaki uygulamaları ayırt etmek, Google Play tarafından ürünü tanımlamak ve Firebase hizmetleri tarafından tüm proje yapılandırmalarını bağlamak için kullanılır. Android Geliştirici Belgeleri'ne göre, Package Name yayınlandıktan sonra uygulama yaşam döngüsü boyunca değişmeden kalır.
Önemli Noktalar
Package Name, Android'in bir uygulamayı işletim sistemi düzeyinde tanımlamak için kullandığı benzersiz bir dizedir. AndroidManifest.xml dosyasındaki package alanına ve uygulama modülünün build.gradle dosyasındaki applicationId alanına karşılık gelir. Benzersiz bir Package Name olmadan, kullanıcının cihazına bir uygulama yüklemek imkansızdır.
Cihazda, Package Name uygulama yönetimi için bir anahtar görevi görür: sistem, her uygulamanın verilerini, ayarlarını ve önbelleğini /data/data/[packageName] dizininde saklar. Aynı tanımlayıcıya sahip iki uygulama bir arada bulunamaz — bir kopya yüklenmeye çalışıldığında, sistem mevcut olanı kaldırmayı ister.
Android Gradle Plugin sürüm 0.11+'da, Package Name (manifest dosyasında) ve Application ID (build.gradle içinde) arasında bir ayrım getirilmiştir. Application ID, sistem ve Google Play için gerçek uygulama tanımlayıcısıdır. Manifestteki Package Name, kaynak çözümlemesi ve R sınıfı oluşturma için kullanılır. Basitlik için bunları aynı tutmanız önerilir.
// build.gradle (Module: app)
android {
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 24
targetSdkVersion 34
versionCode 1
versionName "1.0"
}
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
}
applicationIdSuffix alanı, farklı derleme yapılandırmaları için Application ID'ye bir sonek eklemeye izin verir. Bir hata ayıklama sürümü, com.example.app.debug tanımlayıcısına sahip olabilir ve bu sayede paralel test için üretim sürümünün yanına kurulabilir.
Google Play, yayınlama sırasında uyulması gereken Package Name için katı kurallar belirler. Tanımlayıcı, tüm mağazada benzersiz olmalı, sözdizimi gereksinimlerini karşılamalı ve ticari marka politikalarını ihlal etmemelidir.
Package Name yalnızca Latin harfleri (A-Z, a-z), rakamlar (0-9), nokta (.) ve alt çizgi (_) içerebilir. Maksimum uzunluk 150 karakterdir. Noktalar arasındaki her bölüm bir harfle başlamalıdır. Kısa çizgiler, boşluklar ve özel karakterler Google Play kuralları tarafından yasaklanmıştır.
| Gereksinim | Değer | Örnek |
|---|---|---|
| İzin Verilen Karakterler | Latin harfleri, rakamlar, nokta, alt çizgi | com.example.my_app |
| Maksimum Uzunluk | 150 karakter | com.example.verylongappname |
| Bölüm Başlangıcı | Sadece harf | com — 3com değil |
| Yasak | Kısa çizgiler, boşluklar, Kiril | com.example-app — hata |
| Benzersizlik | Google Play'de küresel | Oluşturulurken kontrol edilir |
Package Name'in benzersizliği, Google Play Store'un mutlak bir gereksinimidir. Başka bir uygulama seçilen tanımlayıcıyı zaten kullanıyorsa, yayınlama reddedilecektir. Google, silinen uygulamaların tanımlayıcılarını serbest bırakmaz, bu nedenle ilk Package Name'i seçmek her geliştirici için kritik bir karardır.
Ters alan adı gösterimi, şirket alan adının ters sırada yazıldığı bir adlandırma standardıdır: example.com yerine com.example. Bu sistem, her alan adının doğası gereği benzersiz olması nedeniyle tanımlayıcıların küresel benzersizliğini garanti eder.
Geliştiriciler genellikle alan adlarının TLD'sine karşılık gelen bir önek kullanır: com ticari kuruluşlar için, org kar amacı gütmeyen kuruluşlar için, io teknoloji projeleri için, net ağ hizmetleri ve çözümleri için. Kişisel projeler için, com.github.username veya com.email kabul edilebilir.
iOS ve Android'de yayınlanan uygulamalar için, her iki platformda da aynı tanımlayıcıyı kullanmanız önerilir. Bu, proje tanımlayıcısına bağlanan Firebase, AppsFlyer, Adjust ve diğer analiz sistemleriyle entegrasyonu basitleştirir. Örneğin, com.mycompany.myapp iOS'ta Bundle ID ve Android'de Package Name olacaktır.
Bir Android projesinde Package Name yapılandırması, build.gradle içindeki applicationId'nin ve ilgili Java/Kotlin kaynak kodu dizin yapısının değiştirilmesini içerir. Android Studio, Package Name yeniden düzenleme araçları sağlar, ancak karmaşık projeler için adım adım geçiş önerilir.
// Dosya yolu Package Name ile eşleşiyor
// 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 ve Java'da, kaynak dosyalardaki Package Name dizin yapısıyla eşleşmelidir. build.gradle içinde Package Name değiştirilirken, dosyaları ilgili dizinlere taşımanız ve tüm package ve import bildirimlerini güncellemeniz gerekir. Android Studio bunu Refactor -> Move aracılığıyla otomatik olarak yapabilir, ancak düzinelerce dosyası olan büyük projeler için, yeniden düzenlemeden sonra sonucu doğrulamanız önerilir.
Proje Data Binding, View Binding veya Hilt kullanıyorsa, Package Name değişikliği oluşturulan sınıfları da etkileyecektir. Bağlama sınıfları, modülün Package Name'ine ve layout dizinine göre oluşturulur. Tanımlayıcıyı değiştirdikten sonra, oluşturulan tüm referansları güncellemek için projeyi yeniden derlemeniz gerekecektir. Önbelleğe alınmış eski referanslardan kaynaklanan hataları önlemek için Package Name değişikliğinden sonra temiz bir derleme yapmanız önerilir.
Gradle 7.0+'da, R sınıfı ve kaynak oluşturma amacıyla AndroidManifest.xml'deki package alanının yerini alan build.gradle içinde namespace desteği getirilmiştir. Bu arada, applicationId sistem ve Google Play için gerçek uygulama tanımlayıcısı olarak kalır. Bu, ad alanının sabit olduğu ve genel tanımlayıcının derleme sırasında değişebildiği kitaplık modülleri için yararlı olan farklı applicationId ve namespace'e sahip olmayı mümkün kılar.
Modüler mimariye sahip projeler için, bir modülün Package Name'ini değiştirmek diğer modüllerdeki import'ları etkileyebilir. data modülü com.example.data paketine sahipse ve domain modülü onun sınıflarını kullanıyorsa, tanımlayıcıyı değiştirdikten sonra tüm bağımlı modüllerdeki import'ları güncelleyin. Android Gradle Plugin sürüm 8.0+, build.gradle'dan otomatik namespace oluşturma ile bu süreci basitleştirir.
Geçerli Application ID'yi almak için BuildConfig sınıfını kullanın: BuildConfig.APPLICATION_ID. Bu, koddaki koşullu mantık, ortam bağlama veya hata ayıklama ekranlarında tanımlayıcıyı gösterme için kullanışlıdır. BuildConfig, build.gradle temel alınarak otomatik olarak oluşturulur.
// Çalışma zamanında Application ID alma
val packageName = BuildConfig.APPLICATION_ID
val packageManager = packageManager
val appInfo = packageManager.getPackageInfo(packageName, 0)
println("App version: ${appInfo.versionName} (${appInfo.versionCode})")
println("Package: $packageName")
Google Play'de bir uygulamayı yayınladıktan sonra Package Name değiştirmek, tamamen yeni bir ürün oluşturmak anlamına gelen bir işlemdir. Sistem, farklı bir Package Name ile mevcut bir uygulamayı güncellemeye izin vermez, bu nedenle tanımlayıcıyı değiştirme kararı, mağazada projeyi yeniden başlatmaya eşdeğerdir.
Package Name değiştirildiğinde kaybedilenler: tüm puanlar ve yorumlar, yükleme istatistikleri, Google Services entegrasyonu (taşınmamışsa), Firebase proje bağlantıları (yeni bir google-services.json oluşturulması gerekir). Kullanıcılar otomatik güncelleme almayacaktır — mağazada yeni uygulamayı göreceklerdir.
Package Name değiştirmek, şirketin yeniden markalaşması, uygulamanın başka bir geliştirici hesabına devredilmesi veya başka bir bölge için ayrı bir sürüm oluşturulması sırasında haklı görülebilir. Her durumda, değişiklikten önce kullanıcıları eski uygulama üzerinden bilgilendirmeniz ve veri aktarımı içeren bir geçiş planı hazırlamanız önerilir. Geçiş planı olmadan, kullanıcılar satın alınan içeriğe, aboneliklere ve kaydedilmiş uygulama verilerine erişimlerini kaybeder. Geçiş, SharedPreferences veya Room aracılığıyla veritabanı ve dosyaların aktarılmasını içerir.
Package Name'i değiştirmeden önce, yeni tanımlayıcının benzersiz olduğundan ve adlandırma kurallarına uyduğundan emin olun. Yeni Package Name ile Google Play'de yeni bir uygulama oluşturun ve bunu ayrı bir ürün olarak yayınlayın. Eski uygulama açıklamasında, yeni uygulamaya bir bağlantı verin. Kullanıcıları yönlendirmek için Google Play Custom Store Listing kullanmayı düşünün.
Sıkça Sorulan Sorular
Package Name'de alt çizgi (_) izin verilir, ancak kısa çizgi (-) izin verilmez. Alt çizgiler nadiren kullanılır ancak kabul edilebilir: com.example.my_app. Kısa çizgiler Google Play kuralları tarafından yasaklanmıştır ve yayınlama sırasında hataya neden olur. Bölüm ayırıcı olarak yalnızca nokta kullanmanız önerilir.
Package Name, kaynak çözümlemesi ve R sınıfı oluşturma için kullanılan AndroidManifest.xml'deki tanımlayıcıdır. Application ID, sistem ve Google Play Store için uygulama tanımlayıcısını belirleyen build.gradle içindeki alandır. Bunları aynı tutmanız önerilir, ancak applicationIdSuffix kullanırken farklılıklara izin verilir.
Şirketinizin veya takma adınızın ters alan adı gösterimini kullanın: com.domain.appname. Tanımlayıcının Google Play'de benzersiz olduğundan emin olun. Yaygın kelimelerden (todo, test, app) kaçının ve Google Play'de arama yaparak tanımlayıcının başka bir geliştirici tarafından alınıp alınmadığını kontrol edin.
Evet, Google Play'de yayınlamadan önce Package Name sonuçsuz değiştirilebilir. Değişiklikten sonra google-services.json'u yeniden oluşturmanız, dizin yapısını güncellemeniz ve tüm import'ları kontrol etmeniz gerekecektir. Android Studio, süreci otomatikleştirmek için Refactor -> Move araçlarını sağlar.
Package Name, imza sertifikasıyla birlikte Google Play'de uygulamayı tanımlayan benzersiz bir bağ oluşturur. İki uygulamanın Package Name'leri farklı olsa bile aynı anahtarla imzalanabilirler. İmza sertifikasını değiştirme, Key Rotation aracılığıyla Play Console'da tanımlayıcıyı kaybetmeden mümkündür.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun