نمای کلی سازگاری دستگاه

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

برای کمک به سازگاری دستگاه، Android چارچوب برنامه پویایی ارائه می‌دهد که در آن می‌توانید منابع برنامه ویژه پیکربندی را در فایل‌های ایستا ارائه دهید، مثلاً چیدمان‌های XML مختلف برای اندازه‌های مختلف صفحه‌نمایش. سپس Android منابع مناسب را براساس پیکربندی فعلی دستگاه بار می‌کند. با پیش‌بینی طراحی برنامه و منابع تکمیلی برنامه، می‌توانید یک بسته برنامه (APK) واحد منتشر کنید که تجربه کاربری را در انواع دستگاه‌ها بهینه‌سازی می‌کند.

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

«سازگاری» به چه معنا است؟

در رابطه با توسعه Android، دو نوع سازگاری وجود دارد: سازگاری دستگاه و سازگاری برنامه.

چون Android پروژه‌ای متن‌باز است، هر سازنده سخت‌افزاری می‌تواند دستگاهی بسازد که سیستم‌عامل Android را اجرا کند. اما دستگاهی «سازگار با Android» است که بتواند برنامه‌های نوشته‌شده برای محیط اجرای Android را به‌درستی اجرا کند. جزئیات دقیق محیط اجرای Android توسط برنامه سازگاری Android تعریف می‌شود. هر دستگاه باید «مجموعه آزمایش سازگاری» (CTS) را با موفقیت بگذراند تا سازگار درنظر گرفته شود.

به‌عنوان توسعه‌دهنده نرم‌افزار، لازم نیست نگران سازگاری دستگاه با Android باشید، زیرا فقط دستگاه‌های سازگار با Android دارای «فروشگاه Google Play» هستند. بنابراین، اگر کاربری برنامه‌تان را از «فروشگاه Google Play» نصب کند، از دستگاه سازگار با Android استفاده می‌کند.

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

کنترل دردسترس بودن برنامه‌تان برای دستگاه‌ها

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

برای دستیابی به بزرگ‌ترین پایگاه کاربر ممکن برای برنامه‌تان، بااستفاده از یک APK یا AAB، از بیشترین پیکربندی‌های دستگاه ممکن پشتیبانی کنید. در اکثر شرایط، می‌توانید این کار را با غیرفعال کردن ویژگی‌های اختیاری در زمان اجرا و ارائه منابع برنامه با جایگزین‌هایی برای پیکربندی‌های مختلف، مانند چیدمان‌های مختلف برای اندازه‌های مختلف صفحه‌نمایش، انجام دهید. درصورت لزوم، می‌توانید دردسترس بودن برنامه‌تان را برای دستگاه‌های خاصی ازطریق «فروشگاه Google Play» براساس ویژگی‌های دستگاه زیر محدود کنید:

ویژگی‌های دستگاه

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

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

برای مثال، اگر برنامه‌تان در دستگاهی که حسگر قطب‌نما ندارد منطقی نیست، می‌توانید حسگر قطب‌نما را به‌عنوان یک الزام با برچسب مانیفست زیر اعلام کنید:

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

«فروشگاه Google Play» ویژگی‌های موردنیاز برنامه‌تان را با ویژگی‌های دردسترس در دستگاه هر کاربر مقایسه می‌کند تا مشخص کند برنامه‌تان با هر دستگاه سازگار است یا نه. اگر دستگاه همه ویژگی‌های موردنیاز برنامه‌تان را نداشته باشد، کاربر نمی‌تواند برنامه‌تان را نصب کند.

بااین‌حال، اگر عملکرد اصلی برنامه‌تان به ویژگی دستگاه نیاز ندارد، ویژگی required را روی "false" تنظیم کنید و ویژگی دستگاه را در زمان اجرا بررسی کنید. اگر ویژگی برنامه در دستگاه فعلی دردسترس نیست، ویژگی برنامه مربوطه را به‌طور متین تنزل دهید. برای مثال، می‌توانید با فراخوانی hasSystemFeature() به این صورت، پرس‌وجو کنید که آیا ویژگی‌ای دردسترس است یا نه:

کاتلین

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

جاوا

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

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

نسخه پلت فرم

دستگاه‌های مختلف ممکن است نسخه‌های متفاوتی از پلاتفرم Android را اجرا کنند، مانند Android 12 یا Android 13. هر نسخه پلاتفرم بعدی اغلب میاناهای برنامه‌سازی کاربردی‌ای را اضافه می‌کند که در نسخه قبلی دردسترس نبوده‌اند. برای نشان دادن اینکه کدام مجموعه از میاناهای برنامه‌سازی کاربردی دردسترس است، هر نسخه پلاتفرم یک سطح میانای برنامه‌سازی کاربردی را مشخص می‌کند. برای مثال، Android 12 سطح میانای برنامه‌سازی کاربردی ۳۱ است و Android 13 سطح میانای برنامه‌سازی کاربردی ۳۳ است.

باید مقادیر minSdkVersion و targetSdkVersion را در فایل build.gradle مشخص کنید:

کاتلین

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

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

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

شیک

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

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

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

برای اطلاعات بیشتر درباره فایل build.gradle، پیکربندی ساخت را بخوانید.

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

بااین‌حال، اگر برنامه‌تان از میاناهای برنامه‌سازی کاربردی اضافه‌شده در نسخه جدیدتر پلاتفرم استفاده می‌کند، اما برای عملکرد اصلی خود به آن‌ها نیاز ندارد، سطح میانای برنامه‌سازی کاربردی را در زمان اجرا بررسی کنید و وقتی سطح میانای برنامه‌سازی کاربردی خیلی پایین است، ویژگی‌های مربوطه را به‌طور متین تنزل دهید. در این حالت، minSdkVersion را روی کمترین مقدار ممکن برای عملکرد اصلی برنامه‌تان تنظیم کنید، سپس نسخه سیستم فعلی، SDK_INT، را با ثابت نام کد در Build.VERSION_CODES که با سطح API موردنظر برای بررسی مطابقت دارد مقایسه کنید، همان‌طور که در مثال زیر نشان داده شده است:

کاتلین

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

جاوا

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

پیکربندی صفحه

‫Android در دستگاه‌هایی با اندازه‌های مختلف مانند تلفن، رایانه لوحی، و تلویزیون اجرا می‌شود. برای دسته‌بندی دستگاه‌ها براساس نوع صفحه‌نمایش، Android دو ویژگی را برای هر دستگاه تعریف می‌کند: اندازه صفحه‌نمایش (اندازه فیزیکی صفحه‌نمایش) و تراکم صفحه‌نمایش (تراکم فیزیکی پیکسل‌ها در صفحه‌نمایش، که با نام DPI شناخته می‌شود). برای ساده کردن پیکربندی‌های مختلف، Android این گونه‌ها را در گروه‌هایی تعمیم می‌دهد که هدف‌یابی آن‌ها را آسان‌تر می‌کند:

  • چهار اندازه کلی: کوچک، عادی، بزرگ، و خیلی بزرگ
  • چندین تراکم تعمیم‌یافته: mdpi (متوسط)، hdpi (بالا)، xhdpi (بسیار بالا)، xxhdpi (بسیار بسیار بالا)، و غیره

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

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

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

کنترل دردسترس بودن برنامه به‌دلایل تجاری

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

فیلتر کردن برای سازگاری فنی (مانند قطعات سخت‌افزاری موردنیاز) همیشه براساس اطلاعات موجود در فایل APK یا AAB شما انجام می‌شود. اما فیلتر کردن به‌دلایل غیرفنی (مثلاً منطقه جغرافیایی) همیشه در کنسول Google Play انجام می‌شود.

منابع تکمیلی:

نمای کلی منابع برنامه
اطلاعاتی درباره نحوه ساختاردهی برنامه‌های Android برای جدا کردن منابع برنامه از کد برنامه، ازجمله نحوه ارائه منابع جایگزین برای پیکربندی‌های خاص دستگاه.
فیلترها در Google Play
اطلاعاتی درباره روش‌های مختلفی که «فروشگاه Google Play» می‌تواند از نصب شدن برنامه‌تان در دستگاه‌های مختلف جلوگیری کند.
اجازه‌ها در Android
چگونه Android دسترسی برنامه به برخی‌از میاناهای برنامه‌سازی کاربردی را با سیستم اجازه‌ای محدود می‌کند که برای استفاده برنامه‌تان از آن میاناهای برنامه‌سازی کاربردی به رضایت کاربر نیاز دارد.