ডিভাইস সামঞ্জস্য ওভারভিউ

অ্যান্ড্রয়েড ফোন, ট্যাবলেট এবং টেলিভিশনের মতো বিভিন্ন ডিভাইসে চলার জন্য ডিজাইন করা হয়েছে। ডিভাইসের এই বৈচিত্র্য আপনার অ্যাপের জন্য একটি বিশাল সম্ভাব্য ব্যবহারকারী গোষ্ঠী তৈরি করে। সমস্ত ডিভাইসে আপনার অ্যাপটিকে সফল হতে হলে, এটিকে অবশ্যই ফিচারের ভিন্নতা সহ্য করতে হবে এবং একটি নমনীয় ইউজার ইন্টারফেস প্রদান করতে হবে যা বিভিন্ন স্ক্রিন কনফিগারেশনের সাথে খাপ খাইয়ে নিতে পারে।

ডিভাইসের সামঞ্জস্যতা নিশ্চিত করতে, অ্যান্ড্রয়েড একটি ডাইনামিক অ্যাপ ফ্রেমওয়ার্ক প্রদান করে, যেখানে আপনি স্ট্যাটিক ফাইলে কনফিগারেশন-নির্দিষ্ট অ্যাপ রিসোর্স সরবরাহ করতে পারেন, যেমন বিভিন্ন স্ক্রিন সাইজের জন্য আলাদা XML লেআউট। এরপর অ্যান্ড্রয়েড বর্তমান ডিভাইস কনফিগারেশনের উপর ভিত্তি করে উপযুক্ত রিসোর্সগুলো লোড করে। আপনার অ্যাপের ডিজাইন এবং অতিরিক্ত অ্যাপ রিসোর্স সম্পর্কে আগে থেকে চিন্তা করলে, আপনি এমন একটি একক অ্যাপ্লিকেশন প্যাকেজ (APK) প্রকাশ করতে পারেন যা বিভিন্ন ডিভাইসে ব্যবহারকারীর অভিজ্ঞতাকে সর্বোত্তম করে তোলে।

তবে, প্রয়োজনে আপনি আপনার অ্যাপের জন্য প্রয়োজনীয় ফিচারগুলো নির্দিষ্ট করে দিতে পারেন এবং কোন ধরনের ডিভাইস থেকে গুগল প্লে স্টোর-এর মাধ্যমে আপনার অ্যাপ ইনস্টল করা যাবে, তা নিয়ন্ত্রণ করতে পারেন। এই ডকুমেন্টটিতে ব্যাখ্যা করা হয়েছে, কীভাবে আপনি নিয়ন্ত্রণ করতে পারবেন কোন ডিভাইসগুলো আপনার অ্যাপ ব্যবহার করতে পারবে এবং সঠিক ব্যবহারকারীর কাছে পৌঁছানোর জন্য কীভাবে আপনার অ্যাপ প্রস্তুত করবেন।

"সামঞ্জস্যতা" বলতে কী বোঝায়?

অ্যান্ড্রয়েড ডেভেলপমেন্টের ক্ষেত্রে দুই ধরনের সামঞ্জস্যতা রয়েছে: ডিভাইস সামঞ্জস্যতা এবং অ্যাপ সামঞ্জস্যতা

যেহেতু অ্যান্ড্রয়েড একটি ওপেন-সোর্স প্রজেক্ট, তাই যেকোনো হার্ডওয়্যার নির্মাতা অ্যান্ড্রয়েড অপারেটিং সিস্টেম চালিত ডিভাইস তৈরি করতে পারে। কিন্তু একটি ডিভাইস তখনই "অ্যান্ড্রয়েড কম্প্যাটিবল" হয়, যখন সেটি অ্যান্ড্রয়েড এক্সিকিউশন এনভায়রনমেন্টের জন্য লেখা অ্যাপগুলো সঠিকভাবে চালাতে পারে। অ্যান্ড্রয়েড এক্সিকিউশন এনভায়রনমেন্টের সুনির্দিষ্ট বিবরণ অ্যান্ড্রয়েড কম্প্যাটিবিলিটি প্রোগ্রাম দ্বারা নির্ধারিত হয়। কম্প্যাটিবল হিসেবে বিবেচিত হওয়ার জন্য প্রতিটি ডিভাইসকে অবশ্যই কম্প্যাটিবিলিটি টেস্ট স্যুট (CTS) পাস করতে হবে।

একজন অ্যাপ ডেভেলপার হিসেবে, কোনো ডিভাইস অ্যান্ড্রয়েড-উপযোগী কি না, তা নিয়ে আপনাকে চিন্তা করতে হবে না, কারণ শুধুমাত্র অ্যান্ড্রয়েড-উপযোগী ডিভাইসগুলোতেই গুগল প্লে স্টোর থাকে। সুতরাং, যদি কোনো ব্যবহারকারী গুগল প্লে স্টোর থেকে আপনার অ্যাপটি ইনস্টল করেন, তাহলে তিনি একটি অ্যান্ড্রয়েড-উপযোগী ডিভাইস ব্যবহার করছেন।

তবে, আপনার অ্যাপটি প্রতিটি সম্ভাব্য ডিভাইস কনফিগারেশনের সাথে সামঞ্জস্যপূর্ণ কিনা তা আপনাকে বিবেচনা করতে হবে। যেহেতু অ্যান্ড্রয়েড বিভিন্ন ধরণের ডিভাইস কনফিগারেশনে চলে, তাই কিছু ফিচার সব ডিভাইসে পাওয়া যায় না। উদাহরণস্বরূপ, কিছু ডিভাইসে কম্পাস সেন্সর নাও থাকতে পারে। যদি আপনার অ্যাপের মূল কার্যকারিতার জন্য কম্পাস সেন্সরের প্রয়োজন হয়, তাহলে আপনার অ্যাপটি শুধুমাত্র সেইসব ডিভাইসের সাথেই সামঞ্জস্যপূর্ণ হবে যেগুলিতে এই ফিচারটি রয়েছে।

ডিভাইসগুলিতে আপনার অ্যাপের প্রাপ্যতা নিয়ন্ত্রণ করুন

অ্যান্ড্রয়েড বিভিন্ন ধরনের ফিচার সমর্থন করে, যা আপনার অ্যাপ প্ল্যাটফর্ম এপিআই (API)-এর মাধ্যমে ব্যবহার করতে পারে। কিছু ফিচার হার্ডওয়্যার-ভিত্তিক, যেমন কম্পাস সেন্সর; কিছু সফটওয়্যার-ভিত্তিক, যেমন অ্যাপ উইজেট; এবং কিছু প্ল্যাটফর্ম সংস্করণের উপর নির্ভর করে। সব ডিভাইস সব ফিচার সমর্থন করে না, তাই আপনার অ্যাপের প্রয়োজনীয় ফিচারের উপর ভিত্তি করে ডিভাইসগুলোতে এর প্রাপ্যতা নিয়ন্ত্রণ করার প্রয়োজন হতে পারে।

আপনার অ্যাপের জন্য সম্ভাব্য বৃহত্তম ব্যবহারকারী গোষ্ঠী তৈরি করতে, একটিমাত্র APK বা AAB ব্যবহার করে যত বেশি সম্ভব ডিভাইস কনফিগারেশন সমর্থন করুন। বেশিরভাগ ক্ষেত্রে, আপনি রানটাইমে ঐচ্ছিক ফিচারগুলো নিষ্ক্রিয় করে এবং বিভিন্ন কনফিগারেশনের জন্য অ্যাপ রিসোর্সগুলোতে বিকল্প ব্যবস্থা রেখে এটি করতে পারেন, যেমন বিভিন্ন স্ক্রিন সাইজের জন্য ভিন্ন ভিন্ন লেআউট। প্রয়োজনে, আপনি নিম্নলিখিত ডিভাইসের বৈশিষ্ট্যগুলোর উপর ভিত্তি করে গুগল প্লে স্টোরের মাধ্যমে নির্দিষ্ট কিছু ডিভাইসে আপনার অ্যাপের প্রাপ্যতা সীমাবদ্ধ করতে পারেন:

ডিভাইসের বৈশিষ্ট্য

ডিভাইসের বৈশিষ্ট্যের উপর ভিত্তি করে আপনার অ্যাপের প্রাপ্যতা পরিচালনা করতে, অ্যান্ড্রয়েড এমন যেকোনো হার্ডওয়্যার বা সফ্টওয়্যার বৈশিষ্ট্যের জন্য ফিচার আইডি নির্ধারণ করে যা সব ডিভাইসে উপলব্ধ নাও থাকতে পারে। উদাহরণস্বরূপ, কম্পাস সেন্সরের ফিচার আইডি হলো FEATURE_SENSOR_COMPASS , এবং অ্যাপ উইজেটগুলির ফিচার আইডি হলো FEATURE_APP_WIDGETS

প্রয়োজনে, আপনার অ্যাপের ম্যানিফেস্ট ফাইলে একটি <uses-feature> এলিমেন্ট ব্যবহার করে ফিচারটি ঘোষণা করার মাধ্যমে, ব্যবহারকারীদের ডিভাইসে কোনো প্রয়োজনীয় ফিচার না থাকলে আপনি তাদের অ্যাপ ইনস্টল করা থেকে বিরত রাখতে পারেন।

উদাহরণস্বরূপ, যদি আপনার অ্যাপটি এমন কোনো ডিভাইসে কাজ না করে যেখানে কম্পাস সেন্সর নেই, তাহলে আপনি নিম্নলিখিত ম্যানিফেস্ট ট্যাগ ব্যবহার করে কম্পাস সেন্সরটিকে একটি আবশ্যিক শর্ত হিসেবে ঘোষণা করতে পারেন:

<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>

আপনার অ্যাপটি প্রতিটি ডিভাইসের সাথে সামঞ্জস্যপূর্ণ কিনা তা নির্ধারণ করতে, গুগল প্লে স্টোর আপনার অ্যাপের জন্য প্রয়োজনীয় ফিচারগুলোর সাথে ব্যবহারকারীর ডিভাইসে উপলব্ধ ফিচারগুলোর তুলনা করে। যদি ডিভাইসটিতে আপনার অ্যাপের জন্য প্রয়োজনীয় সমস্ত ফিচার না থাকে, তবে ব্যবহারকারী আপনার অ্যাপটি ইনস্টল করতে পারবেন না।

তবে, যদি আপনার অ্যাপের প্রধান কার্যকারিতার জন্য কোনো ডিভাইস ফিচারের প্রয়োজন না হয়, তাহলে required অ্যাট্রিবিউটটি "false" সেট করুন এবং রানটাইমে ডিভাইস ফিচারটি পরীক্ষা করুন। যদি অ্যাপ ফিচারটি বর্তমান ডিভাইসে উপলব্ধ না থাকে, তাহলে সংশ্লিষ্ট অ্যাপ ফিচারটিকে গ্রেসফুলি ডিগ্রেড করুন। উদাহরণস্বরূপ, আপনি hasSystemFeature() ফাংশনটিকে এভাবে কল করে কোনো ফিচার উপলব্ধ আছে কিনা তা জিজ্ঞাসা করতে পারেন:

কোটলিন

if (!packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device doesn't have a compass. Turn off the compass feature.
    disableCompassFeature()
}

জাভা

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device doesn't have a compass. Turn off the compass feature.
    disableCompassFeature();
}

গুগল প্লে স্টোরের মাধ্যমে আপনার অ্যাপের প্রাপ্যতা নিয়ন্ত্রণ করতে আপনি যে সমস্ত ফিল্টার ব্যবহার করতে পারেন, সে সম্পর্কে তথ্যের জন্য, "ফিল্টারস অন গুগল প্লে" ডকুমেন্টেশনটি দেখুন।

প্ল্যাটফর্ম সংস্করণ

বিভিন্ন ডিভাইসে অ্যান্ড্রয়েড প্ল্যাটফর্মের বিভিন্ন সংস্করণ চলতে পারে, যেমন অ্যান্ড্রয়েড ১২ বা অ্যান্ড্রয়েড ১৩। প্ল্যাটফর্মের প্রতিটি পরবর্তী সংস্করণে প্রায়শই এমন কিছু এপিআই (API) যুক্ত করা হয় যা আগের সংস্করণে ছিল না। কোন কোন এপিআই সেট উপলব্ধ আছে তা বোঝানোর জন্য, প্রতিটি প্ল্যাটফর্ম সংস্করণ একটি এপিআই লেভেল (API level ) নির্দিষ্ট করে দেয়। উদাহরণস্বরূপ, অ্যান্ড্রয়েড ১২ হলো এপিআই লেভেল ৩১, এবং অ্যান্ড্রয়েড ১৩ হলো এপিআই লেভেল ৩৩।

আপনাকে অবশ্যই আপনার build.gradle ফাইলে minSdkVersion এবং targetSdkVersion মানগুলি উল্লেখ করতে হবে:

কোটলিন

android {
    defaultConfig {
        applicationId = "com.example.myapp"

        // Defines the minimum API level required to run the app.
        minSdkVersion(30)

        // Specifies the API level used to test the app.
        targetSdkVersion(36)
        ...
    }
}

গ্রুভি

android {
    defaultConfig {
        applicationId 'com.example.myapp'

        // Defines the minimum API level required to run the app.
        minSdkVersion 30

        // Specifies the API level used to test the app.
        targetSdkVersion 36
        ...
    }
}

build.gradle ফাইল সম্পর্কে আরও তথ্যের জন্য, আপনার বিল্ড কনফিগার করুন (Configure your build) পড়ুন।

অ্যান্ড্রয়েডের প্রতিটি পরবর্তী সংস্করণ পূর্ববর্তী প্ল্যাটফর্ম সংস্করণের এপিআই ব্যবহার করে তৈরি অ্যাপগুলির জন্য সামঞ্জস্যতা প্রদান করে, ফলে আপনার অ্যাপটি নথিভুক্ত অ্যান্ড্রয়েড এপিআই ব্যবহার করার পাশাপাশি অ্যান্ড্রয়েডের ভবিষ্যৎ সংস্করণগুলির সাথেও সামঞ্জস্যপূর্ণ থাকে।

তবে, যদি আপনার অ্যাপটি আরও সাম্প্রতিক প্ল্যাটফর্ম সংস্করণে যুক্ত করা API ব্যবহার করে, কিন্তু এর প্রধান কার্যকারিতার জন্য সেগুলোর প্রয়োজন না হয়, তাহলে রানটাইমে API লেভেল পরীক্ষা করুন এবং API লেভেল খুব কম হলে সংশ্লিষ্ট ফিচারগুলোকে সুন্দরভাবে ডাউনগ্রেড করুন। এই ক্ষেত্রে, আপনার অ্যাপের প্রধান কার্যকারিতার জন্য minSdkVersion সর্বনিম্ন সম্ভাব্য মানে সেট করুন, তারপর বর্তমান সিস্টেমের সংস্করণ, SDK_INT কে Build.VERSION_CODES এর সেই কোডনেম কনস্ট্যান্টের সাথে তুলনা করুন যা আপনি পরীক্ষা করতে চান এমন API লেভেলের সাথে সঙ্গতিপূর্ণ, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

কোটলিন

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag and drop features that use ClipboardManager APIs.
    disableDragAndDrop()
}

জাভা

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag and drop features that use ClipboardManager APIs.
    disableDragAndDrop();
}

স্ক্রিন কনফিগারেশন

অ্যান্ড্রয়েড ফোন, ট্যাবলেট এবং টিভির মতো বিভিন্ন আকারের ডিভাইসে চলে। ডিভাইসগুলোকে তাদের স্ক্রিনের ধরন অনুযায়ী শ্রেণিবদ্ধ করার জন্য, অ্যান্ড্রয়েড প্রতিটি ডিভাইসের দুটি বৈশিষ্ট্য নির্ধারণ করে: স্ক্রিনের আকার (স্ক্রিনের ভৌত আকার) এবং স্ক্রিনের ঘনত্ব (স্ক্রিনের পিক্সেলের ভৌত ঘনত্ব, যা ডিপিআই (DPI ) নামে পরিচিত)। বিভিন্ন কনফিগারেশনকে সহজ করার জন্য, অ্যান্ড্রয়েড এই প্রকারভেদগুলোকে কয়েকটি গ্রুপে ভাগ করে, যা সেগুলোকে টার্গেট করা আরও সহজ করে তোলে।

  • চারটি সাধারণ আকার: ছোট, স্বাভাবিক, বড় এবং অতিরিক্ত বড়
  • কয়েকটি সাধারণ ঘনত্ব: mdpi (মাঝারি), hdpi (উচ্চ), xhdpi (অতিরিক্ত উচ্চ), xxhdpi (অতিরিক্ত-অতিরিক্ত উচ্চ), এবং অন্যান্য।

ডিফল্টরূপে, আপনার অ্যাপটি সমস্ত স্ক্রিন সাইজ এবং ডেনসিটির সাথে সামঞ্জস্যপূর্ণ, কারণ সিস্টেম প্রতিটি স্ক্রিনের জন্য প্রয়োজন অনুযায়ী আপনার UI লেআউট এবং ইমেজ রিসোর্সগুলিতে সমন্বয় করে নেয়। প্রচলিত স্ক্রিন ডেনসিটিগুলোর জন্য অপ্টিমাইজ করা বিটম্যাপ ইমেজ সরবরাহ করুন।

যতটা সম্ভব নমনীয় লেআউট ব্যবহার করে ব্যবহারকারীর অভিজ্ঞতা উন্নত করুন। যেখানে বড় ধরনের কনফিগারেশন পরিবর্তনের জন্য, যেমন পোর্ট্রেট ও ল্যান্ডস্কেপ, বা বড় বনাম ছোট উইন্ডোর আকারের জন্য লেআউট রয়েছে, সেখানে কনফিগারেশনের ছোটখাটো পরিবর্তনের জন্য নমনীয় বিকল্প লেআউট দেওয়ার কথা বিবেচনা করুন। এটি ট্যাবলেট, ফোন এবং ফোল্ডেবলের মতো ফর্ম ফ্যাক্টরে ব্যবহারকারীর অভিজ্ঞতা উন্নত করে। মাল্টি-উইন্ডো মোডে উইন্ডোর আকার পরিবর্তনের ক্ষেত্রেও এটি সহায়ক হয়।

বিভিন্ন স্ক্রিনের জন্য কীভাবে বিকল্প রিসোর্স তৈরি করতে হয় এবং প্রয়োজনে কীভাবে আপনার অ্যাপকে নির্দিষ্ট স্ক্রিন সাইজে সীমাবদ্ধ রাখতে হয়, সে সম্পর্কে জানতে স্ক্রিন সামঞ্জস্যতার সংক্ষিপ্ত বিবরণটি পড়ুন এবং বড় স্ক্রিনের অ্যাপের গুণমান সংক্রান্ত নির্দেশিকাগুলো দেখুন।

ব্যবসায়িক কারণে আপনার অ্যাপের প্রাপ্যতা নিয়ন্ত্রণ করুন

ডিভাইসের বৈশিষ্ট্যের উপর ভিত্তি করে আপনার অ্যাপের প্রাপ্যতা সীমিত করার পাশাপাশি, ব্যবসায়িক বা আইনি কারণেও আপনার অ্যাপের প্রাপ্যতা সীমিত করার প্রয়োজন হতে পারে। এই ধরনের পরিস্থিতির জন্য, গুগল প্লে স্টোর প্লে কনসোলে ফিল্টারিং অপশন প্রদান করে, যা আপনাকে ব্যবহারকারীর অবস্থান বা ওয়্যারলেস ক্যারিয়ারের মতো অ-প্রযুক্তিগত কারণে আপনার অ্যাপের প্রাপ্যতা নিয়ন্ত্রণ করতে দেয়।

প্রযুক্তিগত সামঞ্জস্যের জন্য ফিল্টারিং—যেমন প্রয়োজনীয় হার্ডওয়্যার উপাদান—সর্বদা আপনার APK বা AAB ফাইলে থাকা তথ্যের উপর ভিত্তি করে করা হয়। কিন্তু অ-প্রযুক্তিগত কারণে ফিল্টারিং—যেমন ভৌগোলিক অবস্থান—সর্বদা গুগল প্লে কনসোলে পরিচালনা করা হয়।

অতিরিক্ত সম্পদ:

অ্যাপের রিসোর্সগুলির সংক্ষিপ্ত বিবরণ
অ্যাপ কোড থেকে অ্যাপ রিসোর্সকে আলাদা রাখতে অ্যান্ড্রয়েড অ্যাপগুলো কীভাবে গঠিত হয়, সেই সম্পর্কিত তথ্য; যার মধ্যে নির্দিষ্ট ডিভাইস কনফিগারেশনের জন্য কীভাবে বিকল্প রিসোর্স সরবরাহ করা যায়, সেই বিষয়টিও অন্তর্ভুক্ত।
গুগল প্লে-তে ফিল্টার
বিভিন্ন ডিভাইসে আপনার অ্যাপ ইনস্টল হওয়া থেকে গুগল প্লে স্টোর যে নানা উপায়ে বাধা দিতে পারে, সে সম্পর্কিত তথ্য।
অ্যান্ড্রয়েডে অনুমতি
অ্যান্ড্রয়েড কীভাবে একটি অনুমতি ব্যবস্থার মাধ্যমে নির্দিষ্ট এপিআই-গুলিতে অ্যাপের অ্যাক্সেস সীমাবদ্ধ করে, যেখানে আপনার অ্যাপকে সেই এপিআইগুলি ব্যবহার করার জন্য ব্যবহারকারীর সম্মতির প্রয়োজন হয়।