Package Name — bu domen nomining teskari yozuviga (reverse domain notation) asoslangan Android ilovasining noyob identifikatoridir. U tizim tomonidan foydalanuvchi qurilmasida ilovalarni farqlash, Google Play-da mahsulotni identifikatsiya qilish va Firebase xizmatlarida loyihaning barcha konfiguratsiyalarini bog'lash uchun ishlatiladi. Android Developer Documentation-ga ko'ra, Package Name nashr etilgandan so'ng ilonaning butun hayotiy sikli davomida o'zgarishsiz qoladi.
Asosiy ma'lumotlar
Package Name — bu Android operatsion tizim darajasida ilonani identifikatsiya qilish uchun foydalanadigan noyob qatordir. U AndroidManifest.xml faylidagi package maydoniga va ilova modulining build.gradle faylidagi applicationId maydoniga mos keladi. Noyob Package Name bo'lmasa, ilonani foydalanuvchi qurilmasiga o'rnatish mumkin emas.
Qurilmada Package Name ilovalarni boshqarish uchun kalit vazifasini bajaradi: tizim har bir ilonaning ma'lumotlari, sozlamalari va keshini /data/data/[packageName] katalogida saqlaydi. Bir xil identifikatorga ega ikkita ilova birga mavjud bo'lolmaydi — dublikatni o'rnatishga urinishda tizim mavjud ilonani o'chirishni taklif qiladi.
Android Gradle Plugin versiyasi 0.11+ da Package Name (manifestda) va Application ID (build.gradle da) o'rtasida bo'linish paydo bo'ldi. Application ID tizim va Google Play uchun ilonaning haqiqiy identifikatoridir. Manifestdagi Package Name resurslarni hal qilish va R sinfini yaratish uchun ishlatiladi. Oddiylik uchun ularni bir xil saqlash tavsiya etiladi.
// build.gradle (Modul: app)
android {
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 24
targetSdkVersion 34
versionCode 1
versionName "1.0"
}
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
}
applicationIdSuffix maydoni turli xil qurilish konfiguratsiyalari uchun Application ID ga qo'shimcha qo'shish imkonini beradi. Debug versiyasi com.example.app.debug identifikatoriga ega bo'lishi mumkin, bu esa uni parallel sinov uchun ishlab chiqarish versiyasi yoniga o'rnatish imkonini beradi.
Google Play nashr paytida rioya qilinishi kerak bo'lgan Package Name uchun qattiq qoidalarni belgilaydi. Identifikator butun do'kon miqyosida noyob bo'lishi, sintaktik talablarga javob berishi va savdo belgilaridan foydalanish siyosatini buzmasligi kerak.
Package Name faqat lotin harflari (A-Z, a-z), raqamlar (0-9), nuqta (.) va pastki chiziq (_) belgisini o'z ichiga olishi mumkin. Maksimal uzunlik — 150 belgi. Nuqtalar orasidagi har bir segment harf bilan boshlanishi kerak. Defislar, bo'shliqlar va maxsus belgilar Google Play qoidalari bilan taqiqlangan.
| Talab | Qiymat | Misol |
|---|---|---|
| Ruxsat etilgan belgilar | Lotin harflari, raqamlar, nuqta, pastki chiziq | com.example.my_app |
| Maksimal uzunlik | 150 belgi | com.example.verylongappname |
| Segment boshlanishi | Faqat harf | com — 3com emas |
| Taqiqlangan | Defislar, bo'shliqlar, kirill | com.mening-domen — xato |
| Noyoblik | Google Play da global | Yaratishda tekshiriladi |
Noyoblik Package Name — Google Play Store ning mutlaq talabidir. Agar boshqa ilova tanlangan identifikatorni allaqachon ishlatsa, nashr rad etiladi. Google o'chirilgan ilovalarning identifikatorlarini bo'shatmaydi, shuning uchun birinchi Package Name ni tanlash har bir dasturchi loyihasi uchun muhim qarordir.
Teskari domen notatsiyasi — bu kompaniya domen nomi teskari tartibda yoziladigan nomlash standartidir: example.com o'rniga com.example. Bunday tizim identifikatorlarning global noyobligini kafolatlaydi, chunki har bir domen nomi ta'rifiga ko'ra noyobdir.
Dasturchilar odatda o'z domenining TLD siga mos keladigan prefiksni ishlatadilar: tijorat tashkilotlari uchun com, notijorat uchun org, texnologik loyihalar uchun io, tarmoq xizmatlari va yechimlari uchun net. Shaxsiy loyihalar uchun com.github.username yoki com.email ishlatish joizdir.
iOS va Android da chiqariladigan ilovalar uchun ikkala platformada bir xil identifikatordan foydalanish tavsiya etiladi. Bu Firebase, AppsFlyer, Adjust va loyiha identifikatoriga bog'lanadigan boshqa analitik tizimlar bilan integratsiyani soddalashtiradi. Masalan, com.mycompany.myapp iOS da Bundle ID va Android da Package Name bo'ladi.
Package Name sozlash Android loyihasida build.gradle dagi applicationId ni va Java/Kotlin kodining tegishli katalog strukturasini o'zgartirishni o'z ichiga oladi. Android Studio Package Name ni refaktor qilish uchun vositalarni taqdim etadi, ammo murakkab loyihalar uchun bosqichma-bosqich migratsiya tavsiya etiladi.
// Fayl yo'li Package Name ga mos keladi
// 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 va Java da manba fayllaridagi Package Name katalog strukturasiga mos kelishi kerak. build.gradle da Package Name o'zgartirilganda fayllarni tegishli kataloglarga ko'chirish va barcha package va import deklaratsiyalarini yangilash kerak. Android Studio buni Refactor -> Move orqali avtomatik bajarishi mumkin, ammo o'nlab fayllari bo'lgan katta loyihalar uchun refaktordan so'ng natijani tekshirish tavsiya etiladi.
Agar loyiha Data Binding, View Binding yoki Hilt dan foydalansa, Package Name o'zgarishi yaratilgan sinflarga ham ta'sir qiladi. Binding sinflari modulning Package Name i va layout katalogi asosida yaratiladi. Identifikator o'zgartirilgandan so'ng barcha yaratilgan havolalarni yangilash uchun loyihani qayta qurish talab qilinadi. Keshga olingan eski havolalar tufayli xatolarni bartaraf etish uchun Package Name o'zgartirilgandan so'ng clean build qilish tavsiya etiladi.
Gradle 7.0+ da build.gradle da namespace qo'llab-quvvatlanishi paydo bo'ldi, u R sinfi va resurslarni yaratish maqsadlari uchun AndroidManifest.xml dagi package o'rnini egalladi. Shu bilan birga applicationId tizim va Google Play uchun ilonaning haqiqiy identifikatori bo'lib qoladi. Bu turli xil applicationId va namespace ga ega bo'lish imkonini beradi, bu kutubxona modullari uchun foydalidir, bunda namespace qat'iy va ochiq identifikator qurilish paytida o'zgarishi mumkin.
Modulli arxitekturaga ega loyihalar uchun bitta modulning Package Name o'zgarishi boshqa modullardagi importlarga ta'sir qilishi mumkin. Agar data moduli com.example.data paketiga ega bo'lsa va domain moduli uning sinflaridan foydalansa, identifikator o'zgartirilgandan so'ng barcha bog'liq modullardagi importlarni yangilang. Android Gradle plagini versiyasi 8.0+ build.gradle dan namespace ni avtomatik yaratish hisobiga bu jarayonni soddalashtiradi.
Joriy Application ID ni BuildConfig sinfi orqali olish mumkin: BuildConfig.APPLICATION_ID. Bu koddagi shartli mantiq, muhitga bog'lanish yoki debug ekranlarida identifikatorni ko'rsatish uchun qulaydir. BuildConfig build.gradle asosida avtomatik yaratiladi.
// Application ID ni ish vaqtida olish
val packageName = BuildConfig.APPLICATION_ID
val packageManager = packageManager
val appInfo = packageManager.getPackageInfo(packageName, 0)
println("Ilova versiyasi: ${appInfo.versionName} (${appInfo.versionCode})")
println("Paket: $packageName")
Package Name o'zgartirish ilova Google Play da nashr etilgandan so'ng — butunlay yangi mahsulot yaratishni anglatadigan operatsiyadir. Tizim boshqa Package Name bilan mavjud ilonani yangilashga ruxsat bermaydi, shuning uchun identifikatorni o'zgartirish qarori loyihani do'konda qayta ishga tushirishga tengdir.
Package Name o'zgartirilganda yo'qoladi: barcha reytinglar va sharhlar, o'rnatish statistikasi, Google Services integratsiyasi (agar ko'chirilmagan bo'lsa), Firebase loyihasiga havolalar (yangi google-services.json yaratish talab qilinadi). Foydalanuvchilar avtomatik yangilanishni olmaydilar — ular do'konda yangi ilonani ko'radilar.
Package Name o'zgartirish kompaniyaning rebrendingi, ilonani boshqa dasturchi hisobiga ko'chirish yoki boshqa mintaqa uchun alohida versiya yaratishda asosli bo'lishi mumkin. Har qanday holatda, o'zgartirishdan oldin foydalanuvchilarni eski ilova orqali xabardor qilish va ma'lumotlarni ko'chirish bilan migratsiya rejasini tayyorlash tavsiya etiladi. Migratsiya rejasisiz foydalanuvchilar sotib olingan tarkibga, obunalarga va saqlangan ilova ma'lumotlariga kirishni yo'qotadilar. Migratsiya SharedPreferences yoki Room orqali ma'lumotlar bazasi va fayllarni ko'chirishni o'z ichiga oladi.
Package Name o'zgartirishdan oldin yangi identifikatorning noyobligiga va nomlash qoidalariga mos kelishiga ishonch hosil qiling. Google Play da yangi Package Name bilan yangi ilova yarating va uni alohida mahsulot sifatida nashr eting. Eski ilova tavsifida yangisiga havola qo'shing. Foydalanuvchilarni yo'naltirish uchun Google Play Custom Store Listing dan foydalanishni o'ylab ko'ring.
Tez-tez beriladigan savollar
Package Name da pastki chiziq (_) belgisiga ruxsat beriladi, ammo defis (-) ga ruxsat berilmaydi. Pastki chiziq kamdan-kam ishlatiladi, ammo joiz: com.example.my_app. Defis Google Play qoidalari bilan taqiqlangan va nashr paytida xatoga olib keladi. Segmentlar ajratuvchisi sifatida faqat nuqtadan foydalanish tavsiya etiladi.
Package Name — bu AndroidManifest.xml dagi identifikator bo'lib, resurslarni hal qilish va R sinfini yaratish uchun ishlatiladi. Application ID — build.gradle dagi maydon bo'lib, tizim va Google Play Store uchun ilonaning identifikatorini belgilaydi. Ularni bir xil saqlash tavsiya etiladi, ammo applicationIdSuffix ishlatganda farq joizdir.
Kompaniyangiz yoki taxallusingizning teskari domen notatsiyasidan foydalaning: com.domen.ilova_nomi. Identifikatorning Google Play da noyobligiga ishonch hosil qiling. Umumiy so'zlardan (todo, test, app) qoching va identifikator boshqa dasturchi tomonidan band emasligini Google Play da qidirish orqali tekshiring.
Ha, Google Play da nashr etishdan oldin Package Name oqibatlarsiz o'zgartirilishi mumkin. O'zgartirishdan so'ng google-services.json qayta yaratilishi, katalog strukturasi yangilanishi va barcha importlar tekshirilishi kerak. Android Studio jarayonni avtomatlashtirish uchun Refactor -> Move vositalarini taqdim etadi.
Package Name imzo sertifikati bilan birgalikda ilonani Google Play da identifikatsiya qiluvchi noyob bog'lanishni hosil qiladi. Hatto ikkala ilova turli xil Package Name ga ega bo'lsa ham, ular bir kalit bilan imzolanishi mumkin. Imzo sertifikatini o'zgartirish identifikatorni yo'qotmasdan Play Console da Key Rotation orqali mumkin.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.