בדומה לגרסאות קודמות, Android 17 כולל שינויים בהתנהגות שעשויים להשפיע על האפליקציה שלכם. שינויי ההתנהגות הבאים רלוונטיים רק לאפליקציות שמטרגטות את Android 17 ואילך. אם האפליקציה שלכם מטרגטת את Android מגרסה 17 ואילך, אתם צריכים לשנות את האפליקציה כדי שהיא תתמוך בהתנהגויות האלה, במקרים הרלוונטיים.
חשוב גם לבדוק את רשימת השינויים בהתנהגות שמשפיעים על כל האפליקציות שפועלות ב-Android 17, בלי קשר ל-targetSdkVersion של האפליקציה.
פונקציונליות עיקרית
Android 17 כוללת את השינויים הבאים, שמשנים או מרחיבים יכולות ליבה שונות של מערכת Android.
הטמעה חדשה של MessageQueue שלא דורשת נעילה
החל מ-Android 17, אפליקציות שמטרגטות את Android 17 (רמת API 37)
או גרסאות חדשות יותר מקבלות הטמעה חדשה ללא נעילה של
android.os.MessageQueue. ההטמעה החדשה משפרת את הביצועים ומפחיתה את מספר הפריימים החסרים, אבל היא עלולה לגרום לשיבוש בלקוחות שמשקפים שדות ושיטות פרטיים.MessageQueue
מידע נוסף, כולל אסטרטגיות להפחתת הסיכון, זמין במאמר הנחיות לשינוי התנהגות של MessageQueue.
שדות סופיים סטטיים לא ניתנים לשינוי
באפליקציות שפועלות ב-Android 17 ומעלה ומטרגטות ל-Android 17 (רמת API 37) ומעלה, אי אפשר לשנות שדות static final. אם אפליקציה מנסה לשנות שדה static final באמצעות רפלקציה, היא תגרום ל-IllegalAccessException. ניסיון לשנות אחד מהשדות האלה באמצעות ממשקי JNI API (כמו SetStaticLongField()) יגרום לקריסת האפליקציה.
נגישות
ב-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 (רמת API 37) ומשתמשות ב-TextViewהרגיל, התכונה הזו מופעלת כברירת מחדל. (כלומר,TextViewיטפל באחזור נתונים מ-IME ובהגדרת סוגי שינויים בטקסט כששולחים אירועים לשירותי נגישות).שירותי נגישות: שירותי נגישות שמבצעים עיבוד של אירועי
TYPE_VIEW_TEXT_CHANGEDיכולים לבצע קריאה ל-AccessibilityEvent.getTextChangeTypes()כדי לזהות את אופי השינוי ולהתאים את אסטרטגיות המשוב שלהם בהתאם.
פרטיות
Android 17 כוללת את השינויים הבאים לשיפור הפרטיות של המשתמשים.
ההגדרה ECH (הצפנת Client Hello) מופעלת
ב-Android 17 נוספה תמיכה בפלטפורמה בהצפנת ClientHello (ECH), תוסף ל-TLS (אבטחת שכבת התעבורה) שמשפר את פרטיות המשתמשים על ידי הצפנת חיווי שם השרת (SNI) בלחיצת היד של TLS. ההצפנה הזו עוזרת למנוע מצופים ברשת לזהות בקלות את הדומיין הספציפי שאליו האפליקציה מתחברת.
באפליקציות שמטרגטות ל-Android 17 (רמת API 37) ומעלה, נעשה שימוש ב-ECH לחיבורי TLS. ה-ECH פעיל רק אם ספריית הרשת שבה נעשה שימוש באפליקציה (לדוגמה, HttpEngine, WebView או OkHttp) כוללת תמיכה משולבת ב-ECH, וגם השרת המרוחק תומך בפרוטוקול ECH. אם אי אפשר להגיע להסכמה על ECH, הלקוח שולח תוסף ECH עם תוכן אקראי (מנגנון שנקרא ECH GREASE). מידע נוסף על אופן הפעולה של ECH GREASE זמין ב-RFC 9849.
כדי לאפשר לאפליקציות להתאים אישית את ההתנהגות הזו, ב-Android 17 נוסף רכיב <domainEncryption> חדש לקובץ הגדרות אבטחת הרשת.
מפתחים יכולים להשתמש בתג <domainEncryption> בתוך התגים <base-config> או <domain-config> כדי לבחור מצב ECH (לדוגמה, "enabled" או "disabled") באופן גלובלי או לכל דומיין.
מידע נוסף זמין במאמר בנושא הצפנה של Client Hello.
נדרשת הרשאה לגישה לרשת המקומית לאפליקציות שמיועדות ל-Android 17
Android 17 introduces the ACCESS_LOCAL_NETWORK runtime permission
to protect users from unauthorized local network access. Because this falls
under the existing NEARBY_DEVICES permission group, users who have already
granted other NEARBY_DEVICES permissions aren't prompted again. This new
requirement prevents malicious apps from exploiting unrestricted local network
access for covert user tracking and fingerprinting. By declaring and requesting
this permission, your app can discover and connect to devices on the local area
network (LAN), such as smart home devices or casting receivers.
Apps targeting Android 17 (API level 37) or higher now have two paths to maintain communication with LAN devices: Adopt system-mediated, privacy-preserving device pickers to skip the permission prompt, or explicitly request this new permission at runtime to maintain local network communication.
For more information, see the Local network permission documentation.
הסתרת סיסמאות ממכשירים פיזיים
אם אפליקציה מיועדת ל-Android 17 (רמת API 37) ומעלה, והמשתמש משתמש במכשיר קלט פיזי (לדוגמה, מקלדת חיצונית), מערכת ההפעלה של Android מחילה את ההגדרה החדשה show_passwords_physical על כל התווים בשדה הסיסמה. כברירת מחדל, ההגדרה הזו מסתירה את כל התווים של הסיסמה.
מערכת Android מציגה את התו האחרון שהוקלד בסיסמה כדי לעזור למשתמש לראות אם הוא הקליד את הסיסמה בצורה שגויה. עם זאת, במקלדות חיצוניות גדולות יותר, הצורך הזה פחות משמעותי. בנוסף, למכשירים עם מקלדות חיצוניות יש לרוב מסכים גדולים יותר, מה שמגדיל את הסיכון שמישהו יראה את הסיסמה שהוקלדה.
אם המשתמש משתמש במסך המגע של המכשיר, המערכת מחילה את ההגדרה החדשה show_passwords_touch.
הגנה על OTP בהודעות SMS רגילות
החל מ-Android 17, מערכת Android מרחיבה את ההגנה שלה על קודי OTP ב-SMS כך שתחול על הודעות SMS רגילות (הודעות SMS שמכילות קוד OTP ולא משתמשות בפורמטים WebOTP או SMS Retriever). ברוב האפליקציות שמטרגטות ל-Android 17 (רמת API 37) ומעלה, הודעות ה-SMS האלה לא יהיו זמינות עד שלוש שעות אחרי שהן יתקבלו. העיכוב הזה נועד למנוע גניבת סיסמאות חד-פעמיות. במהלך העיכוב של שלוש השעות, השידור של SMS_RECEIVED_ACTION מושהה והשאילתות במסד הנתונים של ספק ה-SMS מסוננות. הודעת ה-SMS תהיה זמינה לאפליקציות האלה אחרי העיכוב.
אפליקציות מסוימות, כמו אפליקציית העוזר האישי להודעות SMS שמוגדרת כברירת מחדל, אפליקציות נלוות למכשירים מקושרים וכו', מוחרגות מההשהיה הזו. כל האפליקציות שמסתמכות על קריאת הודעות SMS כדי לחלץ מהן קודים חד-פעמיים צריכות לעבור לשימוש בממשקי ה-API של SMS Retriever או SMS User Consent כדי להבטיח שהפונקציונליות שלהן תמשיך לפעול.
אבטחה
ב-Android 17 בוצעו השיפורים הבאים באבטחת המכשירים והאפליקציות.
אבטחת פעילות
ב-Android 17, הפלטפורמה ממשיכה את המעבר לארכיטקטורה של 'אבטחה כברירת מחדל', ומציגה חבילה של שיפורים שנועדו לצמצם את הסיכון לניצול לרעה של פרצות חמורות כמו פישינג, חטיפת אינטראקציות ומתקפות confused deputy. בעקבות העדכון הזה, המפתחים נדרשים להביע הסכמה מפורשת לתקני אבטחה חדשים כדי לשמור על תאימות האפליקציה ועל הגנת המשתמשים.
ההשפעות העיקריות על מפתחים כוללות:
- הגברת האבטחה של BAL ושיפור ההסכמה להצטרפות: אנחנו משפרים את ההגבלות על הפעלה של פעילות ברקע (BAL) על ידי הרחבת ההגנה ל-
IntentSender. המפתחים צריכים להפסיק להשתמש בקבועMODE_BACKGROUND_ACTIVITY_START_ALLOWEDמדור קודם. במקום זאת, מומלץ להשתמש באמצעי בקרה מפורטים כמוMODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE, שמגביל את הפעלת הפעילות לתרחישים שבהם האפליקציה המתקשרת גלויה, וכך מצמצם באופן משמעותי את שטח הפנים של המתקפה. - כלים להטמעה: מפתחים צריכים להשתמש במצב קפדני ובבדיקות lint מעודכנות כדי לזהות דפוסים מדור קודם ולהבטיח מוכנות לדרישות עתידיות של SDK לטירגוט.
הפעלה של CT כברירת מחדל
אם אפליקציה מטרגטת ל-Android 17 (רמת API 37) או לגרסה מתקדמת יותר, שקיפות האישורים (CT) מופעלת כברירת מחדל. (ב-Android 16, התכונה CT זמינה, אבל האפליקציות צריכות להצטרף אליה).
DCL מקורי מאובטח יותר – C
אם האפליקציה מטרגטת ל-Android 17 (רמת API 37) או לגרסה מתקדמת יותר, ההגנה על טעינה דינמית (DCL) של קוד, שהוצגה ב-Android 14 לקובצי DEX ו-JAR, חלה עכשיו גם על ספריות Native.
כל הקבצים המקוריים שנטענו באמצעות System.load() צריכים להיות מסומנים כקריאה בלבד.
אחרת, המערכת תציג את השגיאה UnsatisfiedLinkError.
מומלץ להימנע ככל האפשר מטעינה דינמית של קוד באפליקציות, כי פעולה כזו מגדילה מאוד את הסיכון שאפליקציה תיפרץ על ידי הזרקת קוד או שינוי קוד.
הגבלת שדות של פרטים אישיים מזהים בתצוגת הנתונים של CP2
באפליקציות שמיועדות ל-Android 17 (API ברמה Android 17 (API ברמה 37)) ומעלה, ניהול אנשי הקשר 2 (CP2) מגביל את הגישה לכמה עמודות שמכילות פרטים אישיים מזהים (PII) בתצוגת הנתונים. כשהשינוי הזה מופעל, העמודות האלה מוסרות מתצוגת הנתונים כדי לשפר את הפרטיות של המשתמשים. העמודות המוגבלות כוללות:
אפליקציות שמשתמשות בעמודות האלה מ-ContactsContract.Data יכולות לחלץ אותן מ-ContactsContract.RawContacts במקום זאת, על ידי הצטרפות ל-RAW_CONTACT_ID.
אכיפה של בדיקות SQL מחמירות ב-CP2
באפליקציות שמיועדות ל-Android 17 (רמת API Android 17 (רמת API 37)) ומעלה, ניהול אנשי הקשר 2 (CP2) אוכף אימות קפדני של שאילתות SQL כשמנסים לגשת לטבלה ContactsContract.Data בלי הרשאה READ_CONTACTS.
בעקבות השינוי הזה, אם לאפליקציה אין הרשאה לREAD_CONTACTS, האפשרויות StrictColumns וStrictGrammar מוגדרות כשמבצעים שאילתה בטבלה ContactsContract.Data. אם שאילתה משתמשת בתבנית שלא תואמת לאלה, היא תידחה ותגרום להפעלת חריגה.
מדיה
Android 17 כולל את השינויים הבאים בהתנהגות של מדיה.
חיזוק האבטחה של אודיו ברקע
Beginning with Android 17, the audio framework enforces restrictions on background audio interactions including audio playback, audio focus requests, and volume change APIs to ensure that these changes are started intentionally by the user.
Some audio restrictions apply to all apps. However, the restrictions are more stringent if an app targets Android 17 (API level 37). If one of these apps interacts with audio while it is in the background, it must have a foreground service running. In addition, the app must meet one or both of these requirements:
- The foreground service must have while-in-use (WIU) capabilities.
- The app must have the exact alarm permission and be interacting with
USAGE_ALARMaudio streams.
For more information, including mitigation strategies, see Background audio hardening.
גורמי צורה של מכשירים
Android 17 כוללת את השינויים הבאים לשיפור חוויית המשתמש במגוון גדלים וסוגים של מכשירים.
שינויים ב-API של הפלטפורמה שגורמים להתעלמות מהגבלות על כיוון, שינוי גודל ויחס גובה-רוחב במסכים גדולים (sw>=600dp)
הוספנו שינויים ב-API של הפלטפורמה ב-Android 16 כדי להתעלם מהגבלות על כיוון, יחס גובה-רוחב ושינוי גודל במסכים גדולים (sw >= 600dp) באפליקציות שמטרגטות לרמת API 36 ומעלה. מפתחים יכולים להשבית את השינויים האלה ב-SDK 36, אבל האפשרות הזו לא תהיה זמינה יותר לאפליקציות שמיועדות ל-Android 17 (רמת API 37) ומעלה.
מידע נוסף זמין במאמר בנושא התעלמות מהגבלות על כיוון ושינוי גודל.
קישוריות
ב-Android 17 בוצע השינוי הבא כדי לשפר את העקביות ולהתאים להתנהגות הרגילה של Java InputStream עבור שקעי RFCOMM ב-Bluetooth.
התנהגות עקבית של read() ב-BluetoothSocket עבור RFCOMM
באפליקציות שמטרגטות ל-Android 17 (רמת API 37), השיטה read() של InputStream שמתקבלת מ-BluetoothSocket מבוסס RFCOMM מחזירה עכשיו -1 כשהסוקט סגור או כשהחיבור נותק.
השינוי הזה גורם להתנהגות של שקע RFCOMM להיות עקבית עם שקעי LE CoC, ומתאים למסמכי התיעוד של התקן InputStream.read(), שבהם מצוין שהערך -1 מוחזר כשמגיעים לסוף הזרם.
אפליקציות שמסתמכות רק על תפיסה של IOException כדי לצאת מלולאת קריאה עשויות להיות מושפעות מהשינוי הזה, ולכן צריך לעדכן את לולאות הקריאה של BluetoothSocket כדי לבדוק באופן מפורש אם ערך ההחזרה הוא -1. כך מבטיחים שהלולאה תסתיים בצורה נכונה כשהמכשיר שמחובר לרשת אחרת מתנתק או כשהשקע נסגר. דוגמה להטמעה המומלצת מופיעה בקטע קוד במדריך העברת נתונים באמצעות Bluetooth.