מעבר ל-Android 8.0

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

  1. הבטחת תאימות ל-Android 8.0

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

  2. עדכון גרסת היעד והשימוש בתכונות של Android 8.0

    כשתהיו מוכנים ליהנות מהתכונות החדשות של הפלטפורמה, תוכלו לעדכן את targetSdkVersion ל-26, לוודא שהאפליקציה ממשיכה לפעול כצפוי ולהתחיל להשתמש בממשקי ה-API החדשים.

מוודאים שהמכשיר תואם ל-Android 8.0

המטרה היא לוודא שהאפליקציה הקיימת פועלת כפי שהיא ב-Android 8.0 (רמת API ‏26). חלק מהשינויים בפלטפורמה עשויים להשפיע על אופן הפעולה של האפליקציה, ולכן יכול להיות שתצטרכו לבצע התאמות מסוימות, אבל אין צורך להשתמש בממשקי API חדשים או לשנות את targetSdkVersion.

הוראות מפורטות לתאימות ל-Android 8.0

הכנת מכשיר עם Android 8.0

  • אם יש לכם מכשיר תואם (Pixel,‏ Pixel XL,‏ Pixel C,‏ Nexus 5X,‏ Nexus 6P או Nexus Player), עליכם לפעול לפי ההוראות לשחזור הקושחה במכשיר.
  • לחלופין, אפשר להוריד את קובץ האימג' של מערכת Android 8.0 למהדר של Android. הוא מופיע ב-SDK Manager בקטע Android 8.0 בתור Google APIs Intel x86 Atom System Image.

    הערה: תמונת המערכת של Android 8.0 זמינה להורדה מ- Android Studio 3.0 ואילך. למידע נוסף, אפשר לעיין בקטע הבא בנושא קבלת ה-SDK של Android 8.0.

ביצוע בדיקות תאימות

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

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

טבלה 1. שינויים מרכזיים שמשפיעים על כל האפליקציות שפועלות במכשירי Android 8.0.

שינוי סיכום מידע נוסף
עדכוני מיקום ברקע בתדירות נמוכה יותר אם האפליקציה מקבלת עדכוני מיקום משירות ברקע, היא מקבלת עדכונים בתדירות נמוכה יותר ב-Android 8.0 (רמת API‏ 26) בהשוואה לגרסאות ישנות יותר של Android. באופן ספציפי, שירות ברקע לא יכול לקבל עדכוני מיקום יותר מכמה פעמים בשעה. עם זאת, כשהאפליקציה בחזית, קצב עדכוני המיקום לא משתנה. הגבלות על מיקום ברקע
net.hostname לא נתמכים יותר שאילתה למאפיין המערכת net.hostname מניבה תוצאה null. ללא
חריגה חדשה מ-send(DatagramPacket) השיטה send(DatagramPacket) גורמת להשלכת SocketException אם השיטה connect(InetAddress, int) שבוצעה קודם לכן נכשלה. שינויים בהתנהגות: קישוריות לרשת ול-HTTP(S)
קריאה נכונה ל-NullPointerException מהשיטות של AbstractCollection הפונקציות AbstractCollection.removeAll(null) ו-AbstractCollection.retainAll(null) תמיד גורמות להשלכת NullPointerException. בעבר, ה-NullPointerException לא הופעל כשהאוסף היה ריק. השינוי הזה מבטיח שההתנהגות תהיה תואמת למסמכי התיעוד. שינויים בהתנהגות: טיפול באוספים
NullPointerException תקין מ-Currency.getDisplayName(null) קריאה ל-Currency.getDisplayName(null) גורמת להשלכה של NullPointerException. שינויים בהתנהגות: שפות ולוקליזציה

רשימה מקיפה יותר של שינויים בהתנהגות ב-Android 8.0 (רמת API‏ 26) מופיעה במאמר שינויים בהתנהגות ב-Android 8.0.

עדכון גרסת היעד והשימוש בתכונות של Android 8.0

בקטע הזה מוסבר איך מפעילים תמיכה מלאה ב-Android 8.0 (רמת API‏ 26) על ידי עדכון הערך של targetSdkVersion ל-26 והוספת תכונות חדשות שזמינות ב-Android 8.0.

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

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

מעדכנים את גרסת היעד ומשתמשים בתכונות של Android 8.0 שלב אחר שלב

הורדת Android 8.0 SDK

אפשר לקבל את חבילות ה-SDK כדי ליצור את האפליקציה ל-Android 8.0 (רמה 26 של API) באמצעות הגרסה העדכנית ביותר של Android Studio (מומלץ להשתמש ב-Android Studio מגרסה 3.0 ואילך). Android Studio מגרסה 3.0 ואילך כולל כלים שיעזרו לכם להשתמש בתכונות של Android 8.0, כמו סמלים מותאמים וגופנים שניתן להוריד. אם אתם עדיין לא צריכים את התכונות האלה, תוכלו להשתמש בגרסה היציבה של Android Studio 2.3.3 כדי לפתח את האפליקציה עם Android 8.0 ולהשתמש בממשקי ה-API החדשים.

כדי להגדיר את אחת מהגרסאות של Android Studio:

  1. פותחים את Android Studio ולוחצים על Tools (כלים) > SDK Manager (מנהל SDK) כדי לפתוח את מנהל ה-SDK.
  2. בכרטיסייה SDK Platforms, מסמנים את התיבה Show Package Details. מתחת לתצוגה המקדימה של Android 8.0, בודקים את הדברים הבאים:
    • Android SDK Platform 26
    • Google APIs Intel x86 Atom System Image (נדרש רק למהדר)
  3. עוברים לכרטיסייה SDK Tools ומסמנים את כל הפריטים שיש להם עדכונים זמינים (לוחצים על כל תיבת סימון עם מקף ). העדכונים צריכים לכלול את הגרסאות העדכניות ביותר של הפריטים הנדרשים הבאים:
    • Android SDK Build-Tools 26.0.0
    • Android SDK Platform-Tools 26.0.0
    • Android Emulator 26.0.0
  4. לוחצים על OK כדי להתקין את כל חבילות ה-SDK שנבחרו.

עכשיו אתם מוכנים להתחיל לפתח עם Android 8.0.

עדכון הגדרת ה-build

מעדכנים את compileSdkVersion, את targetSdkVersion ואת הגרסה של Support Library לגרסאות המעודכנות ביותר, לדוגמה:

android {
  compileSdkVersion 26

  defaultConfig {
    targetSdkVersion 26
  }
  ...
}

dependencies {
  compile 'com.android.support:appcompat-v7:26.0.0'
}

// REQUIRED: Google's new Maven repo is required for the latest
// support library that is compatible with Android 8.0
repositories {
    google()

    // If you're using a version of Gradle lower than 4.1, you must instead use:
    // maven {
    //     url 'https://maven.google.com'
    // }
}

הסרה של מקלטי שידור מקובץ המניפסט

בגרסה 8.0 של Android (רמת API‏ 26) נוספו הגבלות חדשות על רכיבי Broadcast Receiver, לכן צריך להסיר את כל רכיבי Broadcast Receiver שרשומים לכוונות Broadcast משתמעות. השארת הקוד לא גורמת לשגיאות באפליקציה בזמן ה-build או בזמן הריצה, אבל אין לו השפעה כשהאפליקציה פועלת ב-Android 8.0.

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

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

בדיקת האפליקציה ל-Android 8.0

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

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

בטבלה 2 מוצגת רשימה של השינויים האלה עם קישורים למידע נוסף.

טבלה 2. שינויים מרכזיים שמשפיעים על האפליקציות כשהערך של targetSdkVersion מוגדר ל-26.

שינוי סיכום מידע נוסף
פרטיות ב-Android 8.0 (רמת API‏ 26) אין תמיכה בשימוש בנכסי המערכת net.dns1,‏ net.dns2,‏ net.dns3 או net.dns4. שינויים בהתנהגות: פרטיות
אכיפה של פלחים שניתנים לכתיבה ולביצוע בספריות נייטיב, מערכת Android 8.0 (רמת API 26) אוכפת את הכלל שהנתונים לא צריכים להיות קובצי הפעלה, והקוד לא צריך להיות ניתן לכתיבה. שינויים בהתנהגות: ספריות מקוריות
אימות כותרת וקטעים של ELF הקישור הדינמי בודק ערכים נוספים בכותרת ה-ELF ובכותרות הקטעים, ומפסיק לפעול אם הם לא חוקיים. שינויים בהתנהגות: ספריות מקוריות
התראות אפליקציות שמטרגטות את גרסת ה-SDK ל-Android 8.0 (רמת API‏ 26) חייבות להטמיע ערוץ התראות אחד או יותר כדי לפרסם התראות למשתמשים. סקירה כללית על API: התראות
השיטה List.sort() לא ניתן יהיה יותר להפעיל את Collections.sort() בהטמעות של השיטה הזו, אחרת תופיע באפליקציה חריגה עקב חריגה ממלאי הערכים ב-stack. שינויים בהתנהגות: טיפול באוספים
השיטה Collections.sort() בהטמעות של רשימה, Collections.sort() נותנת עכשיו ConcurrentModificationException. שינויים בהתנהגות: טיפול באוספים

רשימה מקיפה יותר של שינויים בהתנהגות ב-Android 8.0 (רמת API‏ 26) מופיעה במאמר שינויים בהתנהגות ב-Android 8.0.

במאמר תכונות וממשקי API חדשים ב-Android 8.0 מפורט מידע על התכונות וממשקי ה-API החדשים שזמינים ב-Android 8.0 (רמת API‏ 26).