שינויים בהתנהגות: אפליקציות שמטרגטות את Android מגרסה 17 ואילך

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

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

פונקציונליות עיקרית

‫Android 17 כוללת את השינויים הבאים, שמשנים או מרחיבים יכולות ליבה שונות של מערכת Android.

הטמעה חדשה של MessageQueue שלא דורשת נעילה

החל מ-Android 17, אפליקציות שמטרגטות את Android 17 ומעלה מקבלות הטמעה חדשה ללא נעילה של android.os.MessageQueue. ההטמעה החדשה משפרת את הביצועים ומפחיתה את מספר הפריימים החסרים, אבל היא עלולה לגרום לשיבוש בלקוחות שמשקפים שדות ושיטות פרטיים.MessageQueue

מידע נוסף, כולל אסטרטגיות להפחתת הסיכון, זמין במאמר הנחיות לשינוי התנהגות של MessageQueue.

נגישות

ב-Android 17 בוצעו השינויים הבאים כדי לשפר את הנגישות.

תמיכה בנגישות של הקלדה במקלדת פיזית באמצעות כלי IME מורכבים

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

אימוץ האפליקציה

  • אפליקציות IME: כשמגדירים כתיבת טקסט בשדות עריכה, אפליקציות IME יכולות להשתמש ב-TextAttribute.Builder.setTextSuggestionSelected() כדי לציין אם נבחר מועמד ספציפי להמרה.

  • אפליקציות עם עריכת שדות: אפליקציות ששומרות InputConnection מותאם אישית יכולות לאחזר נתונים של בחירת מועמדים על ידי קריאה ל-TextAttribute.isTextSuggestionSelected(). אחרי זה, האפליקציות האלה צריכות לקרוא ל-AccessibilityEvent.setTextChangeTypes() כששולחים אירועי TYPE_VIEW_TEXT_CHANGED. התכונה הזו מופעלת כברירת מחדל באפליקציות שמטרגטות Android 17 ומשתמשות ב-TextView הרגיל. (כלומר, TextView יטפל באחזור נתונים מ-IME ובהגדרת סוגי שינויים בטקסט כששולחים אירועים לשירותי נגישות).

  • שירותי נגישות: שירותי נגישות שמבצעים עיבוד של אירועי TYPE_VIEW_TEXT_CHANGED יכולים לבצע קריאה ל-AccessibilityEvent.getTextChangeTypes() כדי לזהות את אופי השינוי ולהתאים את אסטרטגיות המשוב שלהם בהתאם.

אבטחה

ב-Android 17 בוצעו השיפורים הבאים באבטחת המכשירים והאפליקציות.

אבטחת פעילות

ב-Android 17, הפלטפורמה ממשיכה את המעבר לארכיטקטורה של "אבטחה כברירת מחדל", ומציגה חבילת שיפורים שנועדו לצמצם את הסיכון לניצול לרעה של פרצות חמורות כמו פישינג, חטיפת אינטראקציות ומתקפות confused deputy. בעקבות העדכון הזה, המפתחים נדרשים להביע הסכמה מפורשת לתקני אבטחה חדשים כדי לשמור על תאימות האפליקציה ועל הגנת המשתמשים.

ההשפעות העיקריות על מפתחים כוללות:

  • הגברת האבטחה של BAL ושיפור ההסכמה להצטרפות: אנחנו משפרים את ההגבלות על הפעלה של פעילות ברקע (BAL) על ידי הרחבת ההגנה ל-IntentSender. המפתחים צריכים להפסיק להשתמש בקבוע MODE_BACKGROUND_ACTIVITY_START_ALLOWED מדור קודם. במקום זאת, מומלץ להשתמש באמצעי בקרה מפורטים כמו MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE, שמגביל את הפעלת הפעילות לתרחישים שבהם האפליקציה המתקשרת גלויה, וכך מצמצם באופן משמעותי את שטח הפנים של המתקפה.
  • כלים להטמעה: מפתחים צריכים להשתמש במצב קפדני ובבדיקות lint מעודכנות כדי לזהות דפוסים מדור קודם ולהבטיח שהם מוכנים לדרישות עתידיות של SDK לטירגוט.

הגנות ב-localhost

כדי לשפר את אבטחת הפלטפורמה ואת פרטיות המשתמשים, ב-Android 17 מוצגת הרשאה חדשה בזמן ההתקנה, USE_LOOPBACK_INTERFACE. השינוי הזה מגביל את התקשורת בין אפליקציות ובין פרופילים דרך ממשק לולאה חוזרת (לדוגמה, 127.0.0.1 או ::1), שהייתה מותרת באופן מרומז בעבר עם ההרשאה INTERNET. באפליקציות שמטרגטות ל-Android 17 ואילך, הכללים הבאים חלים:

  • נדרשת הסכמה הדדית: כברירת מחדל, התקשורת בין אפליקציות ובין פרופילים חסומה. כדי שהחיבור יצליח, גם האפליקציה השולחת וגם האפליקציה המקבלת צריכות להצהיר במפורש על ההרשאה USE_LOOPBACK_INTERFACE במניפסטים שלהן.
  • תנועה בתוך האפליקציה שפטורה מההרשאה: תקשורת לולאה חוזרת בתוך אותה אפליקציה (תקשורת בתוך האפליקציה) לא מושפעת מהשינוי ולא דורשת את ההרשאה החדשה הזו.
  • התנהגות של גרסת יעד של SDK:
    • האפליקציה מטרגטת ל-Android 17 ומעלה: צריך לבקש את ההרשאה באופן מפורש. אם הוא חסר, פעולות שקע (כמו חיבור TCP או שליחת UDP) נכשלות, ובדרך כלל מחזירות שגיאה EPERM (הפעולה לא מורשית).
    • האפליקציה מכוונת לרמת API 36 ומטה: ההרשאה נחשבת להרשאה מפוצלת ב-INTERNET. אפליקציות שמטרגטות רמות API נמוכות יותר מקבלות את ההרשאה הזו באופן אוטומטי אם יש להן הרשאה INTERNET.
  • אזהרת תאימות: אם אפליקציה מקבלת מעדכנת את הטירגוט שלה ל-Android 17, אבל לא מבקשת את ההרשאה הזו, חיבורים נכנסים מאפליקציות אחרות יידחו, גם אם אפליקציית השליחה מטרגטת רמת API נמוכה יותר.

הפעלה של CT כברירת מחדל

אם אפליקציה מטרגטת ל-Android 17 ואילך, שקיפות האישורים (CT) מופעלת כברירת מחדל. (ב-Android 16, התכונה CT זמינה, אבל האפליקציות צריכות להצטרף אליה).

‫DCL מקורי מאובטח יותר – C

אם האפליקציה שלכם מטרגטת Android 17 ואילך, ההגנה על טעינת קוד דינמית (DCL) בטוחה יותר, שהוצגה ב-Android 14 לקובצי DEX ו-JAR, חלה עכשיו גם על ספריות מקוריות.

כל הקבצים המקוריים שנטענו באמצעות System.load() צריכים להיות מסומנים כקריאה בלבד. אחרת, המערכת תציג את השגיאה UnsatisfiedLinkError.

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

גורמי צורה של מכשירים

‫Android 17 כוללת את השינויים הבאים לשיפור חוויית המשתמש במגוון גדלים וסוגים של מכשירים.

שינויים ב-API של הפלטפורמה כדי להתעלם מהגבלות על כיוון, שינוי גודל ויחס גובה-רוחב במסכים גדולים (sw>=600dp)

הוספנו שינויים ב-API של הפלטפורמה ב-Android 16 כדי להתעלם מהגבלות על כיוון, יחס גובה-רוחב ושינוי גודל במסכים גדולים (sw ‏ >= 600dp) באפליקציות שמטרגטות לרמת API 36 ומעלה. למפתחים יש אפשרות לבטל את ההסכמה לשינויים האלה באמצעות SDK 36, אבל האפשרות הזו לא תהיה זמינה יותר לאפליקציות שמיועדות ל-Android 17 ומעלה.

מידע נוסף זמין במאמר בנושא התעלמות מהגבלות על כיוון ושינוי גודל.