Package Name — είναι ένα μοναδικό αναγνωριστικό της εφαρμογής Android, που βασίζεται στην αντίστροφη γραφή του ονόματος τομέα (reverse domain notation). Χρησιμοποιείται από το σύστημα για τη διάκριση εφαρμογών στη συσκευή του χρήστη, στο Google Play για την ταυτοποίηση του προϊόντος και στις υπηρεσίες Firebase για τη σύνδεση όλων των παραμέτρων του έργου. Σύμφωνα με το Android Developer Documentation, το Package Name παραμένει αμετάβλητο σε όλο τον κύκλο ζωής της εφαρμογής μετά τη δημοσίευση.
Κύρια Σημεία
Package Name — είναι μια μοναδική συμβολοσειρά που χρησιμοποιεί το Android για την αναγνώριση της εφαρμογής σε επίπεδο λειτουργικού συστήματος. Αντιστοιχεί στο πεδίο package στο αρχείο AndroidManifest.xml και στο πεδίο applicationId στο αρχείο build.gradle της μονάδας εφαρμογής. Χωρίς μοναδικό Package Name, η εγκατάσταση της εφαρμογής στη συσκευή του χρήστη είναι αδύνατη.
Στη συσκευή, το Package Name λειτουργεί ως κλειδί για τη διαχείριση εφαρμογών: το σύστημα αποθηκεύει δεδομένα, ρυθμίσεις και προσωρινή μνήμη κάθε εφαρμογής στον κατάλογο /data/data/[packageName]. Δύο εφαρμογές με το ίδιο αναγνωριστικό δεν μπορούν να συνυπάρχουν — κατά την προσπάθεια εγκατάστασης αντιγράφου, το σύστημα προτείνει την αφαίρεση της υπάρχουσας.
Στο Android Gradle Plugin έκδοση 0.11+ εμφανίστηκε ο διαχωρισμός μεταξύ Package Name (στο manifest) και Application ID (στο build.gradle). Το Application ID είναι το πραγματικό αναγνωριστικό της εφαρμογής για το σύστημα και το Google Play. Το Package Name στο manifest χρησιμοποιείται για την επίλυση πόρων και τη δημιουργία της κλάσης R. Συνιστάται να διατηρούνται ίδια για απλότητα.
// build.gradle (Μονάδα: app)
android {
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 24
targetSdkVersion 34
versionCode 1
versionName "1.0"
}
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
}
Το πεδίο applicationIdSuffix επιτρέπει την προσθήκη επιθήματος στο Application ID για διαφορετικές παραμέτρους μεταγλώττισης. Η έκδοση debug μπορεί να έχει αναγνωριστικό com.example.app.debug, επιτρέποντας την εγκατάστασή της δίπλα στην έκδοση παραγωγής για παράλληλη δοκιμή.
Google Play θέτει αυστηρούς κανόνες για το Package Name που πρέπει να τηρούνται κατά τη δημοσίευση. Το αναγνωριστικό πρέπει να είναι μοναδικό σε κλίμακα ολόκληρου του καταστήματος, να πληροί συντακτικές απαιτήσεις και να μην παραβιάζει την πολιτική χρήσης εμπορικών σημάτων.
Package Name μπορεί να περιέχει μόνο λατινικά γράμματα (A-Z, a-z), αριθμούς (0-9), τελεία (.) και κάτω παύλα (_). Μέγιστο μήκος — 150 χαρακτήρες. Κάθε τμήμα μεταξύ τελειών πρέπει να ξεκινά με γράμμα. Παύλες, κενά και ειδικοί χαρακτήρες απαγορεύονται από τους κανόνες του Google Play.
| Απαίτηση | Τιμή | Παράδειγμα |
|---|---|---|
| Επιτρεπόμενοι χαρακτήρες | Λατινικά γράμματα, αριθμοί, τελεία, κάτω παύλα | com.example.my_app |
| Μέγιστο μήκος | 150 χαρακτήρες | com.example.verylongappname |
| Αρχή τμήματος | Μόνο γράμμα | com — όχι 3com |
| Απαγορεύεται | Παύλες, κενά, κυριλλικά | com.τομέας-μου — σφάλμα |
| Μοναδικότητα | Παγκόσμια στο Google Play | Έλεγχος κατά τη δημιουργία |
Μοναδικότητα του Package Name — είναι απόλυτη απαίτηση του Google Play Store. Εάν μια άλλη εφαρμογή χρησιμοποιεί ήδη το επιλεγμένο αναγνωριστικό, η δημοσίευση θα απορριφθεί. Η Google δεν απελευθερώνει τα αναγνωριστικά διαγραμμένων εφαρμογών, επομένως η επιλογή του πρώτου Package Name είναι κρίσιμη απόφαση για κάθε έργο προγραμματιστή.
Αντίστροφη σημειογραφία τομέα — είναι ένα πρότυπο ονομασίας στο οποίο το όνομα τομέα της εταιρείας γράφεται με αντίστροφη σειρά: com.example αντί για example.com. Ένα τέτοιο σύστημα εγγυάται την παγκόσμια μοναδικότητα των αναγνωριστικών, καθώς κάθε όνομα τομέα είναι εξ ορισμού μοναδικό.
Οι προγραμματιστές συνήθως χρησιμοποιούν πρόθεμα που αντιστοιχεί στο TLD του τομέα τους: com για εμπορικούς οργανισμούς, org για μη κερδοσκοπικούς, io για τεχνολογικά έργα, net για υπηρεσίες δικτύου και λύσεις. Για προσωπικά έργα επιτρέπεται η χρήση com.github.username ή com.email.
Για εφαρμογές που κυκλοφορούν σε iOS και Android, συνιστάται η χρήση του ίδιου αναγνωριστικού και στις δύο πλατφόρμες. Αυτό απλοποιεί την ενοποίηση με Firebase, AppsFlyer, Adjust και άλλα συστήματα ανάλυσης που συνδέονται με το αναγνωριστικό του έργου. Για παράδειγμα, το com.mycompany.myapp θα είναι Bundle ID στο iOS και Package Name στο Android.
Διαμόρφωση Package Name σε ένα έργο Android περιλαμβάνει την αλλαγή του applicationId στο build.gradle και της αντίστοιχης δομής καταλόγων του κώδικα Java/Kotlin. Το Android Studio παρέχει εργαλεία για αναδιάρθρωση του Package Name, αλλά για σύνθετα έργα συνιστάται σταδιακή μετεγκατάσταση.
// Η διαδρομή αρχείου αντιστοιχεί στο 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)
}
}
Σε Kotlin και Java, το Package Name στα αρχεία προέλευσης πρέπει να αντιστοιχεί στη δομή καταλόγων. Κατά την αλλαγή του Package Name στο build.gradle, τα αρχεία πρέπει να μετακινηθούν στους αντίστοιχους καταλόγους και να ενημερωθούν όλες οι δηλώσεις package και import. Το Android Studio μπορεί να το κάνει αυτόματα μέσω Refactor -> Move, αλλά για μεγάλα έργα με δεκάδες αρχεία, συνιστάται ο έλεγχος του αποτελέσματος μετά την αναδιάρθρωση.
Εάν το έργο χρησιμοποιεί Data Binding, View Binding ή Hilt, η αλλαγή του Package Name θα επηρεάσει επίσης τις παραγόμενες κλάσεις. Οι κλάσεις Binding δημιουργούνται βάσει του Package Name της μονάδας και του καταλόγου layout. Μετά την αλλαγή του αναγνωριστικού, θα απαιτηθεί εκ νέου δημιουργία του έργου για την ενημέρωση όλων των παραγόμενων αναφορών. Συνιστάται η εκτέλεση clean build μετά την αλλαγή του Package Name για την εξάλειψη σφαλμάτων λόγω αποθηκευμένων παλαιών αναφορών.
Στο Gradle 7.0+ εμφανίστηκε υποστήριξη για namespace στο build.gradle, το οποίο αντικατέστησε το package στο AndroidManifest.xml για σκοπούς δημιουργίας της κλάσης R και πόρων. Ωστόσο, το applicationId παραμένει το πραγματικό αναγνωριστικό της εφαρμογής για το σύστημα και το Google Play. Αυτό επιτρέπει την ύπαρξη διαφορετικών applicationId και namespace, το οποίο είναι χρήσιμο για λειτουργικές μονάδες βιβλιοθήκης, όπου το namespace είναι σταθερό και το δημόσιο αναγνωριστικό μπορεί να αλλάζει κατά τη μεταγλώττιση.
Για έργα με αρθρωτή αρχιτεκτονική, η αλλαγή του Package Name μιας μονάδας μπορεί να επηρεάσει τα imports σε άλλες μονάδες. Εάν η μονάδα data έχει πακέτο com.example.data και η μονάδα domain χρησιμοποιεί τις κλάσεις της, μετά την αλλαγή του αναγνωριστικού ενημερώστε τα imports σε όλες τις εξαρτώμενες μονάδες. Το πρόσθετο Gradle για Android έκδοση 8.0+ απλοποιεί αυτή τη διαδικασία με αυτόματη δημιουργία namespace από το build.gradle.
Το τρέχον Application ID μπορεί να ληφθεί μέσω της κλάσης BuildConfig: BuildConfig.APPLICATION_ID. Αυτό είναι βολικό για υπό συνθήκη λογική στον κώδικα, σύνδεση με το περιβάλλον ή εμφάνιση του αναγνωριστικού σε οθόνες εντοπισμού σφαλμάτων. Το BuildConfig δημιουργείται αυτόματα βάσει του build.gradle.
// Λήψη Application ID κατά την εκτέλεση
val packageName = BuildConfig.APPLICATION_ID
val packageManager = packageManager
val appInfo = packageManager.getPackageInfo(packageName, 0)
println("Έκδοση εφαρμογής: ${appInfo.versionName} (${appInfo.versionCode})")
println("Πακέτο: $packageName")
Αλλαγή Package Name μετά τη δημοσίευση της εφαρμογής στο Google Play — είναι μια ενέργεια που σημαίνει τη δημιουργία ενός εντελώς νέου προϊόντος. Το σύστημα δεν επιτρέπει την ενημέρωση της υπάρχουσας εφαρμογής με διαφορετικό Package Name, επομένως η απόφαση αλλαγής του αναγνωριστικού ισοδυναμεί με επανεκκίνηση του έργου στο κατάστημα.
Κατά την αλλαγή του Package Name χάνονται: όλες οι βαθμολογίες και κριτικές, στατιστικά εγκατάστασης, ενοποίηση με το Google Services (εάν δεν έχει μεταφερθεί), αναφορές στο έργο Firebase (απαιτεί δημιουργία νέου google-services.json). Οι χρήστες δεν θα λάβουν αυτόματη ενημέρωση — θα δουν μια νέα εφαρμογή στο κατάστημα.
Αλλαγή Package Name μπορεί να δικαιολογηθεί κατά το rebranding της εταιρείας, τη μεταφορά της εφαρμογής σε άλλο λογαριασμό προγραμματιστή ή τη δημιουργία ξεχωριστής έκδοσης για άλλη περιοχή. Σε κάθε περίπτωση, πριν από την αλλαγή συνιστάται η ειδοποίηση των χρηστών μέσω της παλιάς εφαρμογής και η προετοιμασία σχεδίου μετεγκατάστασης με μεταφορά δεδομένων. Χωρίς σχέδιο μετεγκατάστασης, οι χρήστες θα χάσουν την πρόσβαση σε αγορασμένο περιεχόμενο, συνδρομές και αποθηκευμένα δεδομένα εφαρμογής. Η μετεγκατάσταση περιλαμβάνει μεταφορά βάσης δεδομένων και αρχείων μέσω SharedPreferences ή Room.
Πριν από την αλλαγή Package Name, βεβαιωθείτε ότι το νέο αναγνωριστικό είναι μοναδικό και συμμορφώνεται με τους κανόνες ονομασίας. Δημιουργήστε μια νέα εφαρμογή στο Google Play με το νέο Package Name και δημοσιεύστε την ως ξεχωριστό προϊόν. Στην περιγραφή της παλιάς εφαρμογής, προσθέστε σύνδεσμο προς τη νέα. Εξετάστε τη χρήση του Google Play Custom Store Listing για την ανακατεύθυνση χρηστών.
Συχνές Ερωτήσεις
Στο Package Name επιτρέπεται ο χαρακτήρας κάτω παύλας (_), αλλά όχι η παύλα (-). Η κάτω παύλα χρησιμοποιείται σπάνια, αλλά είναι αποδεκτή: com.example.my_app. Η παύλα απαγορεύεται από τους κανόνες του Google Play και θα προκαλέσει σφάλμα κατά τη δημοσίευση. Συνιστάται η χρήση μόνο τελείας ως διαχωριστικού τμημάτων.
Package Name — είναι το αναγνωριστικό στο AndroidManifest.xml, που χρησιμοποιείται για την επίλυση πόρων και τη δημιουργία της κλάσης R. Application ID — το πεδίο στο build.gradle που καθορίζει το αναγνωριστικό της εφαρμογής για το σύστημα και το Google Play Store. Συνιστάται να διατηρούνται ίδια, αλλά η διαφορά είναι αποδεκτή κατά τη χρήση του applicationIdSuffix.
Χρησιμοποιήστε την αντίστροφη σημειογραφία τομέα της εταιρείας ή του ψευδωνύμου σας: com.domain.onomaapp. Βεβαιωθείτε ότι το αναγνωριστικό είναι μοναδικό στο Google Play. Αποφύγετε γενικές λέξεις (todo, test, app) και ελέγξτε εάν το αναγνωριστικό δεν είναι κατειλημμένο από άλλο προγραμματιστή μέσω αναζήτησης στο Google Play.
Ναι, πριν από τη δημοσίευση στο Google Play, το Package Name μπορεί να αλλάξει χωρίς συνέπειες. Μετά την αλλαγή, θα απαιτηθεί εκ νέου δημιουργία του google-services.json, ενημέρωση της δομής καταλόγων και έλεγχος όλων των imports. Το Android Studio παρέχει εργαλεία Refactor -> Move για την αυτοματοποίηση της διαδικασίας.
Το Package Name μαζί με το πιστοποιητικό υπογραφής σχηματίζει μια μοναδική σύνδεση που αναγνωρίζει την εφαρμογή στο Google Play. Ακόμα κι αν δύο εφαρμογές έχουν διαφορετικό Package Name, μπορούν να υπογραφούν με το ίδιο κλειδί. Η αλλαγή του πιστοποιητικού υπογραφής είναι δυνατή μέσω Key Rotation στην Play Console χωρίς απώλεια του αναγνωριστικού.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης