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

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

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

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

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

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

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

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

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

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

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

برای دستیابی به بزرگترین پایگاه کاربری ممکن برای برنامه خود، با استفاده از یک 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. هر نسخه پلتفرم متوالی اغلب APIهایی را اضافه می‌کند که در نسخه قبلی موجود نیستند. برای مشخص کردن مجموعه ای از API های موجود، هر نسخه پلتفرم یک سطح API را مشخص می کند. به عنوان مثال، اندروید 12 API سطح 31 و اندروید 13 API سطح 33 است.

شما باید مقادیر 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(33)
        ...
    }
}

شیار

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 33
        ...
    }
}

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

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

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

کاتلین

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

جاوا

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

پیکربندی صفحه نمایش

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

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

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

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

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

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

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

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

منابع اضافی:

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