שינויים בהתנהגות: כל האפליקציות

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

חשוב גם לעיין ברשימת השינויים בהתנהגות שמשפיעים רק על אפליקציות שמטרגטות ל-Android 15.

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

ב-Android 15 יש שינויים או הרחבות של יכולות ליבה שונות במערכת Android.

שינויים במצב 'החבילה הופסקה'

The intention of the package FLAG_STOPPED state (which users can engage in AOSP builds by long-pressing an app icon and selecting "Force Stop") has always been to keep apps in this state until the user explicitly removes the app from this state by directly launching the app or indirectly interacting with the app (through the sharesheet or a widget, selecting the app as live wallpaper, etc.). In Android 15, we've updated the behavior of the system to be aligned with this intended behavior. Apps should only be removed from the stopped state through direct or indirect user action.

To support the intended behavior, in addition to the existing restrictions, the system also cancels all pending intents when the app enters the stopped state on a device running Android 15. When the user's actions remove the app from the stopped state, the ACTION_BOOT_COMPLETED broadcast is delivered to the app providing an opportunity to re-register any pending intents.

You can call the new ApplicationStartInfo.wasForceStopped() method to confirm whether the app was put into the stopped state.

תמיכה בדפים בגודל 16KB

בעבר הייתה ב-Android תמיכה רק בגודלי דפי זיכרון בגודל של 4KB, ביצוע אופטימיזציה של ביצועי זיכרון המערכת עבור הכמות הממוצעת של הזיכרון הכוללת בדרך כלל יש במכשירי Android. החל מ-Android 15, מערכת AOSP תומכת מכשירים שמוגדרים להשתמש בגודל דף של 16KB (16KB) מכשירים). אם באפליקציה נעשה שימוש בספריות NDK, ישירות או בעקיפין דרך SDK, תצטרכו לבנות את האפליקציה מחדש כדי פועלים במכשירים האלה בגודל 16KB.

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

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

Benefits and performance gains

במכשירים שמוגדרים בהם דפים בגודל 16KB, נעשה שימוש במעט יותר זיכרון בממוצע, אבל יש גם שיפורים שונים בביצועים של המערכת ושל האפליקציות:

  • זמני השקה קצרים יותר של אפליקציות בזמן שהמערכת נמצאת בלחץ על הזיכרון: נמוך ב-3.16% בממוצע, עם שיפורים משמעותיים יותר (עד 30%) בחלק מהאפליקציות שבדקנו
  • צריכת חשמל מופחתת במהלך השקת האפליקציה: הפחתה של 4.56% בממוצע
  • הפעלה מהירה יותר של המצלמה: הפעלה מתוך הזיכרון (hot start) מהירה יותר ב-4.48% בממוצע, והפעלה מחדש (cold start) מהירה יותר ב-6.60% בממוצע
  • זמן הפעלה משופר של המערכת: שיפור של 8% (כ-950 אלפיות השנייה) בממוצע

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

Check if your app is impacted

אם האפליקציה משתמשת בקוד מקורי, צריך ליצור מחדש את האפליקציה עם תמיכה במכשירים בנפח 16 KB. אם אתם לא בטוחים שהאפליקציה שלכם משתמשת בקוד נייטיב, תוכלו להשתמש בכלי הניתוח ל-APK כדי לזהות אם קיים קוד נייטיב כלשהו, ואז לבדוק את ההתאמה של פלחי ELF לכל ספריות משותפות שתמצאו.

אם האפליקציה שלכם משתמשת רק בקוד שנכתב בשפת התכנות Java או ב-Kotlin, כולל כל הספריות או ערכות ה-SDK, האפליקציה כבר תומכת במכשירים בנפח 16KB. עם זאת, מומלץ לבדוק את האפליקציה בסביבה של 16 KB כדי לוודא שאין נסיגה לא צפויה בהתנהגות האפליקציה.

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

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

כל האפליקציות

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

אפליקציות רפואיות

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

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

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

אפליקציות במרכז האפליקציות

אם מפתחים אפליקציית מרכז אפליקציות, צריך לבצע את הפעולות הבאות לפני האפליקציות המרחב הפרטי יהיה גלוי:

  1. עליך להקצות את האפליקציה שלך כאפליקציית ברירת המחדל למרכז האפליקציות עבור המכשיר – בעל התפקיד ROLE_HOME.
  2. האפליקציה שלך צריכה להצהיר על ACCESS_HIDDEN_PROFILES הרשאה רגילה בקובץ המניפסט של האפליקציה.

אפליקציות במרכז האפליקציות שמצהירות על ההרשאה ACCESS_HIDDEN_PROFILES חייבות לטפל ב- התרחישים הבאים במרחב הפרטי:

  1. לאפליקציה שלך חייב להיות מאגר אפליקציות נפרד עבור אפליקציות שמותקנות המרחב הפרטי. משתמשים בשיטה getLauncherUserInfo() כדי קביעת סוג פרופיל המשתמש המטופל.
  2. למשתמש צריכה להיות אפשרות להסתיר ולהציג את מאגר התגים של המרחב הפרטי.
  3. למשתמש צריכה להיות אפשרות לנעול את המאגר של המרחב הפרטי ולבטל את הנעילה שלו. כדאי להשתמש השיטה requestQuietModeEnabled() לנעילה (על ידי להעביר את true) או לבטל את הנעילה (על ידי העברת false) של המרחב הפרטי.
  4. בזמן נעילה, אף אפליקציה במאגר של המרחב הפרטי לא גלויה או באמצעות מנגנונים כמו חיפוש. האפליקציה שלך צריכה לרשום המקבל של ACTION_PROFILE_AVAILABLE וגם ACTION_PROFILE_UNAVAILABLE משדרים ומעדכנים את ממשק המשתמש באפליקציה כשהמרחב הפרטי במצב נעול או לא נעול שינויים במאגר. שני השידורים האלה כוללים EXTRA_USER, שהאפליקציה יכולה להשתמש בו כדי לעיין משתמש עם פרופיל פרטי.

    אפשר גם להשתמש בשיטה isQuietModeEnabled() כדי: לבדוק אם הפרופיל של המרחב הפרטי נעול.

אפליקציות בחנות האפליקציות

המרחב הפרטי כולל 'התקנת אפליקציות' לחצן שמפעיל מודל מרומז כוונה להתקין אפליקציות במרחב הפרטי של המשתמש. כדי שהאפליקציה שלך לקבל את הכוונה המרומזת הזו, צריך להצהיר על <intent-filter> בקובץ המניפסט של האפליקציה עם <category> מסוג CATEGORY_APP_MARKET.

גופן אמוג'י מבוסס-PNG הוסר

קובץ הגופן הקודם של אמוג'י מבוסס PNG (NotoColorEmojiLegacy.ttf) הוסר, נשאר רק הקובץ המבוסס על וקטור. החל מ-Android 13 (API ברמה 33), קובץ הגופן של האמוג'י ששימש את המערכת לעיבוד אמוג'י השתנה מקובץ PNG לקובץ מבוסס-וקטור. המערכת שמרה את קובץ הגופן הקודם ב-Android 13 ו-14 מטעמי תאימות, כדי אפליקציות עם כלים לעיבוד גופנים משלהן יוכלו להמשיך להשתמש בקובץ הגופנים הקודם עד לביצוע השדרוג.

כדי לבדוק אם האפליקציה מושפעת, כדאי לחפש בקוד האפליקציה הפניות אל קובץ NotoColorEmojiLegacy.ttf.

אפשר לבחור להתאים את האפליקציה בכמה דרכים:

  • שימוש בממשקי API של הפלטפורמה לעיבוד טקסט. אפשר לעבד טקסט למגובה במפת סיביות (bitmap) Canvas ומשתמשים בה כדי לקבל תמונה גולמית במקרה הצורך.
  • הוספת תמיכה בגופן COLRv1 לאפליקציה. ספריית הקוד הפתוח של FreeType תומך ב-COLRv1 בגרסה 2.13.0 גבוהה יותר.
  • כמוצא אחרון, אפשר לקבץ את קובץ הגופן הקודם של האמוג'י (NotoColorEmoji.ttf) ל-APK, אבל במקרה כזה האפליקציה שלכם לא תכלול את עדכוני האמוג'י האחרונים. עבור מידע נוסף זמין במאמר פרויקט Noto אמוג'י ב-GitHub .

הגרסה המינימלית של SDK היעד הועלתה מ-23 ל-24

Android 15 מבוסס על השינויים שבוצעו ב-Android 14 ומרחיב את האבטחה הזו. ב-Android 15, אפליקציות עם לא ניתן להתקין את התוסף targetSdkVersion שמכיל פחות מ-24. דרישה שהאפליקציות צריכות לעמוד ברמות API מודרניות עוזרת לשמור על אבטחה טובה יותר פרטיות.

תוכנות זדוניות מכוונות לעיתים קרובות לרמות נמוכות יותר של API כדי לעקוף את האבטחה והפרטיות באמצעי ההגנה שהוכנסו לשימוש בגרסאות מתקדמות יותר של Android. לדוגמה, אפליקציות זדוניות מסוימות משתמשות ב-targetSdkVersion של 22 כדי להימנע מהתחייבות למודל ההרשאות בסביבת זמן הריצה שהוצג ב-2015 ב-Android 6.0 Marshmallow (רמת API 23). השינוי הזה ב-Android 15 מקשה על תוכנות זדוניות להימנע מאבטחה ושיפורים בפרטיות. ניסיון להתקין אפליקציה שמטרגטת ממשק API נמוך יותר יוביל לכשל בהתקנה, ותופיע הודעה כמו ההודעה הבאה מופיע ב-Logcat:

INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 24, but found 7

במכשירים ששודרגו ל-Android 15, אפליקציות עם targetSdkVersion נמוך מ-24 יישארו מותקנות.

אם צריך לבדוק אפליקציה שמטרגטת רמת API ישנה יותר, אפשר להשתמש ב-ADB הבא הפקודה:

adb install --bypass-low-target-sdk-block FILENAME.apk

אבטחה ופרטיות

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

כדי לוודא שהאפליקציות שלהם תואמות לשינויים ב-Android 15, המפתחים צריכים לשים לב לנקודות הבאות:

השמטת סיסמה חד-פעמית

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

הגנה על שיתוף המסך

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

מצלמה ומדיה

ב-Android 15 מתבצעים השינויים הבאים בהתנהגות של המצלמה והמדיה בכל האפליקציות.

הפעלת אודיו ישיר והעברת אודיו מבטלות טראקים של אודיו ישיר או של אודיו שהועברו בעבר כשמגיעים למגבלות המשאבים

Before Android 15, if an app requested direct or offload audio playback while another app was playing audio and the resource limits were reached, the app would fail to open a new AudioTrack.

Beginning with Android 15, when an app requests direct or offload playback and the resource limits are reached, the system invalidates any currently open AudioTrack objects which prevent fulfilling the new track request.

(Direct and offload audio tracks are typically opened for playback of compressed audio formats. Common use-cases for playing direct audio include streaming encoded audio over HDMI to a TV. Offload tracks are typically used to play compressed audio on a mobile device with hardware DSP acceleration.)

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

Android 15 כולל כמה שינויים שנועדו ליצור חוויית משתמש עקבית ואינטואיטיבית יותר.

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

Beginning in Android 15, the developer option for predictive back animations has been removed. System animations such as back-to-home, cross-task, and cross-activity now appear for apps that have opted in to the predictive back gesture either entirely or at an activity level. If your app is affected, take the following actions:

  • Ensure that your app has been properly migrated to use the predictive back gesture.
  • Ensure that your fragment transitions work with predictive back navigation.
  • Migrate away from animation and framework transitions and use animator and androidx transitions instead.
  • Migrate away from back stacks that FragmentManager doesn't know about. Use back stacks managed by FragmentManager or by the Navigation component instead.

ווידג'טים מושבתים כשהמשתמש משבית אפליקציה בכוח

If a user force-stops an app on a device running Android 15, the system temporarily disables all the app's widgets. The widgets are grayed out, and the user cannot interact with them. This is because beginning with Android 15, the system cancels all an app's pending intents when the app is force-stopped.

The system re-enables those widgets the next time the user launches the app.

For more information, see Changes to package stopped state.

צ'יפ בסרגל הסטטוס של הקרנת המדיה מתריע למשתמשים על שיתוף מסך, הפעלת Cast והקלטה

Screen projection exploits expose private user data such as financial information because users don't realize their device screen is being shared. Android has until now shown screen cast and screen record icons on the status bar, but the icons are small and often overlooked. Also, stopping screen sharing or recording is cumbersome because controls are in Quick Settings.

Android 15 introduces a new status bar chip that is large and prominent, which should alert users to any in-progress screen projection. Users can tap the chip to stop their screen from being shared, cast, or recorded.

To provide an intuitive user experience, screen projection now automatically stops when the device screen is locked.

Benefits and performance gains

The new media projection status bar chip enhances the user experience as follows:

  • Alerts users to in-progress screen sharing, casting, or recording
  • Enable users to terminate screen projection by tapping the chip

Automatic suspension of screen projection when the device screen is locked ensures user privacy.

Check if your app is impacted

By default, your app includes the new status bar chip and automatically suspends screen projection when the lock screen activates. Test your app by implementing the onStop() method of the MediaProjection.Callback. Verify that your app responds appropriately when the screen projection stops as a result of the user tapping the status bar chip or when the lock screen activates.

תכונות שיצאו משימוש

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

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