פלטפורמת Android 15 כוללת שינויים בהתנהגות שעשויים להשפיע על האפליקציה שלכם. שינויי ההתנהגות הבאים רלוונטיים לכל האפליקציות כשהן פועלות ב-Android 15, בלי קשר ל-targetSdkVersion. מומלץ לבדוק את האפליקציה ולשנות אותה לפי הצורך כדי שהיא תתמוך בהתנהגויות האלה בצורה תקינה, במקרים הרלוונטיים.
חשוב גם לעיין ברשימת השינויים בהתנהגות שמשפיעים רק על אפליקציות שמטרגטות ל-Android 15.
פונקציונליות עיקרית
Android 15 משנה או מרחיב יכולות ליבה שונות של מערכת Android.
שינויים במצב העצירה של החבילה
软件包 FLAG_STOPPED 状态(用户可以通过在 AOSP build 中长按应用图标并选择“强制停止”来启用此状态)的用途一直是让应用保持在此状态,直到用户通过直接启动应用或间接与应用互动(通过 Sharesheet 或 widget、将应用选择为动态壁纸等)来明确将应用从此状态移除。在 Android 15 中,我们更新了系统行为,使其与此预期行为保持一致。应用应仅通过直接或间接的用户操作从停止状态移除。
为了支持预期行为,除了现有限制之外,当应用在搭载 Android 15 的设备上进入停止状态时,系统还会取消所有待处理 intent。当用户的操作将应用从停止状态移除时,系统会将 ACTION_BOOT_COMPLETED 广播传送到应用,以便应用有机会重新注册所有待处理 intent。
您可以调用新的 ApplicationStartInfo.wasForceStopped() 方法来确认应用是否已进入停止状态。
תמיכה בגודל דף של 16KB
בעבר, מערכת Android תמכה רק בדפים עם זיכרון בגודל 4KB, מה שאפשר למערכת לייעל את הביצועים של הזיכרון הכולל במכשירים עם נפח זיכרון ממוצע. החל מ-Android 15, AOSP תומך במכשירים שמגדירים בהם גודל דף של 16KB (מכשירים עם 16KB). אם האפליקציה שלך משתמשת בספריות NDK, באופן ישיר או בעקיפין דרך SDK, תצטרכו לבנות מחדש את האפליקציה כדי שהיא תפעל במכשירים האלה עם 16 KB.
יצרני המכשירים ממשיכים לפתח מכשירים עם נפחים גדולים יותר של זיכרון פיזי (RAM). במכשירים רבים כאלה יוטמעו דפים בגודל 16KB (ובסופו של דבר בגודל גדול יותר) כדי לשפר את הביצועים של המכשיר. הוספת תמיכה במכשירים עם גודל דף של 16KB מאפשרת לאפליקציה לפעול במכשירים האלה, וליהנות משיפורי הביצועים שקשורים לכך. בלי קומפילציה מחדש, האפליקציות לא יפעלו במכשירים עם 16 KB בגרסאות עתידיות של Android.
כדי לעזור לכם להוסיף תמיכה לאפליקציה, סיפקנו הנחיות בנושא בדיקה אם יש השפעה על האפליקציה, בנייה מחדש של האפליקציה (אם רלוונטי) ובדיקת האפליקציה בסביבה של 16KB באמצעות אמולטורים (כולל תמונות מערכת של Android 15 לאמולטור של Android).
优势和性能提升
במכשירים שמוגדרים בהם דפים בגודל 16KB, נעשה שימוש במעט יותר זיכרון בממוצע, אבל יש גם שיפורים שונים בביצועים של המערכת ושל האפליקציות:
- זמני השקה קצרים יותר של אפליקציות בזמן שהמערכת נמצאת בלחץ על הזיכרון: נמוך ב-3.16% בממוצע, עם שיפורים משמעותיים יותר (עד 30%) בחלק מהאפליקציות שבדקנו
- צריכת חשמל מופחתת במהלך השקת האפליקציה: הפחתה של 4.56% בממוצע
- הפעלה מהירה יותר של המצלמה: הפעלה מתוך הזיכרון (hot start) מהירה יותר ב-4.48% בממוצע, והפעלה מחדש (cold start) מהירה יותר ב-6.60% בממוצע
- זמן הפעלה משופר של המערכת: שיפור של 8% (כ-950 אלפיות השנייה) בממוצע
השיפורים האלה מבוססים על הבדיקה הראשונית שלנו, וסביר להניח שהתוצאות במכשירים בפועל יהיו שונות. נמשיך לספק ניתוח נוסף של היתרונות הפוטנציאליים של האפליקציות.
检查您的应用是否受到影响
אם האפליקציה שלך משתמשת בקוד Native, עליך לבנות מחדש את האפליקציה עם תמיכה במכשירים עם דפי זיכרון בגודל 16 KB. אם אתם לא בטוחים אם האפליקציה שלכם משתמשת בקוד Native, אתם יכולים להשתמש בכלי APK Analyzer כדי לזהות אם יש קוד Native, ואז לבדוק את ההתאמה של פלחי ELF לכל הספריות המשותפות שמצאתם. ב-Android Studio יש גם תכונות שעוזרות לכם לזהות באופן אוטומטי בעיות שקשורות ליישור.
אם האפליקציה שלך משתמשת רק בקוד שנכתב בשפת התכנות Java או ב-Kotlin, כולל כל הספריות או ערכות ה-SDK, אז האפליקציה כבר תומכת במכשירים עם נפח אחסון של 16 KB. עם זאת, מומלץ לבצע בדיקה של האפליקציה בסביבה של 16 KB כדי לוודא שאין נסיגות לא צפויות בהתנהגות האפליקציה.
שינויים שנדרשים כדי שאפליקציות מסוימות יתמכו במרחב הפרטי
私密空间是 Android 15 中推出的一项新功能,可让用户在设备上创建一个单独的空间,在额外的身份验证层保护下,防止敏感应用遭到窥探。由于私密空间中的应用具有受限的公开范围,因此某些类型的应用需要执行额外的步骤,才能查看和与用户私密空间中的应用互动。
所有应用
由于私密空间中的应用会保存在单独的用户资料中(类似于工作资料),因此应用不应假定其任何未位于主资料中的已安装副本都位于工作资料中。如果您的应用包含与工作资料应用相关的逻辑,并且做出了上述假设,则需要调整此逻辑。
医疗应用
当用户锁定私密空间时,私密空间中的所有应用都会停止运行,并且这些应用无法执行前台或后台活动,包括显示通知。此行为可能会严重影响安装在私密空间中的医疗应用的使用和功能。
私密空间设置体验会向用户发出警告,告知私密空间不适合需要执行关键前台或后台活动的应用,例如显示医疗应用发送的通知。不过,应用无法确定自己是否在私密空间中使用,因此无法在这种情况下向用户显示警告。
因此,如果您开发的是医疗应用,请检查此功能可能会对您的应用产生哪些影响,并采取适当的措施(例如告知用户不要在私密空间中安装您的应用),以免中断关键的应用功能。
启动器应用
如果您开发的是启动器应用,则必须执行以下操作,才能看到私密空间中的应用:
- 您的应用必须被指定为设备的默认启动器应用,即具有
ROLE_HOME角色。 - 您的应用必须在应用的清单文件中声明
ACCESS_HIDDEN_PROFILES普通权限。
声明 ACCESS_HIDDEN_PROFILES 权限的启动器应用必须处理以下私密空间用例:
- 您的应用必须为安装在私密空间中的应用提供单独的启动器容器。使用
getLauncherUserInfo()方法确定要处理的用户个人资料类型。 - 用户必须能够隐藏和显示私密空间容器。
- 用户必须能够锁定和解锁私密空间容器。使用
requestQuietModeEnabled()方法锁定(通过传递true)或解锁(通过传递false)私密空间。 在锁定状态下,私密空间容器中的任何应用都应不可见,也无法通过搜索等机制被发现。您的应用应为
ACTION_PROFILE_AVAILABLE和ACTION_PROFILE_UNAVAILABLE广播注册接收器,并在私密空间容器的锁定或解锁状态发生变化时更新应用中的界面。这两种状态的广播都包含EXTRA_USER,您的应用可以使用该常量来引用不公开个人资料的用户。您还可以使用
isQuietModeEnabled()方法检查私密空间个人资料是否已锁定。
应用商店应用
私密空间包含一个“安装应用”按钮,用于启动隐式 intent 以将应用安装到用户的私密空间。为了让应用能够接收此隐式 intent,请在应用的清单文件中声明一个 <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, אפליקציות עם
לא ניתן להתקין את התוסף 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 בוצעו השינויים הבאים בהתנהגות של המצלמה והמדיה בכל האפליקציות.
הפעלה ישירה של אודיו או הפחתת עומס של אודיו מבטלת את התוקף של טראקים קודמים של אודיו שהופעלו ישירות או שהופחת עומסם, כשמגיעים למגבלות המשאבים
לפני 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 或更高版本的设备上运行的应用,系统会在状态栏中显示一个醒目的大条状标签,以提醒用户正在进行的任何屏幕投影。用户可以点按该条状标签,停止共享、投放或录制其屏幕。此外,当设备屏幕锁定时,屏幕投影会自动停止。
איך בודקים אם האפליקציה שלכם מושפעת
כברירת מחדל, האפליקציה כוללת את הצ'יפ של שורת הסטטוס ומפסיקה אוטומטית את הקרנת המסך כשמסך הנעילה מופעל.
מידע נוסף על בדיקת האפליקציה לגבי התרחישים לדוגמה האלה זמין במאמר צ'יפ בסרגל הסטטוס והפסקה אוטומטית.
הגבלות גישה לרשת ברקע
ב-Android 15, אפליקציות שמתחילות בקשת רשת מחוץ למחזור החיים של התהליך מקבלות חריגה. בדרך כלל, UnknownHostException או IOException אחר שקשור ליציאה. בדרך כלל, בקשות לרשת שמתרחשות מחוץ למחזור חיים תקין נובעות מאפליקציות שממשיכות לשלוח בקשות לרשת בלי ידיעת המשתמשים, גם אחרי שהאפליקציה כבר לא פעילה.
כדי לצמצם את ההחרגה הזו, צריך לוודא שבקשות הרשת מותאמות למחזור החיים שלהן, ושהן מבוטלות כשהן יוצאות ממחזור חיים תקין של תהליך, באמצעות רכיבים שמותאמים למחזור חיים. אם חשוב לכם שהבקשה לרשת תתבצע גם כשהמשתמש יוצא מהאפליקציה, כדאי לתזמן את הבקשה לרשת באמצעות WorkManager או להמשיך במשימה שגלויה למשתמש באמצעות שירות שפועל בחזית.
הפסקת תמיכה
יכול להיות שבכל גרסה של Android, ממשקי API ספציפיים של Android יהפכו למיושנים או שיצטרכו לעבור שינוי כדי לספק חוויית פיתוח טובה יותר או לתמוך ביכולות חדשות של הפלטפורמה. במקרים כאלה, אנחנו מוציאים משימוש באופן רשמי את ממשקי ה-API שיצאו משימוש ומפנים את המפתחים לממשקי API חלופיים שבהם הם יכולים להשתמש במקום זאת.
הוצאה משימוש פירושה שהפסקנו את התמיכה הרשמית בממשקי ה-API, אבל הם ימשיכו להיות זמינים למפתחים. מידע נוסף על הוצאות משימוש חשובות בגרסה הזו של Android זמין בדף ההוצאות משימוש.