סקירה כללית על תאימות המכשיר

Android תוכנן לפעול במכשירים שונים, כמו טלפונים, טאבלטים וטלוויזיות. למגוון המכשירים יש פוטנציאל עצום הקהל של האפליקציה שלכם. כדי שהאפליקציה תפעל כמו שצריך בכל המכשירים, צריך להתמודד עם שונות של תכונות ולספק ממשק משתמש גמיש שמתאים את עצמו להגדרות שונות של מסך.

כדי לעזור בתאימות המכשירים, Android מספק מסגרת אפליקציה דינמית שבהם אפשר לספק הגדרות ספציפיות משאבי אפליקציות סטטיים למשל, פריסות XML שונות למסכים בגדלים שונים. ואז ב-Android טוענת את המשאבים המתאימים על סמך התצורה הנוכחית של המכשיר. ב- מתוך מחשבה על עיצוב האפליקציה ומקורות מידע נוספים, תוכלו לפרסם חבילה של אפליקציה אחת (APK) שמבצעת אופטימיזציה של חוויית המשתמש במגוון רחב של פלטפורמות של מכשירים.

עם זאת, במקרה הצורך ניתן לפרט את הדרישות לגבי התכונות של האפליקציה שליטה בסוגי המכשירים שיכולים להתקין את האפליקציה שלך מחנות Google Play. במסמך הזה מוסבר איך לקבוע באילו מכשירים תהיה גישה אל ואיך להכין את האפליקציות כך שיגיעו לקהל הנכון.

מה המשמעות של "תאימות" כלומר?

יש שני סוגים של תאימות בנוגע לפיתוח של Android: תאימות מכשירים ותאימות אפליקציות.

Android הוא פרויקט בקוד פתוח, ולכן כל יצרן חומרה יכול לפתח מכשיר שבו פועלת מערכת ההפעלה Android. אבל מכשיר 'תואם ל-Android' רק אם היא יכולה להריץ בצורה תקינה אפליקציות שנכתבו עבור סביבת ההפעלה של Android. הפרטים המדויקים של מכשיר Android וסביבת הביצוע מוגדרת על ידי ב-Android . כל מכשיר חייב לעבור את החבילה לבדיקת התאימות (CTS) כדי להיחשב כתאימות.

כמפתחי אפליקציות, לא צריך לדאוג אם המכשיר תואמת ל-Android, כי רק מכשירים שתואמים ל-Android כוללים חנות Google Play. כלומר, אם משתמש מתקין את האפליקציה מחנות Google Play, משתמשים במכשיר תואם Android.

עם זאת, צריך לבדוק אם האפליקציה תואמת תצורה פוטנציאלית של המכשיר. כי מערכת Android פועלת במגוון רחב של מכשירים הגדרות אישיות, חלק מהתכונות לא זמינות בכל המכשירים. לדוגמה, חלק מכשירים עשויים לא לכלול חיישן מצפן. אם הפונקציונליות העיקרית של האפליקציה דורש חיישן מצפן, האפליקציה שלך תואמת רק למכשירים כוללים את התכונה הזו.

שליטה בזמינות של האפליקציה למכשירים

מערכת 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() כך:

Kotlin

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

Java

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. לדוגמה, מערכת Android 12 היא רמת API 31, ו-Android 13 היא רמת API 33.

צריך לציין את minSdkVersion וגם targetSdkVersion ערכים בקובץ build.gradle:

Kotlin

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, אפשר לקרוא את מגדירים את ה-build.

כל גרסה רציפה של Android מספקת תאימות לאפליקציות שפותחו על ידי Google באמצעות ממשקי API מגרסאות פלטפורמה קודמות, כך שהאפליקציה תואמת בגרסאות עתידיות של Android בזמן השימוש בממשקי ה-API של Android המתועדים.

עם זאת, אם האפליקציה משתמשת בממשקי API שנוספו בגרסת פלטפורמה עדכנית יותר, אבל לא דורש אותן לפונקציונליות הראשית, צריך לבדוק את רמת ה-API בכתובת זמן ריצה, ותפחית באופן חלק את התכונות המקבילות כשרמת ה-API נמוך מדי. במקרה הזה, צריך להגדיר את minSdkVersion לערך הנמוך ביותר אפשרית לפונקציונליות העיקרית של האפליקציה שלך, ולאחר מכן להשוות את הפונקציונליות של המערכת הנוכחית version, SDK_INT, קבוע שם הקוד Build.VERSION_CODES שתואמת לרמת ה-API שרוצים לבדוק, כמו בדוגמה הבאה דוגמה:

Kotlin

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()
}

Java

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 מכלילה את הווריאנטים האלה בקבוצות שהופכות אותם קל יותר לטירגוט:

  • ארבעה גדלים כלליים: Small, Standard, Large ו-xlarge
  • כמה דחיסות כללית: mdpi (בינונית), hdpi (גבוהה), xhdpi (גבוהה גבוהה), xxhdpi (גבוהה במיוחד) ועוד

כברירת מחדל, האפליקציה שלך תואמת לכל גודל מסך ולכל צפיפות המסך, כי המערכת מבצעת התאמות בפריסת ממשק המשתמש ובמשאבי התמונות הדרוש לכל מסך. הצגת תמונות של מפת סיביות (bitmap) שעברו אופטימיזציה למסך משותף צפיפות.

השתמשו בפריסות גמישות ככל האפשר כדי לשפר את חוויית המשתמש. כאשר יש פריסות לשינויי הגדרות גדולים, כמו לאורך לרוחב או חלונות גדולים לעומת חלונות קטנים, כדאי לשקול לספק אפשרויות אחרות פריסות שמאפשרות שינויים קטנים יותר בתצורה. כך אפשר לשפר את חוויית המשתמש בגורמי צורה כמו טאבלטים, טלפונים ומכשירים מתקפלים. הוא עוזר גם כאשר גודל החלון משתנה במצב ריבוי חלונות.

כדי ללמוד איך ליצור משאבים חלופיים מסכים ואיך להגביל את האפליקציה לגודלי מסך מסוימים במקרה הצורך, לקרוא את תאימות מסך סקירה כללית. אפליקציה במסך גדול הנחיות איכות.

שליטה בזמינות של האפליקציה מסיבות עסקיות

בנוסף להגבלת הזמינות של האפליקציה לפי מכשיר ייתכן שתצטרכו להגביל את הזמינות של האפליקציה לעסקים או מסיבות משפטיות. למצב כזה, חנות Google Play מספקת אפשרויות הסינון ב-Play Console שמאפשרות לשלוט זמינות מסיבות לא טכניות, כגון המיקום של המשתמש או חיבור אלחוטי ספק.

סינון לתאימות טכנית – כגון חומרה נדרשת רכיבים - מבוסס תמיד על מידע שכלול ב-APK או ב-AAB שלך חדש. אבל סינון מסיבות לא טכניות — כמו לוקאל - מטופל תמיד Google Play Console.

משאבים נוספים:

סקירה כללית של משאבי האפליקציה
מידע על המבנה של אפליקציות ל-Android כדי להפריד בין האפליקציות מקוד האפליקציה, כולל איך ניתן לספק משאבים לתצורות מכשירים ספציפיות.
מסננים ב-Google Play
מידע על הדרכים השונות שבהן חנות Google Play יכולה למנוע להתקין את האפליקציה במכשירים שונים.
הרשאות ב-Android
איך מערכת Android מגבילה את הגישה של אפליקציות לממשקי API מסוימים באמצעות מערכת הרשאות שמחייבת את הסכמת המשתמש כדי שהאפליקציה תשתמש בממשקי ה-API האלה.