Package Name — bu, tərs domen yazılışına (reverse domain notation) əsaslanan Android tətbiqinin unikal identifikatorudur. Sistem tərəfindən istifadəçi cihazında tətbiqləri fərqləndirmək, Google Play-də məhsulu identifikasiya etmək və Firebase xidmətlərində layihənin bütün konfiqurasiyalarını bağlamaq üçün istifadə olunur. Android Developer Documentation-a görə, Package Name dərc edildikdən sonra tətbiqin bütün həyat dövrü ərzində dəyişməz qalır.
Əsas məqamlar
Package Name — bu, Android-in tətbiqi əməliyyat sistemi səviyyəsində identifikasiya etmək üçün istifadə etdiyi unikal sətirdir. O, AndroidManifest.xml faylındakı package sahəsinə və tətbiq modulunun build.gradle faylındakı applicationId sahəsinə uyğun gəlir. Unikal Package Name olmadan tətbiqin istifadəçi cihazına quraşdırılması mümkün deyil.
Cihazda Package Name tətbiqlərin idarə edilməsi üçün açar rolunu oynayır: sistem hər bir tətbiqin məlumatlarını, parametrlərini və keşini /data/data/[packageName] kataloqunda saxlayır. Eyni identifikatora malik iki tətbiq bir yerdə mövcud ola bilməz — dublikat quraşdırmağa cəhd edildikdə sistem mövcud olanı silməyi təklif edir.
Android Gradle Plugin versiyası 0.11+-də Package Name (manifestdə) və Application ID (build.gradle-də) arasında bölgü yarandı. Application ID sistem və Google Play üçün tətbiqin faktiki identifikatorudur. Manifestdəki Package Name resursların həlli və R sinfinin yaradılması üçün istifadə olunur. Sadəlik üçün onların eyni saxlanılması tövsiyə olunur.
// build.gradle (Modul: app)
android {
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 24
targetSdkVersion 34
versionCode 1
versionName "1.0"
}
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
}
applicationIdSuffix sahəsi müxtəlif kompilyasiya konfiqurasiyaları üçün Application ID-ə suffiks əlavə etməyə imkan verir. Debug versiyası com.example.app.debug identifikatoruna malik ola bilər ki, bu da onu paralel sınaq üçün istehsal versiyası ilə yanaşı quraşdırmağa imkan verir.
Google Play Package Name üçün dərc zamanı riayət edilməli olan ciddi qaydalar müəyyən edir. Identifikator bütün mağaza miqyasında unikal olmalı, sintaktik tələblərə cavab verməli və ticarət nişanlarından istifadə siyasətini pozmamalıdır.
Package Name yalnız latın hərfləri (A-Z, a-z), rəqəmlər (0-9), nöqtə (.) və alt xətt (_) simvolunu ehtiva edə bilər. Maksimum uzunluq — 150 simvol. Nöqtələr arasındakı hər bir seqment hərflə başlamalıdır. Defislər, boşluqlar və xüsusi simvollar Google Play qaydaları ilə qadağandır.
| Tələb | Dəyər | Nümunə |
|---|---|---|
| İcazə verilən simvollar | Latın hərfləri, rəqəmlər, nöqtə, alt xətt | com.example.my_app |
| Maksimum uzunluq | 150 simvol | com.example.verylongappname |
| Seqmentin başlanğıcı | Yalnız hərf | com — 3com yox |
| Qadağandır | Defislər, boşluqlar, kiril | com.mənim-domen — səhv |
| Unikallıq | Google Play-də qlobal | Yaratma zamanı yoxlanılır |
Unikallıq Package Name — Google Play Store-un mütləq tələbidir. Əgər başqa tətbiq seçilmiş identifikatoru artıq istifadə edirsə, dərc rədd ediləcək. Google silinmiş tətbiqlərin identifikatorlarını azad etmir, buna görə də ilk Package Name seçimi hər bir tərtibatçı layihəsi üçün kritik qərardır.
Tərs domen notasiyası — bu, şirkətin domen adının tərs qaydada yazıldığı adlandırma standartıdır: example.com əvəzinə com.example. Belə sistem identifikatorların qlobal unikallığını təmin edir, çünki hər bir domen adı tərifinə görə unikaldır.
Tərtibatçılar adətən domenlərinin TLD-sinə uyğun prefiks istifadə edirlər: kommersiya təşkilatları üçün com, qeyri-kommersiya üçün org, texnoloji layihələr üçün io, şəbəkə xidmətləri və həllər üçün net. Şəxsi layihələr üçün com.github.username və ya com.email istifadə etmək məqbuldur.
iOS və Android-də buraxılan tətbiqlər üçün hər iki platformada eyni identifikatordan istifadə etmək tövsiyə olunur. Bu, Firebase, AppsFlyer, Adjust və layihə identifikatoruna bağlanan digər analitik sistemlərlə inteqrasiyanı asanlaşdırır. Məsələn, com.mycompany.myapp iOS-da Bundle ID, Android-də isə Package Name olacaq.
Package Name konfiqurasiyası Android layihəsində build.gradle-də applicationId dəyişdirilməsini və Java/Kotlin kodunun müvafiq kataloq strukturunun yenilənməsini əhatə edir. Android Studio Package Name-in refaktorinqi üçün alətlər təqdim edir, lakin mürəkkəb layihələr üçün addım-addım miqrasiya tövsiyə olunur.
// Fayl yolu Package Name-ə uyğun gəlir
// 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 və Java-da mənbə fayllarında Package Name kataloq strukturuna uyğun olmalıdır. build.gradle-də Package Name dəyişdirilərkən faylları müvafiq kataloqlara köçürmək və bütün package və import bəyannamələrini yeniləmək lazımdır. Android Studio bunu Refactor -> Move vasitəsilə avtomatik edə bilər, lakin onlarla faylı olan böyük layihələr üçün refaktorinqdən sonra nəticəni yoxlamaq tövsiyə olunur.
Layihə Data Binding, View Binding və ya Hilt istifadə edərsə, Package Name dəyişdirilməsi yaradılan siniflərə də təsir edəcək. Binding sinifləri modulun Package Name-i və layout kataloqu əsasında yaradılır. Identifikator dəyişdirildikdən sonra bütün yaradılan istinadları yeniləmək üçün layihəni yenidən qurmaq tələb olunacaq. Keşlənmiş köhnə istinadlar səbəbindən səhvləri aradan qaldırmaq üçün Package Name dəyişdirildikdən sonra clean build etmək tövsiyə olunur.
Gradle 7.0+-da build.gradle-də namespace dəstəyi meydana çıxdı, o, R sinfi və resursların yaradılması məqsədləri üçün AndroidManifest.xml-də package-i əvəz etdi. Bununla yanaşı applicationId sistem və Google Play üçün tətbiqin faktiki identifikatoru olaraq qalır. Bu, müxtəlif applicationId və namespace-ə sahib olmağa imkan verir ki, bu da kitabxana modulları üçün faydalıdır, burada namespace sabitdir və açıq identifikator kompilyasiya zamanı dəyişə bilər.
Modul arxitekturası olan layihələr üçün bir modulun Package Name dəyişdirilməsi digər modullardakı importlara təsir edə bilər. data modulu com.example.data paketinə malikdirsə və domain modulu onun siniflərindən istifadə edirsə, identifikator dəyişdirildikdən sonra bütün asılı modullardakı importları yeniləyin. Android-in Gradle plugin versiyası 8.0+ build.gradle-dən namespace-in avtomatik yaradılması hesabına bu prosesi asanlaşdırır.
Cari Application ID-ni BuildConfig sinfi vasitəsilə əldə etmək olar: BuildConfig.APPLICATION_ID. Bu, koddakı şərti məntiq, mühitə bağlanma və ya debug ekranlarında identifikatoru göstərmək üçün rahatdır. BuildConfig build.gradle əsasında avtomatik yaradılır.
// Application ID-nin icra zamanı əldə olunması
val packageName = BuildConfig.APPLICATION_ID
val packageManager = packageManager
val appInfo = packageManager.getPackageInfo(packageName, 0)
println("Tətbiq versiyası: ${appInfo.versionName} (${appInfo.versionCode})")
println("Paket: $packageName")
Package Name dəyişdirilməsi tətbiq Google Play-də dərc edildikdən sonra — tamamilə yeni məhsul yaratmaq mənasına gələn əməliyyatdır. Sistem fərqli Package Name ilə mövcud tətbiqi yeniləməyə icazə vermir, buna görə də identifikatorun dəyişdirilməsi qərarı layihənin mağazada yenidən başladılmasına bərabərdir.
Package Name dəyişdirilərkən itirilir: bütün reytinqlər və rəylər, quraşdırma statistikası, Google Services inteqrasiyası (köçürülməyibsə), Firebase layihəsinə istinadlar (yeni google-services.json yaradılması tələb olunur). İstifadəçilər avtomatik yeniləmə almayacaqlar — mağazada yeni tətbiq görəcəklər.
Package Name dəyişdirilməsi şirkətin rebrendinqi, tətbiqin başqa tərtibatçı hesabına köçürülməsi və ya başqa region üçün ayrıca versiya yaradılması zamanı əsaslandırıla bilər. İstənilən halda, dəyişiklikdən əvvəl istifadəçilərə köhnə tətbiq vasitəsilə məlumat vermək və məlumatların köçürülməsi ilə miqrasiya planı hazırlamaq tövsiyə olunur. Miqrasiya planı olmadan istifadəçilər satın alınmış məzmuna, abunəliklərə və saxlanılmış tətbiq məlumatlarına girişi itirəcəklər. Miqrasiya SharedPreferences və ya Room vasitəsilə verilənlər bazasının və faylların köçürülməsini əhatə edir.
Package Name dəyişdirməzdən əvvəl yeni identifikatorun unikal olduğuna və adlandırma qaydalarına uyğun olduğuna əmin olun. Google Play-də yeni Package Name ilə yeni tətbiq yaradın və onu ayrıca məhsul kimi dərc edin. Köhnə tətbiqin təsvirində yenisinə keçid əlavə edin. İstifadəçiləri yönləndirmək üçün Google Play Custom Store Listing istifadə etməyi düşünün.
Tez-tez verilən suallar
Package Name-də alt xətt (_) simvoluna icazə verilir, lakin defis (-) yox. Alt xətt nadir hallarda istifadə olunur, lakin məqbuldur: com.example.my_app. Defis Google Play qaydaları ilə qadağandır və dərc zamanı xətaya səbəb olacaq. Seqmentlər üçün ayırıcı olaraq yalnız nöqtədən istifadə etmək tövsiyə olunur.
Package Name — AndroidManifest.xml-də resursların həlli və R sinfinin yaradılması üçün istifadə olunan identifikatordur. Application ID — build.gradle-də sistem və Google Play Store üçün tətbiqin identifikatorunu təyin edən sahədir. Onların eyni saxlanılması tövsiyə olunur, lakin applicationIdSuffix istifadə edərkən fərq məqbuldur.
Şirkətinizin və ya ləqəbinizin tərs domen notasiyasından istifadə edin: com.domen.tətbiqadi. Identifikatorun Google Play-də unikal olduğuna əmin olun. Ümumi sözlərdən (todo, test, app) qaçın və identifikatorun başqa tərtibatçı tərəfindən zəbt edilmədiyini Google Play-də axtarış vasitəsilə yoxlayın.
Bəli, Google Play-də dərc etməzdən əvvəl Package Name nəticəsiz dəyişdirilə bilər. Dəyişiklikdən sonra google-services.json yenidən yaradılmalı, kataloq strukturu yenilənməli və bütün importlar yoxlanılmalıdır. Android Studio prosesin avtomatlaşdırılması üçün Refactor -> Move alətlərini təqdim edir.
Package Name imza sertifikatı ilə birlikdə tətbiqi Google Play-də identifikasiya edən unikal əlaqə yaradır. Hətta iki tətbiqin fərqli Package Name-i olsa belə, eyni açar ilə imzalana bilər. İmza sertifikatının dəyişdirilməsi identifikatoru itirmədən Play Console-da Key Rotation vasitəsilə mümkündür.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun