Package Name হল একটি অনন্য পরিচায়ক আন্ড্রয়িড অ্যাপ্লিকেশনের জন্য রিভার্স ডোমেন নোটেশনের উপর ভিত্তি করে। এটি ব্যবহার করা হয় সিস্টেম দ্বারা ব্যবহারকারীর ডিভাইসে অ্যাপ্লিকেশন পার্থক্য করতে, 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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন