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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

با این حال، اگر عملکرد اصلی برنامه شما به یک ویژگی دستگاه نیاز ندارد، ویژگی 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 مراجعه کنید.

نسخه پلتفرم

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

شما باید مقادیر 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 ، بخش «پیکربندی ساخت خود» را مطالعه کنید.

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

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

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

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

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

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

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

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

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

منابع اضافی:

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