Package Name रिवर्स डोमेन नोटेशन (reverse domain notation) पर आधारित Android एप्लिकेशनों के लिए एक अनूठा पहचानकर्ता है। इसका उपयोग सिस्टम द्वारा उपयोगकर्ता के डिवाइस पर एप्लिकेशनों को अलग करने, Google Play द्वारा उत्पाद की पहचान करने और Firebase सेवाओं द्वारा सभी परियोजना कॉन्फ़िगरेशन्स को लिंक करने के लिए किया जाता है। Android Developer Documentation के अनुसार, प्रकाशन के बाद Package Name एप्लिकेशन जीवनचक्र में अपरिवर्तित रहता है।
मुख्य बातें
Package Name एक अनूठा स्ट्रिंग है जिसे Android ऑपरेटिंग सिस्टम स्तर पर एप्लिकेशन की पहचान करने के लिए उपयोग करता है। यह AndroidManifest.xml फ़ाइल में package फ़ील्ड और एप्लिकेशन मॉड्यूल की build.gradle फ़ाइल में applicationId फ़ील्ड से मेल खाता है। अनूठे Package Name के बिना, उपयोगकर्ता के डिवाइस पर एप्लिकेशन स्थापित करना असंभव है।
डिवाइस पर, Package Name एप्लिकेशन प्रबंधन की कुंजी के रूप में कार्य करता है: सिस्टम /data/data/[packageName] निर्देशिका में प्रत्येक एप्लिकेशन का डेटा, सेटिंग्स और कैश संग्रहीत करता है। समान पहचानकर्ता वाले दो एप्लिकेशन सह-अस्तित्व नहीं रख सकते — डप्लिकेट स्थापित करने का प्रयास करने पर, सिस्टम मौजूदा एप्लिकेशन को हटाने का संकेत देता है।
Android Gradle Plugin संस्करण 0.11+ में Package Name (मैनिफेस्ट में) और Application ID (build.gradle में) के बीच पृथक्करण पेश किया गया। Application ID सिस्टम और Google Play के लिए वास्तविक एप्लिकेशन पहचानकर्ता है। मैनिफेस्ट में Package Name का उपयोग संसाधन समाधान और R-क्लास जनरेशन के लिए होता है। सरलता के लिए उन्हें समान रखने की अनुशंसा है।
// build.gradle (Module: app)
android {
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 24
targetSdkVersion 34
versionCode 1
versionName "1.0"
}
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
}
applicationIdSuffix फ़ील्ड विभिन्न बिल्ड कॉन्फ़िगरेशन्स के लिए Application ID में प्रत्यय जोड़ने की अनुमति देता है। डीबग संस्करण में पहचानकर्ता 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.example-app — त्रुटि |
| विशिष्टता | Google Play में वैश्विक | निर्माण पर जाँच की जाती है |
Package Name की विशिष्टता Google Play Store की एक पूर्ण आवश्यकता है। यदि कोई अन्य एप्लिकेशन पहले से चुने गए पहचानकर्ता का उपयोग कर रहा है, तो प्रकाशन अस्वीकार कर दिया जाएगा। Google हटाए गए एप्लिकेशनों के पहचानकर्ता जारी नहीं करता, इसलिए प्रत्येक डेवलपर के लिए पहला Package Name चुनना एक महत्वपूर्ण निर्णय है।
रिवर्स डोमेन नोटेशन एक नामकरण मानक है जिसमें कंपनी डोमेन नाम उलटे क्रम में लिखा जाता है: example.com के बजाय com.example। यह प्रणाली पहचानकर्ताओं की वैश्विक विशिष्टता सुनिश्चित करती है क्योंकि प्रत्येक डोमेन नाम मूलतः अनूठा होता है।
डेवलपर आमतौर पर अपने डोमेन के TLD के अनुरूप उपसर्ग का उपयोग करते हैं: com वाणिज्यिक संगठनों के लिए, org गैर-लाभार्थी के लिए, io तकनीकी परियोजनाओं के लिए, net नेटवर्क सेवाओं और समाधानों के लिए। व्यक्तिगत परियोजनाओं के लिए, com.github.username या com.email स्वीकार्य है।
iOS और Android पर जारी एप्लिकेशनों के लिए, दोनों प्लेटफ़ॉर्म पर समान पहचानकर्ता का उपयोग करने की अनुशंसा है। यह Firebase, AppsFlyer, Adjust और अन्य एनालिटिक्स सिस्टम के साथ एकीकरण को सरल करता है जो परियोजना पहचानकर्ता से बँधे होते हैं। उदाहरण के लिए, com.mycompany.myapp iOS पर Bundle ID और Android पर Package Name होगा।
Android परियोजना में Package Name कॉन्फ़िगर करना build.gradle में applicationId और संगत 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 निर्देशिका संरचना से मेल खाना चाहिए। build.gradle में Package Name बदलने पर, आपको फ़ाइलों को संगत निर्देशिकाओं में ले जाना चाहिए और सभी package और import घोषणाओं को अपडेट करना चाहिए। Android Studio Refactor -> Move के माध्यम से यह स्वचालित रूप से कर सकता है, लेकिन दर्जनों फ़ाइलों वाली बड़ी परियोजनाओं के लिए, रिफाक्टरिंग के बाद परिणाम की पुष्टि करने की अनुशंसा है।
यदि परियोजना Data Binding, View Binding या Hilt का उपयोग करती है, तो Package Name बदलने से जनरेट किए गए क्लासों पर भी प्रभाव पड़ेगा। बाइंडिंग क्लास मॉड्यूल के Package Name और लैआउट निर्देशिका के आधार पर बनाए जाते हैं। पहचानकर्ता बदलने के बाद, सभी जनरेट संदर्भों को अपडेट करने के लिए आपको परियोजना का पुनर्निर्माण करना होगा। पुराने संग्रहीत संदर्भों से त्रुटियों से बचने के लिए Package Name बदलने के बाद क्लीन बिल्ड करने की अनुशंसा है।
Gradle 7.0+ में build.gradle में namespace के लिए समर्थन पेश किया गया, जिसने R-क्लास और संसाधन निर्माण उद्देश्यों के लिए AndroidManifest.xml में package फ़ील्ड को बदल दिया। इस बीच, applicationId सिस्टम और Google Play के लिए वास्तविक एप्लिकेशन पहचानकर्ता बना रहता है। यह अलग-अलग applicationId और namespace की अनुमति देता है, जो लाइब्रेरी मॉड्यूल्स के लिए उपयोगी है जहाँ namespace निश्चित होता है जबकि सार्वजनिक पहचानकर्ता बिल्ड के दौरान बदल सकता है।
मॉड्यूलर आर्किटेक्चर वाली परियोजनाओं के लिए, एक मॉड्यूल का Package Name बदलने से अन्य मॉड्यूल्स में इम्पोर्ट प्रभावित हो सकते हैं। यदि data मॉड्यूल के पास पैकेज com.example.data है और domain मॉड्यूल इसकी क्लासें का उपयोग करता है, तो पहचानकर्ता बदलने के बाद, सभी निर्भर मॉड्यूल्स में इम्पोर्ट अपडेट करें। Android Gradle Plugin संस्करण 8.0+ build.gradle से स्वचालित namespace जनरेशन के माध्यम से इस प्रक्रिया को सरल करता है।
वर्तमान 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("App version: ${appInfo.versionName} (${appInfo.versionCode})")
println("Package: $packageName")
Google Play पर एप्लिकेशन प्रकाशित करने के बाद Package Name बदलना एक पूर्ण नया उत्पाद बनाने के बराबर है। सिस्टम अलग Package Name के साथ किसी मौजूदा एप्लिकेशन को अपडेट करने की अनुमति नहीं देता, इसलिए पहचानकर्ता बदलने का निर्णय स्टोर में परियोजना को पुनर्आरंभ करने के समान है।
Package Name बदलने पर निम्न खो जाते हैं: सभी रेटिंग्स और समीक्षाएँ, इंस्टलेशन आंकड़े, Google Services एकीकरण (यदि स्थानांतरित नहीं किया गया), Firebase परियोजना लिंक (नया google-services.json बनाने की आवश्यकता है)। उपयोगकर्ताओं को स्वचालित अपडेट प्राप्त नहीं होगा — वे स्टोर में नया एप्लिकेशन देखेंगे।
Package Name बदलना कंपनी रीब्रांडिंग, एप्लिकेशन को किसी अन्य डेवलपर अकाऊंट में स्थानांतरित करने, या किसी अन्य क्षेत्र के लिए अलग संस्करण बनाने पर उचित हो सकता है। किसी भी स्थिति में, बदलने से पहले पुराने एप्लिकेशन के माध्यम से उपयोगकर्ताओं को सूचित करने और डेटा स्थानांतरण के साथ एक माइग्रेशन योजना तैयार करने की अनुशंसा है। माइग्रेशन योजना के बिना, उपयोगकर्ता खरीदी गई सामग्री, सदस्यताओं और सहेजे गए एप्लिकेशन डेटा तक पहुंच खो देंगे। माइग्रेशन में SharedPreferences या Room के माध्यम से डेटाबेस और फ़ाइलों का स्थानांतरण शामिल है।
Package Name बदलने से पहले सुनिश्चित करें कि नया पहचानकर्ता अनूठा है और नामकरण नियमों का पालन करता है। नए Package Name के साथ Google Play में एक नया एप्लिकेशन बनाएं और इसे एक अलग उत्पाद के रूप में प्रकाशित करें। पुराने एप्लिकेशन विवरण में, नए का लिंक प्रदान करें। उपयोगकर्ताओं को पुनर्निर्देशित करने के लिए 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.appname। सुनिश्चित करें कि पहचानकर्ता Google Play में अनूठा है। सामान्य शब्दों (todo, test, app) से बचें और Google Play में खोज करके जाँचें कि क्या पहचानकर्ता पहले से किसी अन्य डेवलपर द्वारा लिया गया है या नहीं।
हाँ, Google Play पर प्रकाशित करने से पहले, Package Name को बिना किसी परिणाम के बदला जा सकता है। बदलने के बाद, आपको google-services.json पुनर्जनरेट करना होगा, निर्देशिका संरचना को अपडेट करना होगा और सभी इम्पोर्ट की जाँच करनी होगी। Android Studio प्रक्रिया को स्वचालित करने के लिए Refactor -> Move उपकरण प्रदान करता है।
Package Name हस्ताक्षर प्रमाणपत्र के साथ मिलकर एक अनूठा बंधन बनाता है जो Google Play में एप्लिकेशन की पहचान करता है। भले ही दो एप्लिकेशनों के Package Names अलग हों, वे एक ही कुंजी से हस्ताक्षरित हो सकते हैं। हस्ताक्षर प्रमाणपत्र बदलना Key Rotation के माध्यम से Play Console में पहचानकर्ता खोए बिना संभव है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें