گوگل پلی از عناصر <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 سطح ۴ یا بالاتر را اجرا میکنند فعال است، اما این عناصر را برای همه برنامهها، حتی اگرminSdkVersion3 یا پایینتر باشد، لحاظ کنید. دستگاههایی که نسخههای قدیمیتر پلتفرم را اجرا میکنند، این عنصر را نادیده میگیرند.نکته: هنگام اعلام یک ویژگی، به یاد داشته باشید که باید مجوزهای مربوطه را نیز درخواست کنید. به عنوان مثال، قبل از اینکه برنامه شما بتواند به 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 به صورت زیر است: | نتیجه |
|---|---|---|
<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 مانیفست برنامه شما را تجزیه و تحلیل کند و همان قوانینی را که گوگل پلی برای تعیین ویژگیهای مورد نیاز برنامه شما استفاده میکند، اعمال کند.
برای استفاده از ابزار، مراحل زیر را دنبال کنید:
- برنامه خود را به صورت یک APK بدون امضا (unsigned APK) بسازید و صادر کنید. اگر در اندروید استودیو (Android Studio) در حال توسعه هستید، برنامه خود را با Gradle به صورت زیر بسازید:
- پروژه را باز کنید و Run > Edit Configurations را انتخاب کنید.
- علامت بعلاوه (+) را در نزدیکی گوشه بالا سمت چپ پنجره Run/Debug Configurations انتخاب کنید.
- گریدل را انتخاب کنید.
- در قسمت نام، عبارت «Unsigned APK» را وارد کنید.
- ماژول خود را از بخش پروژه Gradle انتخاب کنید.
- عبارت «assemble» را در بخش Tasks وارد کنید.
- برای تکمیل پیکربندی جدید، تأیید را انتخاب کنید.
- مطمئن شوید که پیکربندی اجرای Unsigned APK در نوار ابزار انتخاب شده باشد، و سپس Run > Run 'Unsigned APK' را انتخاب کنید.
< ProjectName >/app/build/outputs/apk/پیدا کنید. - اگر ابزار
aapt2در مسیر (PATH) شما نیست، آن را پیدا کنید. اگر از SDK Tools نسخه r8 یا بالاتر استفاده میکنید، میتوانیدaapt2در دایرکتوری< SDK >/build-tools/< tools version number >پیدا کنید.توجه: شما باید از نسخهای از
aapt2استفاده کنید که برای آخرین کامپوننت Build-Tools موجود ارائه شده است. اگر آخرین کامپوننت Build-Tools را ندارید، آن را با استفاده از Android SDK Manager دانلود کنید. -
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.faketouchfeature. 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.faketouchfeature.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.touchscreenwithandroid:required="false". Add this declaration if your app uses, but doesn't require, a real touchscreen interface. All apps that don't explicitly requireandroid.hardware.touchscreenalso work on devices withandroid.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.touchscreenfeature.By using this feature, an app implies that it also uses the
android.hardware.touchscreenfeature, unless this parent feature is declared withandroid: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.multitouchfeature.By using this feature, an app implies that it also uses the
android.hardware.touchscreen.multitouchfeature, unless this parent feature is declared withandroid: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.multitouchfeature.By using this feature, an app implies that it also uses the
android.hardware.touchscreen.multitouchfeature, unless this parent feature is declared withandroid: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:
For more details about the feature version, see<uses-feature android:name="android.hardware.vulkan.compute" android:version="0" android:required="true" />
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:
For more information about the feature version, see<uses-feature android:name="android.hardware.vulkan.level" android:version="0" android:required="true" />
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:
For more details about the feature version, see<uses-feature android:name="android.hardware.vulkan.version" android:version="0x400003" android:required="true" />
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.sipfeature, unless this parent feature is declared withandroid: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.bluetoothSee Special handling for Bluetooth feature for details. |
BLUETOOTH_ADMIN | android.hardware.bluetooth | |
| دوربین | CAMERA | android.hardware.cameraandroid.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 | | |
ACCESS_FINE_LOCATION | | |
| میکروفون | 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 |