תמיכה בגרסאות פלטפורמות שונות

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

אפשר להשתמש באשף New Project (פרויקט חדש) ב-Android Studio כדי לראות את הפילוח של מכשירים פעילים שמופעלת בהם כל גרסה של Android. החלוקה הזו מבוססת על מספר המכשירים שנכנסים לחנות Google Play. בדרך כלל, מומלץ לתמוך בכ-90% מהמכשירים הפעילים, תוך התמקדות בגרסה העדכנית ביותר של האפליקציה.

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

ציון רמות API מינימליות ורמות API לטירגוט

בקובץ AndroidManifest.xml מפורטים פרטים על האפליקציה ומצוינות הגרסאות של Android שהיא תומכת בהן. באופן ספציפי, המאפיינים minSdkVersion ו-targetSdkVersion של הרכיב <uses-sdk> מציינים את רמת ה-API הנמוכה ביותר שאליה האפליקציה תואמת ואת רמת ה-API הגבוהה ביותר שלפיה תוכננה ונבדקה האפליקציה.

לדוגמה:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
    ...
</manifest>

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

מכיוון שגרסאות SDK משניות לא קשורות לשינויים בהתנהגות, אי אפשר להגדיר את targetSdkVersion כך שישקף גרסת SDK משנית. אם רוצים לבצע קריאה ל-API בגרסה משנית של SDK שחדשה יותר מגרסה minSdkVersion, צריך לבדוק את גרסת המערכת בזמן הריצה.

בדיקת גרסת המערכת בזמן הריצה

‫Android מספקת קוד ייחודי לכל גרסת פלטפורמה במחלקה Buildconstants. משתמשים בקודים האלה באפליקציה כדי ליצור תנאים שמבטיחים שהקוד שתלוי ברמות API גבוהות יותר יופעל רק כשממשקי ה-API האלה זמינים במערכת.

Kotlin

private fun setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        actionBar.setDisplayHomeAsUpEnabled(true)
    }
}

Java

private void setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

אפשר להשתמש ב-Build.VERSION.SDK_INT_FULL כדי לבדוק אם קיימת גרסת SDK ראשית או משנית.

Kotlin

if (SDK_INT_FULL >= VERSION_CODES_FULL.[MAJOR or MINOR RELEASE]) {
  // Use APIs introduced in a major or minor SDK release
}

Java

if (SDK_INT_FULL >= VERSION_CODES_FULL.[MAJOR or MINOR RELEASE]) {
  // Use APIs introduced in a major or minor SDK release
}

הערה: כשמנתחים משאבי XML, מערכת Android מתעלמת מתכונות XML שלא נתמכות במכשיר הנוכחי. כך תוכלו להשתמש בבטחה במאפייני XML שנתמכים רק בגרסאות חדשות יותר, בלי לדאוג שגרסאות ישנות יותר ייפגעו כשהן ייתקלו בקוד הזה. לדוגמה, אם מגדירים את התג targetSdkVersion="11", האפליקציה כוללת את התג ActionBar כברירת מחדל ב-Android מגרסה 3.0 ואילך. כדי להוסיף פריטים לתפריט לסרגל הפעולות, צריך להגדיר את android:showAsAction="ifRoom" ב-XML של משאב התפריט. אפשר לעשות את זה בבטחה בקובץ XML שמתאים לגרסאות שונות, כי גרסאות ישנות יותר של Android פשוט מתעלמות מהמאפיין showAsAction (כלומר, לא צריך גרסה נפרדת ב-res/menu-v11/).

שימוש בסגנונות ובעיצובים של הפלטפורמה

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

כדי שהפעילות תיראה כמו תיבת דו-שיח:

<activity android:theme="@android:style/Theme.Dialog">

כדי שהרקע של הפעילות יהיה שקוף:

<activity android:theme="@android:style/Theme.Translucent">

כדי להחיל עיצוב מותאם אישית שהוגדר ב-/res/values/styles.xml:

<activity android:theme="@style/CustomTheme">

כדי להחיל עיצוב על כל האפליקציה (כל הפעילויות), מוסיפים את המאפיין android:theme attribute לרכיב <application>:

<application android:theme="@style/CustomTheme">

מידע נוסף על יצירה של עיצובים ושימוש בהם זמין במדריך סגנונות ועיצובים.