<uses-feature>

گوگل پلی از عناصر <uses-feature> که در مانیفست برنامه شما تعریف شده‌اند، برای فیلتر کردن برنامه شما از دستگاه‌هایی که الزامات سخت‌افزاری و نرم‌افزاری آن را برآورده نمی‌کنند، استفاده می‌کند.

با مشخص کردن ویژگی‌هایی که برنامه شما نیاز دارد، شما به گوگل پلی این امکان را می‌دهید که برنامه شما را فقط به کاربرانی که دستگاه‌هایشان الزامات ویژگی‌های برنامه را برآورده می‌کنند، ارائه دهد، نه اینکه آن را به همه کاربران ارائه دهد.

برای اطلاعات مهم در مورد نحوه استفاده گوگل پلی از ویژگی‌ها به عنوان مبنای فیلترینگ، به بخش گوگل پلی و فیلترینگ مبتنی بر ویژگی مراجعه کنید.

برای اطلاعات بیشتر در مورد اعلام ویژگی‌ها در برنامه‌هایتان، به بخش افزایش دسترسی‌پذیری برنامه در انواع دستگاه‌ها مراجعه کنید.

نحو:
<uses-feature
  android:name="string"
  android:required=["true" | "false"]
  android:glEsVersion="integer" />
مندرج در:
<manifest>
شرح:

یک ویژگی سخت‌افزاری یا نرم‌افزاری واحد را که توسط برنامه استفاده می‌شود، اعلام می‌کند.

هدف از تعریف <uses-feature> ، آگاه کردن هر موجودیت خارجی از مجموعه‌ای از ویژگی‌های سخت‌افزاری و نرم‌افزاری است که برنامه شما به آنها وابسته است. این عنصر یک ویژگی required ارائه می‌دهد که به شما امکان می‌دهد مشخص کنید که آیا برنامه شما به ویژگی اعلام شده نیاز دارد و نمی‌تواند بدون آن کار کند یا ترجیح می‌دهد ویژگی را داشته باشد اما بدون آن نیز بتواند کار کند.

از آنجا که پشتیبانی از ویژگی‌ها می‌تواند در دستگاه‌های اندروید متفاوت باشد، عنصر <uses-feature> نقش مهمی در توصیف ویژگی‌های متغیر دستگاه مورد استفاده توسط یک برنامه ایفا می‌کند.

مجموعه ویژگی‌های موجود که برنامه شما اعلام می‌کند، مطابق با مجموعه ثابت‌های ویژگی است که توسط Android 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> فقط برای دستگاه‌هایی که API سطح ۴ یا بالاتر را اجرا می‌کنند فعال است، اما این عناصر را برای همه برنامه‌ها، حتی اگر minSdkVersion 3 یا پایین‌تر باشد، لحاظ کنید. دستگاه‌هایی که نسخه‌های قدیمی‌تر پلتفرم را اجرا می‌کنند، این عنصر را نادیده می‌گیرند.

نکته: هنگام اعلام یک ویژگی، به یاد داشته باشید که باید مجوزهای مربوطه را نیز درخواست کنید. به عنوان مثال، قبل از اینکه برنامه شما بتواند به API دوربین دسترسی پیدا کند، باید مجوز CAMERA را درخواست کنید. درخواست این مجوز، دسترسی برنامه شما به سخت‌افزار و نرم‌افزار مناسب را فراهم می‌کند. اعلام ویژگی‌های مورد استفاده برنامه شما به اطمینان از سازگاری مناسب دستگاه کمک می‌کند.

ویژگی‌ها:
android:name
یک ویژگی سخت‌افزاری یا نرم‌افزاری واحد را که توسط برنامه به عنوان یک رشته توصیف‌گر استفاده می‌شود، مشخص می‌کند. مقادیر معتبر ویژگی در بخش‌های ویژگی‌های سخت‌افزاری و ویژگی‌های نرم‌افزاری فهرست شده‌اند. این مقادیر ویژگی به حروف کوچک و بزرگ حساس هستند.
android:required
مقداری بولی که نشان می‌دهد آیا برنامه به ویژگی مشخص شده در android:name نیاز دارد یا خیر.
  • اعلام android:required="true" برای یک ویژگی نشان می‌دهد که برنامه نمی‌تواند کار کند، یا برای کار کردن طراحی نشده است ، زمانی که ویژگی مشخص شده در دستگاه وجود ندارد.
  • اعلام android:required="false" برای یک ویژگی نشان می‌دهد که برنامه در صورت وجود آن ویژگی در دستگاه، از آن استفاده می‌کند ، اما در صورت لزوم طوری طراحی شده است که بدون آن ویژگی مشخص شده نیز کار کند .

مقدار پیش‌فرض برای android:required "true" است.

android:glEsVersion
نسخه OpenGL ES مورد نیاز برنامه. 16 بیت بالاتر نشان دهنده عدد اصلی و 16 بیت پایین تر نشان دهنده عدد فرعی هستند. برای مثال، برای مشخص کردن OpenGL ES نسخه 2.0، مقدار "0x00020000" را تنظیم می‌کنید، یا برای مشخص کردن OpenGL ES 3.2، مقدار "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 پشتیبانی شده در زمان اجرا، به راهنمای API OpenGL ES مراجعه کنید.

معرفی شده در:
API سطح ۴
همچنین ببینید:

گوگل پلی و فیلترینگ مبتنی بر ویژگی

گوگل پلی برنامه‌هایی را که برای کاربران قابل مشاهده هستند فیلتر می‌کند تا کاربران بتوانند فقط برنامه‌هایی را که با دستگاهشان سازگار هستند، ببینند و دانلود کنند. یکی از راه‌های فیلتر کردن برنامه‌ها، سازگاری ویژگی‌ها است.

برای تعیین سازگاری ویژگی‌های یک برنامه با دستگاه کاربر، گوگل پلی موارد زیر را مقایسه می‌کند:

  • ویژگی‌های مورد نیاز برنامه، همانطور که در عناصر <uses-feature> در مانیفست برنامه اعلام شده است.
  • ویژگی‌های موجود در دستگاه، در سخت‌افزار یا نرم‌افزار، همانطور که با استفاده از ویژگی‌های سیستم فقط خواندنی گزارش شده است.

برای مقایسه دقیق ویژگی‌ها، Android Package Manager مجموعه‌ای مشترک از ثابت‌های ویژگی را ارائه می‌دهد که هم برنامه‌ها و هم دستگاه‌ها برای اعلام الزامات و پشتیبانی از ویژگی‌ها از آنها استفاده می‌کنند. ثابت‌های ویژگی موجود در بخش مرجع ویژگی‌ها در این سند و در مستندات کلاس PackageManager فهرست شده‌اند.

وقتی کاربر گوگل پلی را اجرا می‌کند، برنامه با فراخوانی getSystemAvailableFeatures() از مدیر بسته، فهرست ویژگی‌های موجود در دستگاه را درخواست می‌کند. سپس برنامه فروشگاه هنگام ایجاد جلسه برای کاربر، فهرست ویژگی‌ها را به گوگل پلی ارسال می‌کند.

هر بار که برنامه‌ای را در کنسول گوگل پلی آپلود می‌کنید، گوگل پلی فایل مانیفست برنامه را اسکن می‌کند. این فایل به دنبال عناصر <uses-feature> می‌گردد و آنها را در ترکیب با عناصر دیگر، در برخی موارد، مانند عناصر <uses-sdk> و <uses-permission> ارزیابی می‌کند. پس از تعیین مجموعه ویژگی‌های مورد نیاز برنامه، آن لیست را به صورت داخلی به عنوان فراداده مرتبط با APK برنامه و نسخه برنامه ذخیره می‌کند.

وقتی کاربری با استفاده از برنامه گوگل پلی به دنبال برنامه‌ها می‌گردد، این سرویس ویژگی‌های مورد نیاز هر برنامه را با ویژگی‌های موجود در دستگاه کاربر مقایسه می‌کند. اگر همه ویژگی‌های مورد نیاز یک برنامه در دستگاه موجود باشد، گوگل پلی به کاربر اجازه می‌دهد برنامه را ببیند و احتمالاً آن را دانلود کند.

اگر هر یک از ویژگی‌های مورد نیاز توسط دستگاه پشتیبانی نشود، گوگل پلی برنامه را فیلتر می‌کند تا برای کاربر قابل مشاهده یا برای دانلود در دسترس نباشد.

از آنجا که ویژگی‌هایی که در عناصر <uses-feature> تعریف می‌کنید، مستقیماً بر نحوه فیلتر کردن برنامه شما توسط گوگل پلی تأثیر می‌گذارند، درک نحوه ارزیابی مانیفست برنامه توسط گوگل پلی و تعیین مجموعه ویژگی‌های مورد نیاز، مهم است. بخش‌های بعدی اطلاعات بیشتری ارائه می‌دهند.

فیلتر کردن بر اساس ویژگی‌های صریحاً اعلام‌شده

یک ویژگی که به طور صریح اعلام شده باشد، ویژگی‌ای است که برنامه شما آن را در یک عنصر <uses-feature> اعلام می‌کند. اگر در حال کامپایل کردن با API سطح ۵ یا بالاتر هستید، اعلان ویژگی می‌تواند شامل یک ویژگی android:required=["true" | "false"] باشد.

این به شما امکان می‌دهد مشخص کنید که آیا برنامه به این ویژگی نیاز دارد و بدون آن نمی‌تواند به درستی کار کند ( "true" ) یا در صورت وجود از این ویژگی استفاده می‌کند، اما برای اجرا بدون آن طراحی شده است ( "false" ).

گوگل پلی ویژگی‌هایی که به صراحت اعلام شده‌اند را به این روش مدیریت می‌کند:

  • اگر یک ویژگی به صراحت به عنوان مورد نیاز اعلام شود، همانطور که در مثال زیر نشان داده شده است، گوگل پلی آن ویژگی را به لیست ویژگی‌های مورد نیاز برنامه اضافه می‌کند. سپس برنامه را از دسترس کاربرانی که دستگاه‌هایی با آن ویژگی ندارند، فیلتر می‌کند.
    <uses-feature android:name="android.hardware.camera.any" android:required="true" />
  • اگر یک ویژگی به صراحت به عنوان غیر ضروری اعلام شود، همانطور که در مثال زیر نشان داده شده است، گوگل پلی آن ویژگی را به لیست ویژگی‌های ضروری اضافه نمی‌کند . به همین دلیل، یک ویژگی غیر ضروری که به صراحت اعلام شده باشد، هرگز هنگام فیلتر کردن برنامه در نظر گرفته نمی‌شود. حتی اگر دستگاه ویژگی اعلام شده را ارائه ندهد، گوگل پلی همچنان برنامه را با دستگاه سازگار می‌داند و آن را به کاربر نشان می‌دهد، مگر اینکه قوانین فیلتر دیگری اعمال شود.
    <uses-feature android:name="android.hardware.camera" android:required="false" />
  • اگر یک ویژگی به صراحت اعلام شود، اما بدون ویژگی android:required ، گوگل پلی فرض می‌کند که این ویژگی الزامی است و فیلترینگ را روی آن تنظیم می‌کند.

به طور کلی، اگر برنامه شما برای اجرا روی اندروید ۱.۶ و پایین‌تر طراحی شده باشد، ویژگی android:required در API موجود نیست و گوگل پلی فرض می‌کند که تمام اعلان‌های <uses-feature> الزامی هستند.

نکته: با تعریف صریح یک ویژگی و گنجاندن ویژگی android:required="false" ، می‌توانید عملاً تمام فیلترهای گوگل پلی را برای ویژگی مشخص شده غیرفعال کنید.

فیلتر بر اساس ویژگی‌های ضمنی

یک ویژگی ضمنی ، ویژگی‌ای است که یک برنامه برای عملکرد صحیح به آن نیاز دارد، اما در عنصر <uses-feature> در فایل مانیفست اعلان نشده است. به طور دقیق، بهتر است هر برنامه‌ای همیشه تمام ویژگی‌هایی را که استفاده می‌کند یا به آنها نیاز دارد اعلان کند و عدم اعلان یک ویژگی مورد استفاده توسط یک برنامه می‌تواند یک خطا تلقی شود.

با این حال، به عنوان یک اقدام حفاظتی برای کاربران و توسعه‌دهندگان، گوگل پلی در هر برنامه به دنبال ویژگی‌های ضمنی می‌گردد و فیلترهایی را برای آن ویژگی‌ها تنظیم می‌کند، همانطور که برای ویژگی‌های صریحاً اعلام شده نیز این کار را انجام می‌دهد.

یک برنامه ممکن است به یک ویژگی نیاز داشته باشد اما به دلایلی مانند موارد زیر آن را اعلام نکند:

  • این برنامه با استفاده از نسخه قدیمی‌تر کتابخانه اندروید (اندروید ۱.۵ یا قبل از آن) کامپایل شده است، که عنصر <uses-feature> برای آن در دسترس نیست.
  • توسعه‌دهنده به اشتباه فرض می‌کند که این ویژگی در همه دستگاه‌ها وجود دارد و نیازی به اعلام آن نیست.
  • توسعه‌دهنده به‌طور تصادفی اعلان ویژگی را حذف می‌کند.
  • توسعه‌دهنده، ویژگی را به صراحت اعلام می‌کند، اما این اعلام معتبر نیست. برای مثال، یک خطای املایی در نام عنصر <uses-feature> یا یک مقدار رشته‌ای ناشناخته برای android:name اعلام ویژگی را نامعتبر می‌کند.

برای در نظر گرفتن این موارد، گوگل پلی تلاش می‌کند تا با بررسی سایر عناصر اعلام شده در فایل مانیفست، به ویژه عناصر <uses-permission> ، الزامات ویژگی‌های ضمنی یک برنامه را کشف کند.

اگر یک برنامه مجوزهای مربوط به سخت‌افزار را درخواست کند، گوگل پلی فرض می‌کند که برنامه از ویژگی‌های سخت‌افزاری زیربنایی استفاده می‌کند و بنابراین به آن ویژگی‌ها نیاز دارد، حتی اگر هیچ اعلان <uses-feature> متناظری وجود نداشته باشد. برای چنین مجوزهایی، گوگل پلی ویژگی‌های سخت‌افزاری زیربنایی را به ابرداده‌هایی که برای برنامه ذخیره می‌کند اضافه می‌کند و فیلترهایی را برای آنها تنظیم می‌کند.

برای مثال، اگر یک برنامه درخواست مجوز CAMERA را داشته باشد، گوگل پلی فرض می‌کند که برنامه به دوربین پشتی (دوربین رو به جهان) نیاز دارد، حتی اگر برنامه عنصر <uses-feature> را برای android.hardware.camera تعریف نکرده باشد. در نتیجه، گوگل پلی دستگاه‌هایی را که دوربین پشتی ندارند فیلتر می‌کند.

اگر نمی‌خواهید گوگل پلی بر اساس یک ویژگی ضمنی خاص فیلتر کند، آن ویژگی را به طور صریح در یک عنصر <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> اعلام نکند، گوگل پلی نسخه(های) پلتفرم اندروید که برنامه برای اجرا روی آن طراحی شده است را بررسی می‌کند، همانطور که در عنصر <uses-sdk> مشخص شده است.

همانطور که در جدول زیر نشان داده شده است، گوگل پلی فیلتر کردن ویژگی بلوتوث را تنها در صورتی فعال می‌کند که برنامه، پایین‌ترین یا پلتفرم هدف خود را اندروید ۲.۰ (سطح API 5) یا بالاتر اعلام کند. با این حال، توجه داشته باشید که گوگل پلی قوانین عادی فیلتر کردن را زمانی اعمال می‌کند که برنامه به صراحت ویژگی بلوتوث را در یک عنصر <uses-feature> اعلام کند.

جدول ۱. نحوه تعیین الزامات ویژگی بلوتوث توسط گوگل پلی برای برنامه‌ای که درخواست مجوز بلوتوث می‌کند اما ویژگی بلوتوث را در عنصر <uses-feature> اعلام نمی‌کند.

اگر minSdkVersion ... باشد و targetSdkVersion به صورت زیر است: نتیجه
<=4، یا <uses-sdk> تعریف نشده است <=4 گوگل پلی بر اساس گزارش پشتیبانی دستگاه‌ها از ویژگی android.hardware.bluetooth ، برنامه را از هیچ دستگاهی فیلتر نمی‌کند .
<=4 >=5 گوگل پلی برنامه را از هر دستگاهی که از ویژگی android.hardware.bluetooth پشتیبانی نمی‌کند (از جمله نسخه‌های قدیمی‌تر) فیلتر می‌کند.
>=5 >=5

مثال‌های زیر، جلوه‌های مختلف فیلترینگ را بر اساس نحوه‌ی مدیریت ویژگی بلوتوث توسط گوگل پلی نشان می‌دهند.

در مثال اول، برنامه‌ای که برای اجرا در سطوح API قدیمی‌تر طراحی شده است، مجوز بلوتوث را اعلام می‌کند اما ویژگی بلوتوث را در عنصر <uses-feature> اعلام نمی‌کند.
نتیجه: گوگل پلی هیچ برنامه‌ای را از هیچ دستگاهی فیلتر نمی‌کند.
<manifest ...>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" />
    ...
</manifest>
در مثال دوم، همان برنامه همچنین سطح API هدف را "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 که در SDK اندروید گنجانده شده است، برای تعیین نحوه فیلتر کردن برنامه شما توسط گوگل پلی بر اساس ویژگی‌ها و مجوزهای اعلام شده استفاده کنید. برای انجام این کار، aapt2 با دستور dump badging اجرا کنید. این کار باعث می‌شود aapt2 مانیفست برنامه شما را تجزیه و تحلیل کند و همان قوانینی را که گوگل پلی برای تعیین ویژگی‌های مورد نیاز برنامه شما استفاده می‌کند، اعمال کند.

برای استفاده از ابزار، مراحل زیر را دنبال کنید:

  1. برنامه خود را به صورت یک APK بدون امضا (unsigned APK) بسازید و صادر کنید. اگر در اندروید استودیو (Android Studio) در حال توسعه هستید، برنامه خود را با Gradle به صورت زیر بسازید:
    1. پروژه را باز کنید و Run > Edit Configurations را انتخاب کنید.
    2. علامت بعلاوه (+) را در نزدیکی گوشه بالا سمت چپ پنجره Run/Debug Configurations انتخاب کنید.
    3. گریدل را انتخاب کنید.
    4. در قسمت نام، عبارت «Unsigned APK» را وارد کنید.
    5. ماژول خود را از بخش پروژه Gradle انتخاب کنید.
    6. عبارت «assemble» را در بخش Tasks وارد کنید.
    7. برای تکمیل پیکربندی جدید، تأیید را انتخاب کنید.
    8. مطمئن شوید که پیکربندی اجرای Unsigned APK در نوار ابزار انتخاب شده باشد، و سپس Run > Run 'Unsigned APK' را انتخاب کنید.
    می‌توانید فایل APK امضا نشده خود را در مسیر < ProjectName >/app/build/outputs/apk/ پیدا کنید.
  2. اگر ابزار aapt2 در مسیر (PATH) شما نیست، آن را پیدا کنید. اگر از SDK Tools نسخه r8 یا بالاتر استفاده می‌کنید، می‌توانید aapt2 در دایرکتوری < SDK >/build-tools/< tools version number > پیدا کنید.

    توجه: شما باید از نسخه‌ای از 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.hardware" شروع می‌شود، در ویژگی android:name تعریف کنید. هر بار که یک ویژگی سخت‌افزاری را تعریف می‌کنید، از یک عنصر <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 است، صریحاً مشخص کنید که برنامه شما از ویژگی 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.hardware.camera با android.required="false" تعریف نمی‌کند، دستگاه‌هایی که دوربین عقب ندارند (مانند Chromebooks) توسط Google Play فیلتر می‌شوند. اگر برنامه شما از دستگاه‌هایی که فقط دوربین جلو دارند پشتیبانی می‌کند، 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 است، صریحاً مشخص کنید که برنامه شما از ویژگی فوکوس خودکار استفاده می‌کند و مشخص کنید که آیا این ویژگی الزامی است یا خیر، مانند:
<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 مراجعه کنید.

ویژگی‌های سخت‌افزاری رابط کاربری دستگاه

android.hardware.type.automotive

این اپلیکیشن به گونه‌ای طراحی شده است که رابط کاربری خود را روی مجموعه‌ای از صفحات نمایش داخل خودرو نمایش دهد. کاربر با استفاده از دکمه‌های سخت، لمس، کنترل‌های چرخشی و رابط‌های کاربری شبیه ماوس با اپلیکیشن تعامل می‌کند. صفحات نمایش خودرو معمولاً در کنسول مرکزی یا صفحه کیلومترشمار خودرو ظاهر می‌شوند.

توجه: برای اطلاعات بیشتر در مورد کاربرد این ویژگی و راهنمایی برای ساخت برنامه‌ها برای خودروها، به بخش «توزیع در خودروها» مراجعه کنید.

android.hardware.type.television

(منسوخ شده؛ به جای آن از android.software.leanback استفاده کنید.)

این اپلیکیشن طوری طراحی شده که رابط کاربری‌اش را روی تلویزیون نمایش دهد. این ویژگی «تلویزیون» را به عنوان یک تجربه تلویزیونی معمولی در اتاق نشیمن تعریف می‌کند: اپلیکیشن روی یک صفحه نمایش بزرگ نمایش داده می‌شود، کاربر در فاصله دوری نشسته است و شکل غالب ورودی چیزی شبیه به D-pad است، نه ماوس، اشاره‌گر یا دستگاه لمسی.

android.hardware.type.watch
این اپلیکیشن طوری طراحی شده است که رابط کاربری خود را روی یک ساعت نشان دهد. ساعت روی بدن، مثلاً روی مچ دست، بسته می‌شود. کاربر هنگام تعامل با دستگاه، بسیار به آن نزدیک است.
android.hardware.type.pc

این برنامه طوری طراحی شده است که رابط کاربری آن روی کروم‌بوک‌ها نمایش داده شود. این ویژگی، شبیه‌سازی ورودی برای ماوس و تاچ‌پد را غیرفعال می‌کند، زیرا کروم‌بوک‌ها از سخت‌افزار ماوس و تاچ‌پد استفاده می‌کنند. به ورودی ماوس مراجعه کنید.

نکته: برای این عنصر required="false" را تنظیم کنید؛ در غیر این صورت، فروشگاه گوگل پلی برنامه شما را برای دستگاه‌هایی غیر از کروم‌بوک‌ها غیرقابل دسترس می‌کند.

ویژگی‌های سخت‌افزاری اثر انگشت

android.hardware.fingerprint
این برنامه با استفاده از سخت‌افزار بیومتریک دستگاه، اثر انگشت را می‌خواند.

ویژگی‌های سخت‌افزاری گیم‌پد

android.hardware.gamepad
این برنامه ورودی کنترلر بازی را، چه از خود دستگاه و چه از یک گیم‌پد متصل، ضبط می‌کند.

ویژگی‌های سخت‌افزاری مادون قرمز

android.hardware.consumerir
این برنامه از قابلیت‌های مادون قرمز (IR) دستگاه استفاده می‌کند، معمولاً برای ارتباط با سایر دستگاه‌های IR مصرف‌کننده.

ویژگی‌های سخت‌افزاری مکان

android.hardware.location
این برنامه از یک یا چند ویژگی در دستگاه برای تعیین موقعیت مکانی، مانند موقعیت مکانی GPS، موقعیت مکانی شبکه یا موقعیت مکانی تلفن همراه، استفاده می‌کند.
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

این برنامه از شبیه‌سازی کارت NFC که روی دستگاه میزبانی می‌شود، استفاده می‌کند.

ویژگی‌های سخت‌افزاری 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
این برنامه از حسگرهای با کیفیت بالای دستگاه (Hi-Fi) استفاده می‌کند. برای مثال، یک برنامه بازی ممکن است حرکات با دقت بالای کاربر را تشخیص دهد.
android.hardware.sensor.heartrate
این برنامه از مانیتور ضربان قلب دستگاه استفاده می‌کند. برای مثال، یک برنامه تناسب اندام ممکن است روند ضربان قلب کاربر را در طول زمان گزارش دهد.
android.hardware.sensor.heartrate.ecg
این برنامه از حسگر ضربان قلب الکتروکاردیوگرام (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" آن نیاز را غیرفعال کنید.

برای سازگاری با نسخه‌های قبلی، هر دستگاهی که اندروید ۳.۱ (سطح API ۱۲) یا پایین‌تر را اجرا می‌کند، از هر دو حالت افقی و عمودی پشتیبانی می‌کند.

ویژگی‌های سخت‌افزاری تلفن

android.hardware.telephony
این برنامه از ویژگی‌های تلفنی دستگاه، مانند رادیو تلفنی با سرویس‌های ارتباط داده، استفاده می‌کند.
android.hardware.telephony.cdma

این برنامه از سیستم رادیویی تلفنی دسترسی چندگانه با تقسیم کد (CDMA) استفاده می‌کند.

با استفاده از این ویژگی، یک برنامه به این معنی است که از ویژگی android.hardware.telephony نیز استفاده می‌کند، مگر اینکه این ویژگی والد با android:required="false" تعریف شده باشد.

android.hardware.telephony.gsm

این برنامه از سیستم رادیویی تلفنی سیستم جهانی ارتباطات سیار (GSM) استفاده می‌کند.

با استفاده از این ویژگی، یک برنامه به این معنی است که از ویژگی android.hardware.telephony نیز استفاده می‌کند، مگر اینکه این ویژگی والد با android:required="false" تعریف شده باشد.

ویژگی‌های سخت‌افزاری صفحه لمسی

android.hardware.faketouch

این برنامه از رویدادهای تعاملی لمسی پایه، مانند ضربه زدن و کشیدن، استفاده می‌کند.

وقتی این ویژگی به صورت الزامی اعلام شود، نشان می‌دهد که برنامه فقط در صورتی با دستگاهی سازگار است که آن دستگاه دارای صفحه لمسی شبیه‌سازی‌شده «لمس جعلی» یا صفحه لمسی واقعی باشد.

دستگاهی که رابط لمسی جعلی ارائه می‌دهد، یک سیستم ورودی کاربر فراهم می‌کند که زیرمجموعه‌ای از قابلیت‌های صفحه لمسی را شبیه‌سازی می‌کند. برای مثال، یک ماوس یا کنترل از راه دور ممکن است یک مکان‌نما روی صفحه نمایش را هدایت کند.

اگر برنامه شما به تعامل اشاره و کلیک ساده نیاز دارد و فقط با یک کنترلر D-pad کار نمی‌کند، این ویژگی را اعلام کنید. از آنجا که این حداقل سطح تعامل لمسی است، می‌توانید از برنامه‌ای استفاده کنید که این ویژگی را در دستگاه‌هایی که رابط‌های لمسی پیچیده‌تری ارائه می‌دهند نیز اعلام کند.

برنامه‌ها به طور پیش‌فرض به ویژگی 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