<ব্যবহার-বৈশিষ্ট্য>

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

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

ফিল্টারিংয়ের ভিত্তি হিসেবে গুগল প্লে কীভাবে ফিচার ব্যবহার করে, সে সম্পর্কে গুরুত্বপূর্ণ তথ্যের জন্য “গুগল প্লে এবং ফিচার-ভিত্তিক ফিল্টারিং” বিভাগটি দেখুন।

আপনার অ্যাপে ফিচার ঘোষণা করার বিষয়ে তথ্যের জন্য, “বিভিন্ন ডিভাইসের ধরনে অ্যাপের প্রাপ্যতা বৃদ্ধি করুন” দেখুন।

সিনট্যাক্স:
<uses-feature
  android:name="string"
  android:required=["true" | "false"]
  android:glEsVersion="integer" />
এর মধ্যে অন্তর্ভুক্ত:
<manifest>
বর্ণনা:

অ্যাপ্লিকেশন দ্বারা ব্যবহৃত একটি একক হার্ডওয়্যার বা সফ্টওয়্যার বৈশিষ্ট্য ঘোষণা করে।

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

যেহেতু বিভিন্ন অ্যান্ড্রয়েড ডিভাইসে ফিচারের সমর্থন ভিন্ন হতে পারে, তাই একটি অ্যাপ্লিকেশন কোন কোন ডিভাইস-ভিত্তিক ফিচার ব্যবহার করে তা বর্ণনা করার ক্ষেত্রে <uses-feature> এলিমেন্টটি একটি গুরুত্বপূর্ণ ভূমিকা পালন করে।

আপনার অ্যাপ্লিকেশন দ্বারা ঘোষিত উপলব্ধ বৈশিষ্ট্যগুলির সেটটি অ্যান্ড্রয়েড PackageManager দ্বারা উপলব্ধ করা বৈশিষ্ট্য ধ্রুবকগুলির সেটের সাথে সঙ্গতিপূর্ণ। বৈশিষ্ট্য ধ্রুবকগুলি এই নথির বৈশিষ্ট্য রেফারেন্স বিভাগে তালিকাভুক্ত করা হয়েছে।

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

<uses-feature android:name="android.hardware.bluetooth" android:required="true" />
<uses-feature android:name="android.hardware.camera.any" android:required="true" />

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

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

তবে, গুগল প্লে-এর মতো অন্যান্য পরিষেবা এবং অ্যাপ্লিকেশনগুলি আপনার অ্যাপ্লিকেশনটি পরিচালনা বা এর সাথে ইন্টারঅ্যাক্ট করার অংশ হিসাবে আপনার অ্যাপ্লিকেশনের <uses-feature> ডিক্লারেশনগুলি পরীক্ষা করতে পারে। এই কারণে, আপনার অ্যাপ্লিকেশন যে সমস্ত ফিচার ব্যবহার করে, সেগুলি ডিক্লেয়ার করা খুবই গুরুত্বপূর্ণ।

কিছু ফিচারের জন্য একটি নির্দিষ্ট অ্যাট্রিবিউট থাকতে পারে, যা আপনাকে ফিচারটির একটি ভার্সন নির্ধারণ করতে দেয়, যেমন ব্যবহৃত Open GL-এর ভার্সন (যা glEsVersion দিয়ে ডিক্লেয়ার করা হয়)। অন্যান্য ফিচার, যা কোনো ডিভাইসের জন্য থাকে বা থাকে না, যেমন ক্যামেরা, সেগুলো name অ্যাট্রিবিউট ব্যবহার করে ডিক্লেয়ার করা হয়।

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

দ্রষ্টব্য: কোনো ফিচার ডিক্লেয়ার করার সময় মনে রাখবেন যে, আপনাকে প্রয়োজন অনুযায়ী পারমিশনও অনুরোধ করতে হবে। উদাহরণস্বরূপ, আপনার অ্যাপ্লিকেশন ক্যামেরা এপিআই (API) অ্যাক্সেস করার আগে আপনাকে CAMERA পারমিশন অনুরোধ করতে হবে। পারমিশন অনুরোধ করলে আপনার অ্যাপ্লিকেশনটি উপযুক্ত হার্ডওয়্যার এবং সফটওয়্যার অ্যাক্সেস করার সুযোগ পায়। আপনার অ্যাপ্লিকেশন দ্বারা ব্যবহৃত ফিচারগুলো ডিক্লেয়ার করা সঠিক ডিভাইস কম্প্যাটিবিলিটি নিশ্চিত করতে সাহায্য করে।

বৈশিষ্ট্য:
android:name
অ্যাপ্লিকেশন দ্বারা ব্যবহৃত একটি একক হার্ডওয়্যার বা সফ্টওয়্যার বৈশিষ্ট্যকে একটি বর্ণনাকারী স্ট্রিং হিসাবে নির্দিষ্ট করে। বৈধ অ্যাট্রিবিউট মানগুলি 'হার্ডওয়্যার বৈশিষ্ট্য' এবং 'সফ্টওয়্যার বৈশিষ্ট্য' বিভাগে তালিকাভুক্ত করা হয়েছে। এই অ্যাট্রিবিউট মানগুলি কেস-সেনসিটিভ।
android:required
বুলিয়ান মান যা নির্দেশ করে যে অ্যাপ্লিকেশনটির android:name এ উল্লেখিত বৈশিষ্ট্যটির প্রয়োজন আছে কি না।
  • কোনো ফিচারের জন্য android:required="true" ঘোষণা করার অর্থ হলো, ডিভাইসে নির্দিষ্ট ফিচারটি উপস্থিত না থাকলে অ্যাপ্লিকেশনটি কাজ করতে পারবে না, অথবা সেভাবে কাজ করার জন্য এটি ডিজাইন করা হয়নি
  • কোনো ফিচারের জন্য android:required="false" ঘোষণা করার অর্থ হলো, ডিভাইসে ফিচারটি উপস্থিত থাকলে অ্যাপ্লিকেশনটি তা ব্যবহার করবে , কিন্তু প্রয়োজনে নির্দিষ্ট ফিচারটি ছাড়াও কাজ করার জন্য এটি ডিজাইন করা হয়েছে

android:required এর ডিফল্ট মান হলো "true"

android:glEsVersion
অ্যাপ্লিকেশনটির জন্য প্রয়োজনীয় OpenGL ES সংস্করণ। উপরের ১৬ বিট মেজর নম্বর এবং নিচের ১৬ বিট মাইনর নম্বর নির্দেশ করে। উদাহরণস্বরূপ, OpenGL ES সংস্করণ ২.০ নির্দিষ্ট করতে, আপনাকে মানটি "0x00020000" হিসাবে সেট করতে হবে, অথবা OpenGL ES ৩.২ নির্দিষ্ট করতে, আপনাকে মানটি "0x00030002" হিসাবে সেট করতে হবে।

একটি অ্যাপ্লিকেশন তার ম্যানিফেস্টে সর্বাধিক একটি android:glEsVersion অ্যাট্রিবিউট নির্দিষ্ট করতে পারে। যদি এটি একাধিক অ্যাট্রিবিউট নির্দিষ্ট করে, তবে সংখ্যাগতভাবে সর্বোচ্চ মানের android:glEsVersion টি ব্যবহৃত হয় এবং অন্য যেকোনো মান উপেক্ষা করা হয়।

যদি কোনো অ্যাপ্লিকেশন android:glEsVersion অ্যাট্রিবিউটটি নির্দিষ্ট না করে, তাহলে ধরে নেওয়া হয় যে অ্যাপ্লিকেশনটির জন্য শুধুমাত্র OpenGL ES 1.0 প্রয়োজন, যা সমস্ত অ্যান্ড্রয়েড-চালিত ডিভাইস দ্বারা সমর্থিত।

একটি অ্যাপ্লিকেশন ধরে নিতে পারে যে, যদি কোনো প্ল্যাটফর্ম একটি নির্দিষ্ট OpenGL ES সংস্করণ সমর্থন করে, তবে এটি সংখ্যাগতভাবে নিম্নতর সমস্ত OpenGL ES সংস্করণও সমর্থন করে। অতএব, যে অ্যাপ্লিকেশনের জন্য OpenGL ES 1.0 এবং OpenGL ES 2.0 উভয়ই প্রয়োজন, সেটির জন্য OpenGL ES 2.0 প্রয়োজন বলে উল্লেখ করুন।

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

OpenGL ES ব্যবহারের বিষয়ে আরও তথ্যের জন্য, যার মধ্যে রানটাইমে সমর্থিত OpenGL ES সংস্করণ কীভাবে পরীক্ষা করতে হয় তাও অন্তর্ভুক্ত, OpenGL ES API গাইডটি দেখুন।

এতে প্রবর্তন করা হয়েছিল:
এপিআই লেভেল ৪
আরও দেখুন:

গুগল প্লে এবং বৈশিষ্ট্য-ভিত্তিক ফিল্টারিং

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

কোনো নির্দিষ্ট ব্যবহারকারীর ডিভাইসের সাথে একটি অ্যাপ্লিকেশনের ফিচারের সামঞ্জস্যতা নির্ধারণ করতে, গুগল প্লে তুলনা করে:

  • অ্যাপ্লিকেশনটির ম্যানিফেস্টে <uses-feature> এলিমেন্টের অধীনে ঘোষিত, অ্যাপ্লিকেশনটির জন্য প্রয়োজনীয় ফিচারসমূহ।
  • রিড-অনলি সিস্টেম প্রোপার্টিজ ব্যবহার করে রিপোর্ট করা অনুযায়ী, ডিভাইসটিতে হার্ডওয়্যার বা সফ্টওয়্যারে উপলব্ধ ফিচারসমূহ।

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

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

প্রতিবার আপনি যখন গুগল প্লে কনসোলে কোনো অ্যাপ্লিকেশন আপলোড করেন, গুগল প্লে অ্যাপ্লিকেশনটির ম্যানিফেস্ট ফাইলটি স্ক্যান করে। এটি <uses-feature> এলিমেন্টগুলো খুঁজে দেখে এবং কিছু ক্ষেত্রে <uses-sdk><uses-permission> এলিমেন্টের মতো অন্যান্য এলিমেন্টের সাথে মিলিয়ে সেগুলোকে মূল্যায়ন করে। অ্যাপ্লিকেশনটির প্রয়োজনীয় ফিচারগুলোর তালিকা নির্ধারণ করার পর, এটি সেই তালিকাটিকে অ্যাপ্লিকেশন APK এবং অ্যাপ্লিকেশন ভার্সনের সাথে যুক্ত মেটাডেটা হিসেবে অভ্যন্তরীণভাবে সংরক্ষণ করে।

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

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

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

স্পষ্টভাবে ঘোষিত বৈশিষ্ট্যের উপর ভিত্তি করে ফিল্টারিং

সুস্পষ্টভাবে ঘোষিত ফিচার হলো এমন একটি ফিচার যা আপনার অ্যাপ্লিকেশন একটি <uses-feature> এলিমেন্টের মধ্যে ঘোষণা করে। আপনি যদি এপিআই লেভেল ৫ বা তার উচ্চতর সংস্করণের জন্য কম্পাইল করেন, তাহলে ফিচার ডিক্লারেশনে একটি android:required=["true" | "false"] অ্যাট্রিবিউট অন্তর্ভুক্ত থাকতে পারে।

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

গুগল প্লে সুস্পষ্টভাবে ঘোষিত বৈশিষ্ট্যগুলিকে এইভাবে পরিচালনা করে:

  • যদি কোনো ফিচারকে আবশ্যক হিসেবে স্পষ্টভাবে ঘোষণা করা হয়, যেমনটি নিচের উদাহরণে দেখানো হয়েছে, তাহলে গুগল প্লে অ্যাপ্লিকেশনটির জন্য প্রয়োজনীয় ফিচারের তালিকায় সেই ফিচারটি যোগ করে। এরপর এটি সেইসব ডিভাইসের ব্যবহারকারীদের জন্য অ্যাপ্লিকেশনটি ফিল্টার করে দেয়, যেগুলোতে সেই ফিচারটি নেই।
    <uses-feature android:name="android.hardware.camera.any" android:required="true" />
  • যদি কোনো ফিচারকে স্পষ্টভাবে অপ্রয়োজনীয় হিসেবে ঘোষণা করা হয়, যেমনটা নিচের উদাহরণে দেখানো হয়েছে, তাহলে Google Play সেই ফিচারটিকে প্রয়োজনীয় ফিচারের তালিকায় যোগ করে না । এই কারণে, অ্যাপ্লিকেশন ফিল্টার করার সময় স্পষ্টভাবে ঘোষিত অপ্রয়োজনীয় কোনো ফিচারকে কখনোই বিবেচনা করা হয় না। এমনকি ডিভাইসটিতে ঘোষিত ফিচারটি না থাকলেও, Google Play অ্যাপ্লিকেশনটিকে ডিভাইসটির সাথে সামঞ্জস্যপূর্ণ বলে মনে করে এবং ব্যবহারকারীকে তা দেখায়, যদি না অন্য কোনো ফিল্টারিং নিয়ম প্রযোজ্য হয়।
    <uses-feature android:name="android.hardware.camera" android:required="false" />
  • যদি কোনো ফিচার স্পষ্টভাবে ঘোষণা করা হয়, কিন্তু তাতে android:required অ্যাট্রিবিউট না থাকে, তাহলে গুগল প্লে ধরে নেয় যে ফিচারটি আবশ্যক এবং সেটির ওপর ফিল্টারিং চালু করে।

সাধারণত, আপনার অ্যাপ্লিকেশনটি যদি অ্যান্ড্রয়েড ১.৬ বা তার নিচের সংস্করণে চলার জন্য ডিজাইন করা হয়, তাহলে API-তে android:required অ্যাট্রিবিউটটি উপলব্ধ থাকে না এবং গুগল প্লে ধরে নেয় যে সমস্ত <uses-feature> ডিক্লারেশন আবশ্যক।

দ্রষ্টব্য: কোনো ফিচারকে স্পষ্টভাবে ঘোষণা করে এবং android:required="false" অ্যাট্রিবিউটটি অন্তর্ভুক্ত করার মাধ্যমে, আপনি নির্দিষ্ট ফিচারটির জন্য গুগল প্লে-তে সমস্ত ফিল্টারিং কার্যকরভাবে নিষ্ক্রিয় করতে পারেন।

অন্তর্নিহিত বৈশিষ্ট্যের উপর ভিত্তি করে ফিল্টার করুন

একটি অন্তর্নিহিত বৈশিষ্ট্য হলো এমন একটি বৈশিষ্ট্য যা একটি অ্যাপ্লিকেশনের সঠিকভাবে কাজ করার জন্য প্রয়োজন, কিন্তু যা ম্যানিফেস্ট ফাইলের <uses-feature> এলিমেন্টে ঘোষিত থাকে না । কঠোরভাবে বলতে গেলে, প্রতিটি অ্যাপ্লিকেশনের জন্য তার ব্যবহৃত বা প্রয়োজনীয় সমস্ত বৈশিষ্ট্য সর্বদা ঘোষণা করাই সর্বোত্তম, এবং কোনো অ্যাপ্লিকেশনের ব্যবহৃত বৈশিষ্ট্যের ঘোষণার অনুপস্থিতিকে একটি ত্রুটি হিসেবে গণ্য করা যেতে পারে।

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

একটি অ্যাপ্লিকেশনের কোনো ফিচারের প্রয়োজন হতে পারে, কিন্তু নিম্নলিখিত কারণগুলোর জন্য তা ঘোষণা নাও করা হতে পারে:

  • অ্যাপ্লিকেশনটি অ্যান্ড্রয়েড লাইব্রেরির একটি পুরোনো সংস্করণের (অ্যান্ড্রয়েড ১.৫ বা তার আগের) জন্য কম্পাইল করা হয়েছিল, যেটিতে <uses-feature> এলিমেন্টটি উপলব্ধ নয়।
  • ডেভেলপার ভুলবশত ধরে নেন যে ফিচারটি সব ডিভাইসে বিদ্যমান এবং এর জন্য কোনো ঘোষণার প্রয়োজন নেই।
  • ডেভেলপার ভুলবশত ফিচার ডিক্লারেশনটি বাদ দিয়ে দেন।
  • ডেভেলপার ফিচারটি স্পষ্টভাবে ঘোষণা করেন, কিন্তু সেই ঘোষণাটি বৈধ নয়। উদাহরণস্বরূপ, <uses-feature> এলিমেন্টের নামে বানান ভুল অথবা android:name অ্যাট্রিবিউটের জন্য একটি অচেনা স্ট্রিং ভ্যালু ফিচারটির ঘোষণাকে অবৈধ করে দেয়।

এইসব ক্ষেত্র বিবেচনা করার জন্য, গুগল প্লে ম্যানিফেস্ট ফাইলে ঘোষিত অন্যান্য উপাদান , বিশেষ করে <uses-permission> উপাদানগুলো পরীক্ষা করে একটি অ্যাপ্লিকেশনের অন্তর্নিহিত বৈশিষ্ট্যের প্রয়োজনীয়তাগুলো খুঁজে বের করার চেষ্টা করে।

যদি কোনো অ্যাপ্লিকেশন হার্ডওয়্যার-সম্পর্কিত অনুমতির জন্য অনুরোধ করে, তাহলে Google Play ধরে নেয় যে অ্যাপ্লিকেশনটি অন্তর্নিহিত হার্ডওয়্যারের বৈশিষ্ট্যগুলো ব্যবহার করে এবং সেই কারণে তার জন্য ওই বৈশিষ্ট্যগুলো প্রয়োজন, এমনকি যদি সংশ্লিষ্ট কোনো <uses-feature> ঘোষণা নাও থাকে। এই ধরনের অনুমতির জন্য, Google Play অ্যাপ্লিকেশনটির জন্য সংরক্ষিত মেটাডেটাতে অন্তর্নিহিত হার্ডওয়্যারের বৈশিষ্ট্যগুলো যোগ করে এবং সেগুলোর জন্য ফিল্টার সেট করে।

উদাহরণস্বরূপ, যদি কোনো অ্যাপ্লিকেশন CAMERA পারমিশনের জন্য অনুরোধ করে, তাহলে Google Play ধরে নেয় যে অ্যাপ্লিকেশনটির একটি পেছনের (বাইরের) ক্যামেরা প্রয়োজন, এমনকি যদি অ্যাপটি android.hardware.camera এর জন্য কোনো <uses-feature> এলিমেন্ট ঘোষণা নাও করে। এর ফলে, Google Play সেই ডিভাইসগুলোকে ফিল্টার করে দেয় যেগুলোতে পেছনের ক্যামেরা নেই।

আপনি যদি না চান যে গুগল প্লে কোনো নির্দিষ্ট অন্তর্নিহিত বৈশিষ্ট্যের উপর ভিত্তি করে ফিল্টার করুক, তাহলে একটি <uses-feature> এলিমেন্টের মধ্যে বৈশিষ্ট্যটি স্পষ্টভাবে ঘোষণা করুন এবং android:required="false" অ্যাট্রিবিউটটি অন্তর্ভুক্ত করুন। উদাহরণস্বরূপ, CAMERA পারমিশন দ্বারা অন্তর্নিহিত ফিল্টারিং নিষ্ক্রিয় করতে, নিম্নলিখিত বৈশিষ্ট্যগুলি ঘোষণা করুন:

<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

সতর্কতা: <uses-permission> এলিমেন্টে আপনি যে অনুমতিগুলির জন্য অনুরোধ করেন, তা গুগল প্লে আপনার অ্যাপ্লিকেশনটিকে কীভাবে ফিল্টার করবে তার উপর সরাসরি প্রভাব ফেলতে পারে। ‘ফিচার রিকোয়ারমেন্টস নির্দেশক অনুমতিসমূহ’ বিভাগে সেই সমস্ত অনুমতির সম্পূর্ণ তালিকা দেওয়া আছে, যেগুলি ফিচার রিকোয়ারমেন্টস নির্দেশ করে এবং ফলস্বরূপ ফিল্টারিং শুরু করে।

ব্লুটুথ বৈশিষ্ট্যের জন্য বিশেষ ব্যবস্থা

ব্লুটুথের জন্য ফিল্টারিং নির্ধারণ করার ক্ষেত্রে গুগল প্লে পূর্ববর্তী উদাহরণে বর্ণিত নিয়মের চেয়ে কিছুটা ভিন্ন নিয়ম প্রয়োগ করে।

যদি কোনো অ্যাপ্লিকেশন <uses-permission> এলিমেন্টে ব্লুটুথ পারমিশন ঘোষণা করে, কিন্তু <uses-feature> এলিমেন্টে ব্লুটুথ ফিচারটি স্পষ্টভাবে ঘোষণা না করে, তাহলে Google Play <uses-sdk> এলিমেন্টে উল্লেখিত অ্যান্ড্রয়েড প্ল্যাটফর্মের সংস্করণ(গুলি) পরীক্ষা করে দেখে, যেটিতে অ্যাপ্লিকেশনটি চলার জন্য ডিজাইন করা হয়েছে।

নিচের সারণিতে যেমন দেখানো হয়েছে, গুগল প্লে ব্লুটুথ ফিচারের জন্য ফিল্টারিং তখনই চালু করে, যখন অ্যাপ্লিকেশনটি তার সর্বনিম্ন বা টার্গেটেড প্ল্যাটফর্ম হিসেবে অ্যান্ড্রয়েড ২.০ (এপিআই লেভেল ৫) বা তার উচ্চতর সংস্করণ ঘোষণা করে। তবে, মনে রাখবেন যে, যখন অ্যাপ্লিকেশনটি একটি <uses-feature> এলিমেন্টের মধ্যে ব্লুটুথ ফিচারটি স্পষ্টভাবে ঘোষণা করে, তখনও গুগল প্লে ফিল্টারিংয়ের সাধারণ নিয়মগুলো প্রয়োগ করে।

সারণি ১. যে অ্যাপ্লিকেশন ব্লুটুথ অনুমতির জন্য অনুরোধ করে কিন্তু <uses-feature> এলিমেন্টে ব্লুটুথ ফিচারটি ঘোষণা করে না, তার জন্য গুগল প্লে কীভাবে ব্লুটুথ ফিচারের প্রয়োজনীয়তা নির্ধারণ করে।

যদি minSdkVersion হয় ... এবং targetSdkVersion হল ফলাফল
<=4, অথবা <uses-sdk> ঘোষিত নয় <=৪ android.hardware.bluetooth ফিচারটির সমর্থনের তথ্যের ভিত্তিতে গুগল প্লে কোনো ডিভাইস থেকে অ্যাপ্লিকেশনটি ফিল্টার করে না
<=৪ >=৫ যেসব ডিভাইসে android.hardware.bluetooth ফিচারটি সাপোর্ট করে না (পুরানো সংস্করণগুলো সহ), গুগল প্লে সেখান থেকে অ্যাপ্লিকেশনটি ফিল্টার করে দেয়।
>=৫ >=৫

নিম্নলিখিত উদাহরণগুলো গুগল প্লে যেভাবে ব্লুটুথ ফিচারটি পরিচালনা করে, তার উপর ভিত্তি করে বিভিন্ন ফিল্টারিং প্রভাব তুলে ধরে।

প্রথম উদাহরণে, পুরোনো API লেভেলে চলার জন্য ডিজাইন করা একটি অ্যাপ্লিকেশন ব্লুটুথ পারমিশন ঘোষণা করে, কিন্তু <uses-feature> এলিমেন্টের মধ্যে ব্লুটুথ ফিচারটি ঘোষণা করে না।
ফলাফল: গুগল প্লে কোনো ডিভাইস থেকেই অ্যাপ্লিকেশনটি ফিল্টার করে না।
<manifest ...>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" />
    ...
</manifest>
দ্বিতীয় উদাহরণে, একই অ্যাপ্লিকেশনটি টার্গেট এপিআই লেভেল হিসেবে "5" ঘোষণা করে।
ফলাফল: গুগল প্লে এখন ফিচারটিকে প্রয়োজনীয় বলে ধরে নেয় এবং ব্লুটুথ সাপোর্ট নেই এমন সমস্ত ডিভাইস থেকে অ্যাপ্লিকেশনটি ফিল্টার করে দেয়, যার মধ্যে প্ল্যাটফর্মটির পুরোনো সংস্করণ চালিত ডিভাইসগুলোও অন্তর্ভুক্ত।
<manifest ...>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>
এখানে, সেই একই অ্যাপ্লিকেশনটি এখন বিশেষভাবে ব্লুটুথ বৈশিষ্ট্যটি ঘোষণা করছে।
ফলাফল: পূর্ববর্তী উদাহরণের অনুরূপ: ফিল্টারিং প্রয়োগ করা হয়েছে।
<manifest ...>
    <uses-feature android:name="android.hardware.bluetooth" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>
অবশেষে, নিম্নলিখিত ক্ষেত্রে, একই অ্যাপ্লিকেশনটি একটি android:required="false" অ্যাট্রিবিউট যোগ করে।
ফলাফল: গুগল প্লে সকল ডিভাইসের জন্য ব্লুটুথ ফিচার সাপোর্টের উপর ভিত্তি করে ফিল্টারিং নিষ্ক্রিয় করে দিয়েছে।
<manifest ...>
    <uses-feature android:name="android.hardware.bluetooth" android:required="false" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>

আপনার অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় বৈশিষ্ট্যগুলো পরীক্ষা করুন।

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

টুলটি ব্যবহার করতে, এই ধাপগুলো অনুসরণ করুন:

  1. আপনার অ্যাপ্লিকেশনটি একটি আনসাইনড APK হিসেবে বিল্ড এবং এক্সপোর্ট করুন। আপনি যদি অ্যান্ড্রয়েড স্টুডিওতে ডেভেলপ করেন, তাহলে নিম্নলিখিতভাবে গ্রেডল (Gradle) ব্যবহার করে আপনার অ্যাপ্লিকেশনটি বিল্ড করুন:
    1. প্রজেক্টটি খুলুন এবং রান > কনফিগারেশন সম্পাদনা নির্বাচন করুন।
    2. রান/ডিবাগ কনফিগারেশন উইন্ডোর উপরের বাম কোণার কাছাকাছি থাকা প্লাস চিহ্নটি নির্বাচন করুন।
    3. গ্রেডল নির্বাচন করুন।
    4. Name- এর জায়গায় 'Unsigned APK' লিখুন।
    5. গ্রেডল প্রজেক্ট সেকশন থেকে আপনার মডিউলটি বেছে নিন।
    6. Tasks- এ 'assemble' লিখুন।
    7. নতুন কনফিগারেশনটি সম্পূর্ণ করতে OK নির্বাচন করুন।
    8. টুলবারে Unsigned APK রান কনফিগারেশনটি নির্বাচিত আছে কিনা তা নিশ্চিত করুন, এবং তারপর Run > Run 'Unsigned APK' নির্বাচন করুন।
    আপনি আপনার স্বাক্ষরবিহীন APK ফাইলটি < ProjectName >/app/build/outputs/apk/ ডিরেক্টরিতে খুঁজে পাবেন।
  2. aapt2 টুলটি খুঁজুন, যদি এটি ইতিমধ্যেই আপনার PATH-এ না থাকে। আপনি যদি SDK Tools r8 বা তার উচ্চতর সংস্করণ ব্যবহার করেন, তাহলে আপনি < SDK >/build-tools/< tools version number > ডিরেক্টরিতে aapt2 খুঁজে পাবেন।

    দ্রষ্টব্য: আপনাকে অবশ্যই aapt2 এর সেই সংস্করণটি ব্যবহার করতে হবে যা সর্বশেষ উপলব্ধ Build-Tools কম্পোনেন্টের সাথে সরবরাহ করা হয়েছে। যদি আপনার কাছে সর্বশেষ Build-Tools কম্পোনেন্টটি না থাকে, তবে Android SDK Manager ব্যবহার করে এটি ডাউনলোড করুন।

  3. এই সিনট্যাক্স ব্যবহার করে aapt2 চালান:
$ aapt2 dump badging <path_to_exported_.apk>

পূর্বে দেখানো দ্বিতীয় ব্লুটুথ উদাহরণটির কমান্ড আউটপুটের একটি নমুনা এখানে দেওয়া হলো:

$ ./aapt2 dump badging BTExample.apk
package: name='com.example.android.btexample' versionCode='' versionName=''
uses-permission:'android.permission.BLUETOOTH_ADMIN'
uses-feature:'android.hardware.bluetooth'
sdkVersion:'3'
targetSdkVersion:'5'
application: label='BT Example' icon='res/drawable/app_bt_ex.png'
launchable activity name='com.example.android.btexample.MyActivity'label='' icon=''
uses-feature:'android.hardware.touchscreen'
main
supports-screens: 'small' 'normal' 'large'
locales: '--_--'
densities: '160'

বৈশিষ্ট্য রেফারেন্স

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

হার্ডওয়্যার বৈশিষ্ট্য

এই বিভাগে সর্বশেষ প্ল্যাটফর্ম রিলিজ দ্বারা সমর্থিত হার্ডওয়্যার ফিচারগুলো উপস্থাপন করা হয়েছে। আপনার অ্যাপ কোনো হার্ডওয়্যার ফিচার ব্যবহার করে বা তার প্রয়োজন আছে, তা বোঝাতে android:name অ্যাট্রিবিউটে "android.hardware" দিয়ে শুরু করে সংশ্লিষ্ট ভ্যালুটি ডিক্লেয়ার করুন। প্রতিবার হার্ডওয়্যার ফিচার ডিক্লেয়ার করার সময় একটি আলাদা <uses-feature> এলিমেন্ট ব্যবহার করুন।

অডিও হার্ডওয়্যারের বৈশিষ্ট্য

android.hardware.audio.low_latency
অ্যাপটি ডিভাইসের লো-ল্যাটেন্সি অডিও পাইপলাইন ব্যবহার করে, যা সাউন্ড ইনপুট বা আউটপুট প্রসেস করার সময় ল্যাগ এবং বিলম্ব কমিয়ে দেয়।
android.hardware.audio.output
অ্যাপটি ডিভাইসের স্পিকার, অডিও জ্যাক, ব্লুটুথ স্ট্রিমিং ক্ষমতা বা অনুরূপ কোনো পদ্ধতি ব্যবহার করে শব্দ প্রেরণ করে।
android.hardware.audio.pro
অ্যাপটি ডিভাইসটির উন্নতমানের অডিও কার্যকারিতা এবং কর্মক্ষমতা ব্যবহার করে।
android.hardware.microphone
অ্যাপটি ডিভাইসের মাইক্রোফোন ব্যবহার করে অডিও রেকর্ড করে।

ব্লুটুথ হার্ডওয়্যারের বৈশিষ্ট্য

android.hardware.bluetooth
অ্যাপটি সাধারণত অন্যান্য ব্লুটুথ-সক্ষম ডিভাইসের সাথে যোগাযোগ করার জন্য ডিভাইসটির ব্লুটুথ বৈশিষ্ট্য ব্যবহার করে।
android.hardware.bluetooth_le
অ্যাপটি ডিভাইসটির ব্লুটুথ লো এনার্জি রেডিও ফিচার ব্যবহার করে।

ক্যামেরার হার্ডওয়্যার বৈশিষ্ট্য

দ্রষ্টব্য: গুগল প্লে দ্বারা আপনার অ্যাপের অপ্রয়োজনীয় ফিল্টারিং রোধ করতে, আপনার অ্যাপের যেকোনো ক্যামেরা ফিচারে android:required="false" যোগ করুন, যা ফিচারটি ছাড়াই কাজ করতে পারে। অন্যথায়, গুগল প্লে ফিচারটিকে প্রয়োজনীয় বলে ধরে নেয় এবং যেসব ডিভাইসে এই ফিচারটি নেই, সেগুলোকে আপনার অ্যাপ অ্যাক্সেস করতে বাধা দেয়।

বড় স্ক্রিন সমর্থন

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

প্রাথমিক ক্যামেরা সাপোর্ট দিতে এবং আপনার অ্যাপটিকে যত বেশি সম্ভব ডিভাইসে উপলব্ধ করতে, আপনার অ্যাপ ম্যানিফেস্টে নিম্নলিখিত ক্যামেরা ফিচার সেটিংস যোগ করুন:

<uses-feature android:name="android.hardware.camera.any" android:required="false" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />

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

বৈশিষ্ট্য তালিকা
android.hardware.camera.any

অ্যাপটি ডিভাইসের নিজস্ব ক্যামেরাগুলোর একটি অথবা ডিভাইসের সাথে সংযুক্ত কোনো এক্সটার্নাল ক্যামেরা ব্যবহার করে। যদি আপনার অ্যাপের জন্য ক্যামেরাটিকে যথাক্রমে পেছনের (ওয়ার্ল্ড) দিকে বা সামনের (ইউজার) দিকে রাখার প্রয়োজন না হয়, তাহলে android.hardware.camera বা android.hardware.camera.front এর পরিবর্তে এই ফিচারটি ব্যবহার করুন।

CAMERA পারমিশনটি বোঝায় যে আপনার অ্যাপটি android.hardware.camera ও ব্যবহার করে। পেছনের ক্যামেরা একটি আবশ্যক বৈশিষ্ট্য, যদি না android.hardware.camera android:required="false" দিয়ে ঘোষণা করা হয়।

android.hardware.camera

অ্যাপটি ডিভাইসটির পেছনের (বাইরের দিকে মুখ করা) ক্যামেরা ব্যবহার করে।

সতর্কতা: ক্রোমবুকের মতো যেসব ডিভাইসে শুধুমাত্র সামনের (ব্যবহারকারীর দিকে থাকা) ক্যামেরা থাকে, সেগুলোতে এই ফিচারটি সাপোর্ট করে না। আপনার অ্যাপ যদি ক্যামেরার দিক নির্বিশেষে যেকোনো ক্যামেরা ব্যবহার করতে পারে, তাহলে android.hardware.camera.any ব্যবহার করুন।

দ্রষ্টব্য: CAMERA পারমিশনটি বোঝায় যে একটি ব্যাক ক্যামেরা থাকা আবশ্যক। আপনার অ্যাপ ম্যানিফেস্টে CAMERA পারমিশন অন্তর্ভুক্ত থাকলে Google Play-তে সঠিক ফিল্টারিং নিশ্চিত করতে, স্পষ্টভাবে উল্লেখ করুন যে আপনার অ্যাপটি camera ফিচারটি ব্যবহার করে এবং এটি আবশ্যক কিনা তাও নির্দেশ করুন, যেমন:
<uses-feature android:name="android.hardware.camera" android:required="false" />

android.hardware.camera.front

অ্যাপটি ডিভাইসটির সামনের (ব্যবহারকারীর দিকে থাকা) ক্যামেরা ব্যবহার করে।

CAMERA পারমিশনটি বোঝায় যে আপনার অ্যাপটি android.hardware.camera ও ব্যবহার করে। পেছনের ক্যামেরা একটি আবশ্যক বৈশিষ্ট্য, যদি না android.hardware.camera android:required="false" দিয়ে ঘোষণা করা হয়।

সতর্কতা: যদি আপনার অ্যাপ android.hardware.camera.front ব্যবহার করে কিন্তু android.required="false" দিয়ে স্পষ্টভাবে android.hardware.camera ঘোষণা না করে, তাহলে যেসব ডিভাইসে পেছনের ক্যামেরা নেই (যেমন ক্রোমবুক) সেগুলো গুগল প্লে দ্বারা ফিল্টার হয়ে যাবে। যদি আপনার অ্যাপ শুধুমাত্র সামনের ক্যামেরা আছে এমন ডিভাইস সমর্থন করে, তাহলে অপ্রয়োজনীয় ফিল্টারিং এড়াতে android.hardware.camera কে android.required="false" দিয়ে ঘোষণা করুন।

android.hardware.camera.external

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

CAMERA পারমিশনটি বোঝায় যে আপনার অ্যাপটি android.hardware.camera ও ব্যবহার করে। পেছনের ক্যামেরা একটি আবশ্যক বৈশিষ্ট্য, যদি না android.hardware.camera android:required="false" দিয়ে ঘোষণা করা হয়।

android.hardware.camera.autofocus

অ্যাপটি ডিভাইসটির ক্যামেরার অটোফোকাস ফিচারটি ব্যবহার করে।

দ্রষ্টব্য: CAMERA পারমিশনটি বোঝায় যে অটোফোকাস একটি আবশ্যক ফিচার। আপনার অ্যাপ ম্যানিফেস্টে CAMERA পারমিশন অন্তর্ভুক্ত থাকলে Google Play-তে সঠিক ফিল্টারিং নিশ্চিত করতে, স্পষ্টভাবে উল্লেখ করুন যে আপনার অ্যাপটি অটোফোকাস ফিচারটি ব্যবহার করে এবং এটি আবশ্যক কিনা তা নির্দেশ করুন, যেমন:
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> .

android.hardware.camera.flash

অ্যাপটি ডিভাইসটির ক্যামেরার ফ্ল্যাশ ফিচারটি ব্যবহার করে।

android.hardware.camera.capability.manual_post_processing

অ্যাপটি ডিভাইসের ক্যামেরা দ্বারা সমর্থিত MANUAL_POST_PROCESSING বৈশিষ্ট্যটি ব্যবহার করে।

এই ফিচারটি আপনার অ্যাপকে ক্যামেরার অটো হোয়াইট ব্যালেন্স কার্যকারিতা ওভাররাইড করার সুযোগ দেয়। এর জন্য android.colorCorrection.transform , android.colorCorrection.gains , এবং android.colorCorrection.mode হিসেবে TRANSFORM_MATRIX ব্যবহার করুন।

android.hardware.camera.capability.manual_sensor

অ্যাপটি ডিভাইসের ক্যামেরা দ্বারা সমর্থিত MANUAL_SENSOR বৈশিষ্ট্যটি ব্যবহার করে।

এই ফিচারে অটো এক্সপোজার লকিং ( android.control.aeLock ) এর সাপোর্ট রয়েছে, যার মাধ্যমে ক্যামেরার এক্সপোজার টাইম এবং সেনসিটিভিটি নির্দিষ্ট মানে স্থির থাকে।

android.hardware.camera.capability.raw

অ্যাপটি ডিভাইসটির ক্যামেরার RAW ফিচারটি ব্যবহার করে।

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

android.hardware.camera.level.full
অ্যাপটি ডিভাইসটির অন্তত একটি ক্যামেরার FULL লেভেলের ইমেজ ক্যাপচার সাপোর্ট ব্যবহার করে। FULL সাপোর্টের মধ্যে রয়েছে বার্স্ট-ক্যাপচার সুবিধা, প্রতি ফ্রেমের নিয়ন্ত্রণ এবং ম্যানুয়াল পোস্ট-প্রসেসিং নিয়ন্ত্রণ। INFO_SUPPORTED_HARDWARE_LEVEL_FULL দেখুন।

ডিভাইস UI হার্ডওয়্যার বৈশিষ্ট্য

android.hardware.type.automotive

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

দ্রষ্টব্য: এই ফিচারটির ব্যবহার এবং গাড়ির জন্য অ্যাপ তৈরির নির্দেশিকা সম্পর্কে আরও তথ্যের জন্য ‘গাড়িতে বিতরণ’ দেখুন।

android.hardware.type.television

(অপ্রচলিত; এর পরিবর্তে android.software.leanback ব্যবহার করুন।)

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

android.hardware.type.watch
অ্যাপটি ঘড়িতে এর ইউজার ইন্টারফেস দেখানোর জন্য ডিজাইন করা হয়েছে। ঘড়ি শরীরে, যেমন কব্জিতে পরা হয়। ডিভাইসটি ব্যবহার করার সময় ব্যবহারকারী এর খুব কাছাকাছি থাকেন।
android.hardware.type.pc

অ্যাপটি ক্রোমবুকে এর ইউজার ইন্টারফেস দেখানোর জন্য ডিজাইন করা হয়েছে। এই ফিচারটি মাউস এবং টাচপ্যাডের জন্য ইনপুট এমুলেশন নিষ্ক্রিয় করে দেয়, কারণ ক্রোমবুক মাউস এবং টাচপ্যাড হার্ডওয়্যার ব্যবহার করে। মাউস ইনপুট দেখুন।

দ্রষ্টব্য: এই এলিমেন্টটির জন্য required="false" সেট করুন; অন্যথায়, গুগল প্লে স্টোর আপনার অ্যাপটিকে ক্রোমবুক ছাড়া অন্য ডিভাইসের জন্য অনুপলব্ধ করে দেবে।

ফিঙ্গারপ্রিন্ট হার্ডওয়্যারের বৈশিষ্ট্য

android.hardware.fingerprint
অ্যাপটি ডিভাইসের বায়োমেট্রিক হার্ডওয়্যার ব্যবহার করে আঙুলের ছাপ শনাক্ত করে।

গেমপ্যাড হার্ডওয়্যারের বৈশিষ্ট্য

android.hardware.gamepad
অ্যাপটি ডিভাইসটি থেকে অথবা সংযুক্ত গেমপ্যাড থেকে গেম কন্ট্রোলারের ইনপুট গ্রহণ করে।

ইনফ্রারেড হার্ডওয়্যার বৈশিষ্ট্য

android.hardware.consumerir
অ্যাপটি সাধারণত অন্যান্য ভোক্তা-স্তরের ইনফ্রারেড (IR) ডিভাইসের সাথে যোগাযোগ করার জন্য ডিভাইসটির ইনফ্রারেড (IR) সক্ষমতা ব্যবহার করে।

অবস্থান হার্ডওয়্যার বৈশিষ্ট্য

android.hardware.location
অ্যাপটি অবস্থান নির্ধারণের জন্য ডিভাইসের এক বা একাধিক বৈশিষ্ট্য ব্যবহার করে, যেমন জিপিএস অবস্থান, নেটওয়ার্ক অবস্থান বা সেল অবস্থান।
android.hardware.location.gps

অ্যাপটি ডিভাইসে থাকা গ্লোবাল পজিশনিং সিস্টেম (GPS) রিসিভার থেকে প্রাপ্ত সুনির্দিষ্ট অবস্থান স্থানাঙ্ক ব্যবহার করে।

এই ফিচারটি ব্যবহার করার মাধ্যমে একটি অ্যাপ বোঝায় যে এটি android.hardware.location ফিচারটিও ব্যবহার করে, যদি না এই প্যারেন্ট ফিচারটি android:required="false" অ্যাট্রিবিউট দিয়ে ডিক্লেয়ার করা থাকে।

android.hardware.location.network

অ্যাপটি ডিভাইসে সমর্থিত নেটওয়ার্ক-ভিত্তিক জিওলোকেশন সিস্টেম থেকে প্রাপ্ত স্থূল অবস্থান স্থানাঙ্ক ব্যবহার করে।

এই ফিচারটি ব্যবহার করার মাধ্যমে একটি অ্যাপ বোঝায় যে এটি android.hardware.location ফিচারটিও ব্যবহার করে, যদি না এই প্যারেন্ট ফিচারটি android:required="false" অ্যাট্রিবিউট দিয়ে ডিক্লেয়ার করা থাকে।

NFC হার্ডওয়্যার বৈশিষ্ট্য

android.hardware.nfc
অ্যাপটি ডিভাইসটির নিয়ার-ফিল্ড কমিউনিকেশন (NFC) রেডিও বৈশিষ্ট্য ব্যবহার করে।
android.hardware.nfc.hce

অ্যাপটি ডিভাইসে হোস্ট করা এনএফসি কার্ড এমুলেশন ব্যবহার করে।

OpenGL ES হার্ডওয়্যারের বৈশিষ্ট্য

android.hardware.opengles.aep
অ্যাপটি ডিভাইসে ইনস্টল করা OpenGL ES অ্যান্ড্রয়েড এক্সটেনশন প্যাকটি ব্যবহার করে।

সেন্সর হার্ডওয়্যারের বৈশিষ্ট্য

android.hardware.sensor.accelerometer
অ্যাপটি ডিভাইসের অ্যাক্সেলেরোমিটার থেকে পাওয়া গতির রিডিং ব্যবহার করে ডিভাইসটির বর্তমান ওরিয়েন্টেশন শনাক্ত করে। উদাহরণস্বরূপ, একটি অ্যাপ পোর্ট্রেট এবং ল্যান্ডস্কেপ ওরিয়েন্টেশনের মধ্যে কখন পরিবর্তন করতে হবে তা নির্ধারণ করতে অ্যাক্সেলেরোমিটারের রিডিং ব্যবহার করতে পারে।
android.hardware.sensor.ambient_temperature
অ্যাপটি ডিভাইসের পারিপার্শ্বিক তাপমাত্রা সেন্সর ব্যবহার করে। উদাহরণস্বরূপ, একটি আবহাওয়া অ্যাপ ঘরের ভেতরের বা বাইরের তাপমাত্রা জানাতে পারে।
android.hardware.sensor.barometer
অ্যাপটি ডিভাইসের ব্যারোমিটার ব্যবহার করে। উদাহরণস্বরূপ, একটি আবহাওয়া অ্যাপ বায়ুর চাপ জানাতে পারে।
android.hardware.sensor.compass
অ্যাপটি ডিভাইসের ম্যাগনেটোমিটার (কম্পাস) ব্যবহার করে। উদাহরণস্বরূপ, একটি নেভিগেশন অ্যাপ ব্যবহারকারীর বর্তমান দিক দেখাতে পারে।
android.hardware.sensor.gyroscope
অ্যাপটি ডিভাইসের জাইরোস্কোপ ব্যবহার করে ঘূর্ণন এবং মোচড় শনাক্ত করে একটি ছয়-অক্ষীয় ওরিয়েন্টেশন সিস্টেম তৈরি করে। এই সেন্সরটি ব্যবহার করে, একটি অ্যাপ আরও মসৃণভাবে শনাক্ত করতে পারে কখন পোর্ট্রেট এবং ল্যান্ডস্কেপ ওরিয়েন্টেশনের মধ্যে পরিবর্তন করতে হবে।
android.hardware.sensor.hifi_sensors
অ্যাপটি ডিভাইসটির হাই ফিডেলিটি (হাই-ফাই) সেন্সর ব্যবহার করে। উদাহরণস্বরূপ, একটি গেমিং অ্যাপ ব্যবহারকারীর অত্যন্ত সূক্ষ্ম নড়াচড়া শনাক্ত করতে পারে।
android.hardware.sensor.heartrate
অ্যাপটি ডিভাইসের হার্ট রেট মনিটর ব্যবহার করে। উদাহরণস্বরূপ, একটি ফিটনেস অ্যাপ সময়ের সাথে সাথে একজন ব্যবহারকারীর হার্ট রেটের প্রবণতা সম্পর্কে জানাতে পারে।
android.hardware.sensor.heartrate.ecg
অ্যাপটি ডিভাইসের ইলেকট্রোকার্ডিওগ্রাম (ইসিজি) হার্ট রেট সেন্সর ব্যবহার করে। উদাহরণস্বরূপ, একটি ফিটনেস অ্যাপ ব্যবহারকারীর হার্ট রেট সম্পর্কে আরও বিস্তারিত তথ্য জানাতে পারে।
android.hardware.sensor.light
অ্যাপটি ডিভাইসের লাইট সেন্সর ব্যবহার করে। উদাহরণস্বরূপ, একটি অ্যাপ পারিপার্শ্বিক আলোর অবস্থার উপর ভিত্তি করে দুটি কালার স্কিমের মধ্যে একটি প্রদর্শন করতে পারে।
android.hardware.sensor.proximity
অ্যাপটি ডিভাইসটির প্রক্সিমিটি সেন্সর ব্যবহার করে। উদাহরণস্বরূপ, একটি টেলিফোনি অ্যাপ ডিভাইসটির স্ক্রিন বন্ধ করে দিতে পারে যখন অ্যাপটি শনাক্ত করে যে ব্যবহারকারী ডিভাইসটি তার শরীরের কাছাকাছি ধরে রেখেছেন।
android.hardware.sensor.relative_humidity
অ্যাপটি ডিভাইসের আপেক্ষিক আর্দ্রতা সেন্সর ব্যবহার করে। উদাহরণস্বরূপ, একটি আবহাওয়া অ্যাপ বর্তমান শিশিরবিন্দু গণনা করে তা জানানোর জন্য আর্দ্রতা ব্যবহার করতে পারে।
android.hardware.sensor.stepcounter
অ্যাপটি ডিভাইসের স্টেপ কাউন্টার ব্যবহার করে। উদাহরণস্বরূপ, একটি ফিটনেস অ্যাপ জানাতে পারে যে একজন ব্যবহারকারীকে তার দৈনিক স্টেপ কাউন্টের লক্ষ্য অর্জন করতে কতগুলো পদক্ষেপ নিতে হবে।
android.hardware.sensor.stepdetector
অ্যাপটি ডিভাইসের স্টেপ ডিটেক্টর ব্যবহার করে। উদাহরণস্বরূপ, একটি ফিটনেস অ্যাপ ব্যবহারকারীর করা ব্যায়ামের ধরন অনুমান করার জন্য প্রতিটি পদক্ষেপের মধ্যবর্তী সময়ের ব্যবধান ব্যবহার করতে পারে।

স্ক্রিন হার্ডওয়্যার বৈশিষ্ট্য

android.hardware.screen.landscape
android.hardware.screen.portrait

অ্যাপটির জন্য ডিভাইসটিকে পোর্ট্রেট বা ল্যান্ডস্কেপ ওরিয়েন্টেশনে থাকতে হবে। যদি আপনার অ্যাপ উভয় ওরিয়েন্টেশনই সমর্থন করে, তাহলে আপনাকে কোনো বৈশিষ্ট্যই ঘোষণা করার প্রয়োজন নেই।

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

<uses-feature android:name="android.hardware.screen.portrait" />

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

উদাহরণস্বরূপ, যদি আপনি android:screenOrientation"landscape" , "reverseLandscape" বা "sensorLandscape" ব্যবহার করেন, তাহলে আপনার অ্যাপটি শুধুমাত্র ল্যান্ডস্কেপ ওরিয়েন্টেশন সমর্থনকারী ডিভাইসগুলিতেই উপলব্ধ হবে।

একটি উত্তম অনুশীলন হিসেবে, একটি <uses-feature> এলিমেন্ট ব্যবহার করে এই ওরিয়েন্টেশনের জন্য আপনার প্রয়োজনীয়তা ঘোষণা করুন। যদি আপনি android:screenOrientation ব্যবহার করে আপনার অ্যাক্টিভিটির জন্য একটি ওরিয়েন্টেশন ঘোষণা করেন কিন্তু বাস্তবে সেটির প্রয়োজন না থাকে, তাহলে আপনি একটি <uses-feature> এলিমেন্ট দিয়ে ওরিয়েন্টেশনটি ঘোষণা করে এবং android:required="false" অন্তর্ভুক্ত করে এই প্রয়োজনীয়তাটি নিষ্ক্রিয় করতে পারেন।

পূর্ববর্তী সংস্করণের সাথে সামঞ্জস্যতার জন্য, অ্যান্ড্রয়েড ৩.১ (এপিআই লেভেল ১২) বা তার নিম্নতর সংস্করণে চালিত যেকোনো ডিভাইস ল্যান্ডস্কেপ এবং পোর্ট্রেট উভয় ওরিয়েন্টেশনই সমর্থন করে।

টেলিফোনি হার্ডওয়্যারের বৈশিষ্ট্য

android.hardware.telephony
অ্যাপটি ডিভাইসের টেলিফোনি বৈশিষ্ট্যগুলো ব্যবহার করে, যেমন ডেটা কমিউনিকেশন পরিষেবা সহ টেলিফোনি রেডিও।
android.hardware.telephony.cdma

অ্যাপটি কোড ডিভিশন মাল্টিপল অ্যাক্সেস (সিডিএমএ) টেলিফোনি রেডিও সিস্টেম ব্যবহার করে।

এই ফিচারটি ব্যবহার করার মাধ্যমে একটি অ্যাপ বোঝায় যে এটি android.hardware.telephony ফিচারটিও ব্যবহার করে, যদি না এই প্যারেন্ট ফিচারটি android:required="false" দিয়ে ডিক্লেয়ার করা থাকে।

android.hardware.telephony.gsm

অ্যাপটি গ্লোবাল সিস্টেম ফর মোবাইল কমিউনিকেশনস (জিএসএম) টেলিফোনি রেডিও সিস্টেম ব্যবহার করে।

এই ফিচারটি ব্যবহার করার মাধ্যমে একটি অ্যাপ বোঝায় যে এটি android.hardware.telephony ফিচারটিও ব্যবহার করে, যদি না এই প্যারেন্ট ফিচারটি android:required="false" দিয়ে ডিক্লেয়ার করা থাকে।

টাচস্ক্রিন হার্ডওয়্যার বৈশিষ্ট্য

android.hardware.faketouch

অ্যাপটি ট্যাপ করা এবং ড্র্যাগ করার মতো সাধারণ টাচ ইন্টারঅ্যাকশন ইভেন্টগুলো ব্যবহার করে।

যখন আবশ্যক হিসেবে ঘোষণা করা হয়, তখন এই বৈশিষ্ট্যটি বোঝায় যে অ্যাপটি কোনো ডিভাইসের সাথে কেবল তখনই সামঞ্জস্যপূর্ণ হবে, যদি সেই ডিভাইসটিতে একটি অনুকৃত "নকল স্পর্শ" টাচস্ক্রিন বা একটি প্রকৃত টাচস্ক্রিন থাকে।

যে ডিভাইস নকল টাচ ইন্টারফেস প্রদান করে, তা এমন একটি ইউজার ইনপুট সিস্টেম সরবরাহ করে যা টাচস্ক্রিনের ক্ষমতার একটি উপসেটকে অনুকরণ করে। উদাহরণস্বরূপ, একটি মাউস বা রিমোট কন্ট্রোল স্ক্রিনের কার্সারটিকে চালনা করতে পারে।

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

অ্যাপগুলির জন্য ডিফল্টরূপে android.hardware.faketouch ফিচারটি প্রয়োজন হয়। যদি আপনি চান যে আপনার অ্যাপটি শুধুমাত্র টাচস্ক্রিনযুক্ত ডিভাইসের মধ্যে সীমাবদ্ধ থাকুক, তাহলে আপনাকে নিম্নলিখিতভাবে স্পষ্টভাবে ঘোষণা করতে হবে যে টাচস্ক্রিন প্রয়োজন:

<uses-feature android:name="android.hardware.touchscreen"
    android:required="true" />

নিচের উদাহরণে দেখানো অনুযায়ী, যে সমস্ত অ্যাপের জন্য স্পষ্টভাবে android.hardware.touchscreen প্রয়োজন হয় না, সেগুলি android.hardware.faketouch যুক্ত ডিভাইসেও কাজ করে।

<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
android.hardware.faketouch.multitouch.distinct

অ্যাপটি একটি নকল টাচ ইন্টারফেসে দুই বা ততোধিক স্বতন্ত্র 'আঙুল' ট্র্যাক করে। এটি android.hardware.faketouch ফিচারের একটি সুপারসেট। যখন এটিকে আবশ্যক হিসেবে ঘোষণা করা হয়, তখন এই ফিচারটি নির্দেশ করে যে অ্যাপটি কোনো ডিভাইসের সাথে কেবল তখনই সামঞ্জস্যপূর্ণ হবে, যদি সেই ডিভাইসটি দুই বা ততোধিক আঙুলের স্বতন্ত্র ট্র্যাকিং অনুকরণ করে অথবা সেটিতে একটি প্রকৃত টাচস্ক্রিন থাকে।

android.hardware.touchscreen.multitouch.distinct দ্বারা সংজ্ঞায়িত স্বতন্ত্র মাল্টিটাচের বিপরীতে, যে ইনপুট ডিভাইসগুলো একটি নকল টাচ ইন্টারফেসের মাধ্যমে স্বতন্ত্র মাল্টিটাচ সমর্থন করে, সেগুলো সব দুই-আঙুলের অঙ্গভঙ্গি সমর্থন করে না, কারণ ইনপুটটি স্ক্রিনে কার্সার চলাচলে রূপান্তরিত হয়। অর্থাৎ, এই ধরনের ডিভাইসে এক-আঙুলের অঙ্গভঙ্গি কার্সার নাড়ায়, দুই-আঙুলের সোয়াইপ এক-আঙুলের টাচ ইভেন্ট ঘটায়, এবং অন্যান্য দুই-আঙুলের অঙ্গভঙ্গি সংশ্লিষ্ট দুই-আঙুলের টাচ ইভেন্টগুলোকে সক্রিয় করে।

যে ডিভাইসে কার্সার নাড়াচাড়ার জন্য দুই আঙুলের টাচ ট্র্যাকপ্যাড থাকে, সেটি এই বৈশিষ্ট্যটি সমর্থন করতে পারে।

android.hardware.faketouch.multitouch.jazzhand

The app tracks five or more distinct "fingers" on a fake touch interface. This is a superset of the android.hardware.faketouch feature. When declared as required, this feature indicates that the app is compatible with a device only if that device emulates distinct tracking of five or more fingers or has an actual touchscreen.

Unlike the distinct multitouch defined by android.hardware.touchscreen.multitouch.jazzhand , input devices that support jazzhand multitouch with a fake touch interface don't support all five-finger gestures, because the input is transformed to cursor movement on the screen. That is, single-finger gestures on such a device move a cursor, multi-finger gestures cause single-finger touch events to occur, and other multi-finger gestures trigger the corresponding multi-finger touch events.

A device that provides a five-finger touch trackpad for cursor movement can support this feature.

android.hardware.touchscreen

The app uses the device's touchscreen capabilities for gestures that are more interactive than basic touch events, such as a fling. This is a superset of the android.hardware.faketouch feature.

By default, all apps require this feature and therefore aren't available to devices that provide only an emulated "fake touch" interface. You can make your app available on devices that provide a fake touch interface, or even on devices that provide only a D-pad controller, by explicitly declaring that a touchscreen is not required using android.hardware.touchscreen with android:required="false" . Add this declaration if your app uses, but doesn't require, a real touchscreen interface. All apps that don't explicitly require android.hardware.touchscreen also work on devices with android.hardware.faketouch .

If your app in fact requires a touch interface, such as to perform more advanced touch gestures like flings, then you don't need to declare any touch interface features, because they're required by default. However, it's best if you explicitly declare all features that your app uses.

If you require more complex touch interaction, such as multi-finger gestures, declare that your app uses advanced touchscreen features.

android.hardware.touchscreen.multitouch

The app uses the device's basic two-point multitouch capabilities, such as for pinch gestures, but the app doesn't need to track touches independently. This is a superset of the android.hardware.touchscreen feature.

By using this feature, an app implies that it also uses the android.hardware.touchscreen feature, unless this parent feature is declared with android:required="false" .

android.hardware.touchscreen.multitouch.distinct

The app uses the device's advanced multitouch capabilities for tracking two or more points independently. This feature is a superset of the android.hardware.touchscreen.multitouch feature.

By using this feature, an app implies that it also uses the android.hardware.touchscreen.multitouch feature, unless this parent feature is declared with android:required="false" .

android.hardware.touchscreen.multitouch.jazzhand

The app uses the device's advanced multitouch capabilities for tracking five or more points independently. This feature is a superset of the android.hardware.touchscreen.multitouch feature.

By using this feature, an app implies that it also uses the android.hardware.touchscreen.multitouch feature, unless this parent feature is declared with android:required="false" .

USB hardware features

android.hardware.usb.accessory
The app behaves as a USB device and connects to USB hosts.
android.hardware.usb.host
The app uses the USB accessories that are connected to the device. The device serves as the USB host.

Vulkan hardware features

android.hardware.vulkan.compute
The app uses Vulkan compute features. This feature indicates that the app requires the hardware-accelerated Vulkan implementation. The feature version indicates which level of optional compute features the app requires beyond the Vulkan 1.0 requirements. For example, if your app requires Vulkan compute level 0 support, declare the following feature:
<uses-feature
    android:name="android.hardware.vulkan.compute"
    android:version="0"
    android:required="true" />
For more details about the feature version, see FEATURE_VULKAN_HARDWARE_COMPUTE .
android.hardware.vulkan.level
The app uses Vulkan level features. This feature indicates that the app requires the hardware-accelerated Vulkan implementation. The feature version indicates which level of optional hardware features the app requires. For example, if your app requires Vulkan hardware level 0 support, declare the following feature:
<uses-feature
    android:name="android.hardware.vulkan.level"
    android:version="0"
    android:required="true" />
For more information about the feature version, see FEATURE_VULKAN_HARDWARE_LEVEL .
android.hardware.vulkan.version
The app uses Vulkan. This feature indicates that the app requires the hardware-accelerated Vulkan implementation. The feature version indicates the minimum version of Vulkan API support the app requires. For example, if your app requires Vulkan 1.0 support, declare the following feature:
<uses-feature
    android:name="android.hardware.vulkan.version"
    android:version="0x400003"
    android:required="true" />
For more details about the feature version, see FEATURE_VULKAN_HARDWARE_VERSION .

Wi-Fi hardware features

android.hardware.wifi
The app uses 802.11 networking (Wi-Fi) features on the device.
android.hardware.wifi.direct
The app uses the Wi-Fi Direct networking features on the device.

Software features

This section presents the software features supported by the most current platform release. To indicate that your app uses or requires a software feature, declare the corresponding value, beginning with "android.software" , in an android:name attribute. Each time you declare a software feature, use a separate <uses-feature> element.

Communication software features

android.software.sip
The app uses Session Initiation Protocol (SIP) services. By using SIP, the app can support internet telephony operations, such as video conferencing and instant messaging.
android.software.sip.voip

The app uses SIP-based Voice Over Internet Protocol (VoIP) services. By using VoIP, the app can support real-time internet telephony operations, such as two-way video conferencing.

By using this feature, an app implies that it also uses the android.software.sip feature, unless this parent feature is declared with android:required="false" .

android.software.webview
The app displays content from the internet.

Custom input software features

android.software.input_methods
The app uses a new input method, which the developer defines in an InputMethodService .

Device management software features

android.software.backup
The app includes logic to handle a backup and restore operation.
android.software.device_admin
The app uses device administrators to enforce a device policy.
android.software.managed_users
The app supports secondary users and managed profiles.
android.software.securely_removes_users
The app can permanently remove users and their associated data.
android.software.verified_boot
The app includes logic to handle results from the device's verified boot feature, which detects whether the device's configuration changes during a restart operation.

Media software features

android.software.midi
The app connects to musical instruments or outputs sound using the Musical Instrument Digital Interface (MIDI) protocol.
android.software.print
The app includes commands for printing documents displayed on the device.
android.software.leanback
The app is designed to run on Android TV devices.
android.software.live_tv
The app streams live television programs.

Screen interface software features

android.software.app_widgets
The app uses or provides App Widgets and is intended only for devices that include a Home screen or similar location where users can embed App Widgets.
android.software.home_screen
The app behaves as a replacement to the device's Home screen.
android.software.live_wallpaper
The app uses or provides wallpapers that include animation.

Permissions that imply feature requirements

Some hardware and software feature constants are made available to applications after the corresponding API. Because of this, some apps might use the API before they can declare that they require the API using the <uses-feature> system.

To prevent those apps from being made available unintentionally, Google Play assumes that certain hardware-related permissions indicate that the underlying hardware features are required by default. For instance, applications that use Bluetooth must request the BLUETOOTH permission in a <uses-permission> element.

For legacy apps, Google Play assumes that the permission declaration means that the underlying android.hardware.bluetooth feature is required by the application and sets up filtering based on that feature. Table 2 lists permissions that imply feature requirements equivalent to those declared in <uses-feature> elements.

<uses-feature> declarations, including any declared android:required attribute, always take precedence over features implied by the permissions in table 2. For any of these permissions, you can disable filtering based on the implied feature by explicitly declaring the feature in a <uses-feature> element with the required attribute set to false .

For example, to disable filtering based on the CAMERA permission, add the following <uses-feature> declarations to the manifest file:

<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

Caution: If your app targets Android 5.0 (API level 21) or higher and uses the ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to receive location updates from the network or a GPS, respectively, you must also explicitly declare that your app uses the android.hardware.location.network or android.hardware.location.gps hardware features.

Table 2. Device permissions that imply device hardware use.

বিভাগ অনুমতি Implied feature requirement
ব্লুটুথ BLUETOOTH android.hardware.bluetooth

See Special handling for Bluetooth feature for details.

BLUETOOTH_ADMIN android.hardware.bluetooth
ক্যামেরা CAMERA android.hardware.camera
android.hardware.camera.autofocus
অবস্থান ACCESS_MOCK_LOCATION android.hardware.location
ACCESS_LOCATION_EXTRA_COMMANDS android.hardware.location
INSTALL_LOCATION_PROVIDER android.hardware.location
ACCESS_COARSE_LOCATION

android.hardware.location

android.hardware.location.network (Only when target API level is 20 or lower.)

ACCESS_FINE_LOCATION

android.hardware.location

android.hardware.location.gps (Only when target API level is 20 or lower.)

মাইক্রোফোন RECORD_AUDIO android.hardware.microphone
টেলিফোনি CALL_PHONE android.hardware.telephony
CALL_PRIVILEGED android.hardware.telephony
MODIFY_PHONE_STATE android.hardware.telephony
PROCESS_OUTGOING_CALLS android.hardware.telephony
READ_SMS android.hardware.telephony
RECEIVE_SMS android.hardware.telephony
RECEIVE_MMS android.hardware.telephony
RECEIVE_WAP_PUSH android.hardware.telephony
SEND_SMS android.hardware.telephony
WRITE_APN_SETTINGS android.hardware.telephony
WRITE_SMS android.hardware.telephony
ওয়াই-ফাই ACCESS_WIFI_STATE android.hardware.wifi
CHANGE_WIFI_STATE android.hardware.wifi
CHANGE_WIFI_MULTICAST_STATE android.hardware.wifi