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

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

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

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

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

שינויים במצב העצירה של החבילה

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

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

אפשר להפעיל את השיטה החדשה ApplicationStartInfo.wasForceStopped() כדי לוודא שהאפליקציה הועברה למצב מושהה.

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

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

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

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

יתרונות ושיפור בביצועים

配置为使用 16 KB 页面大小的设备平均会使用略多一些的内存,但系统和应用的性能也会得到各种提升:

  • 缩短了系统内存压力时的应用启动时间:平均降低了 3.16%;对于我们测试的某些应用而言,改进幅度更大(最高可达 30%)
  • 应用启动期间的功耗降低:平均降低了 4.56%
  • 相机启动更快:热启动速度平均提高了 4.48%,冷启动速度平均提高了 6.60%
  • 缩短了系统启动时间:平均缩短了 8%(约 950 毫秒)

这些改进基于我们的初始测试,实际设备上的结果可能会有所不同。随着测试的继续进行,我们将进一步分析应用的潜在收益。

איך בודקים אם האפליקציה שלכם מושפעת

如果您的应用使用了任何原生代码,则应重新构建应用,使其支持 16 KB 设备。如果您不确定自己的应用是否使用了原生代码,可以使用 APK 分析器来确定是否存在任何原生代码,然后检查您找到的任何共享库的 ELF 段对齐情况。Android Studio 还提供了一些功能,可帮助您自动检测对齐问题

如果您的应用仅使用以 Java 或 Kotlin 编程语言编写的代码(包括所有库或 SDK),则该应用已支持 16 KB 设备。不过,我们建议您在 16 KB 环境中测试应用,以验证应用行为是否出现意外的回归。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

我们移除了基于 PNG 的旧版表情符号字体文件 (NotoColorEmojiLegacy.ttf),只保留了基于矢量的文件。从 Android 13(API 级别 33)开始,系统表情符号渲染程序使用的表情符号字体文件已从基于 PNG 的文件更改为基于矢量的文件。出于兼容性原因,系统在 Android 13 和 14 中保留了旧版字体文件,以便具有自己的字体渲染程序的应用在能够升级之前继续使用旧版字体文件。

如需检查您的应用是否受到影响,请在应用的代码中搜索对 NotoColorEmojiLegacy.ttf 文件的引用。

您可以通过多种方式自适应应用:

  • 使用平台 API 进行文本渲染。您可以将文本渲染到基于位图的 Canvas,并在必要时使用该 Canvas 获取原始图片。
  • 为您的应用添加 COLRv1 字体支持。FreeType 开源库在 2.13.0 版及更高版本中支持 COLRv1。
  • 作为最后的手段,您可以将旧版表情符号字体文件 (NotoColorEmoji.ttf) 捆绑到 APK 中,但在这种情况下,您的应用将缺少最新的表情符号更新。如需了解详情,请参阅 Noto Emoji GitHub 项目页面

הגדלנו את גרסת ה-SDK המינימלית לטירגוט מ-23 ל-24

Android 15 基于 在 Android 14 中进行的更改,并扩展了 安全性。在 Android 15 中, 无法安装低于 24 的 targetSdkVersion。 要求应用符合现代 API 级别有助于确保更好的安全性和 保护隐私。

恶意软件通常会以较低的 API 级别为目标平台,以绕过安全和隐私 更高的 Android 版本中引入的保护机制。例如,有些恶意软件应用使用 targetSdkVersion 22,以避免受到 Android 6.0 Marshmallow(API 级别 23)在 2015 年引入的运行时权限模型的约束。这项 Android 15 变更使恶意软件更难以规避安全和隐私权方面的改进限制。尝试安装以较低 API 级别为目标平台的应用将导致安装失败,并且 Logcat 中会显示如下所示的消息:

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

在升级到 Android 15 的设备上,targetSdkVersion 级别较低的任何应用 安装在 Google Play 上

如果您需要测试以旧版 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 בוצעו השינויים הבאים בהתנהגות של המצלמה והמדיה בכל האפליקציות.

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

לפני Android 15, אם אפליקציה ביקשה הפעלת אודיו ישירה או הפעלת אודיו בהעברה (offload) בזמן שאפליקציה אחרת הפעילה אודיו והגעתם למגבלות המשאבים, האפליקציה לא הצליחה לפתוח AudioTrack חדש.

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

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

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

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

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

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

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

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

如果用户在搭载 Android 15 的设备上强制停止应用,系统会暂时停用该应用的所有微件。这些 widget 会灰显,用户无法与其互动。这是因为,从 Android 15 开始,当系统强制停止应用时,会取消应用的所有待处理 intent。

系统会在用户下次启动应用时重新启用这些微件。

如需了解详情,请参阅对软件包停止状态的更改

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

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

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

צ'יפ בשורת הסטטוס לשיתוף מסך, להעברה (cast) ולהקלטה.

איך בודקים אם האפליקציה שלכם מושפעת

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

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

הגבלות על גישה לרשת ברקע

In Android 15, apps that start a network request outside of a valid process lifecycle receive an exception. Typically, an UnknownHostException or other socket-related IOException. Network requests that happen outside of a valid lifecycle are usually due to apps unknowingly continuing a network request even after the app is no longer active.

To mitigate this exception, ensure your network requests are lifecycle aware and cancelled upon leaving a valid process lifecycle by using lifecycle aware components. If it is important that the network request should happen even when the user leaves the application, consider scheduling the network request using WorkManager or continue a user visible task using Foreground Service.

הפסקת תמיכה

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

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