ב-Android 15 נוספו תכונות וממשקי API מעולים למפתחים. בקטעים הבאים מופיע סיכום של התכונות האלה שיעזור לכם להתחיל להשתמש בממשקי ה-API הקשורים.
רשימה מפורטת של ממשקי API שנוספו, שונו או הוסרו מופיעה בדוח ההבדלים בין גרסאות ה-API. לפרטים על ממשקי API שנוספו, אפשר לעיין בהפניה ל-Android API. ב-Android 15, מחפשים ממשקי API שנוספו ברמת API 35. כדי לקבל מידע על תחומים שבהם שינויים בפלטפורמה עשויים להשפיע על האפליקציות שלכם, כדאי לעיין בשינויים בהתנהגות ב-Android 15 באפליקציות שמיועדות ל-Android 15 ובכל האפליקציות.
מצלמה ומדיה
Android 15 כולל מגוון תכונות שמשפרות את חוויית השימוש במצלמה ובמדיה, ומאפשרות לכם לגשת לכלים ולחומרה כדי לתמוך ביוצרים בהגשמת החזון שלהם ב-Android.
מידע נוסף על התכונות והפתרונות העדכניים למפתחים בנושא מדיה ומצלמה ב-Android זמין בשיחה Building modern Android media and camera experiences (יצירת חוויות מודרניות של מדיה ומצלמה ב-Android) מ-Google I/O.
שיפור תנאי תאורה ירודים
ב-Android 15 נוספה התכונה שיפור התמונה בתאורה חלשה, מצב חשיפה אוטומטי שזמין גם ב-Camera 2 וגם בתוסף המצלמה של מצב לילה. התכונה 'הגברת התאורה החלשה' מכווננת את החשיפת הסטרימינג של התצוגה המקדימה בתנאים של תאורה חלשה. זה שונה מהאופן שבו התוסף של מצב הלילה במצלמה יוצר תמונות סטילס, כי במצב הלילה נעשה שימוש ברצף של תמונות כדי ליצור תמונה אחת משופרת. מצב לילה מתאים מאוד ליצירת תמונה סטילס, אבל אי אפשר ליצור בו שידור רציף של פריימים. לעומת זאת, התכונה 'שיפור תמונה בתאורה חלשה' מאפשרת לעשות זאת. לכן, התכונה 'שיפור איכות בתנאי תאורה חלשה' מאפשרת למצלמה לבצע פעולות כמו:
- הצגת תצוגה מקדימה משופרת של התמונות, כדי שהמשתמשים יוכלו לבחור מסגרת טובה יותר לתמונות שצולמו בתאורה חלשה
- סריקת קודי QR בתאורה חלשה
אם מפעילים את התכונה'הגברת התאורה החלשה', היא מופעלת באופן אוטומטי כשרמת התאורה נמוכה, ומושבתת כשיש יותר אור.
אפליקציות יכולות לצלם את מקור הווידאו של התצוגה המקדימה בתנאים של תאורה חלשה כדי לשמור סרטון בהיר יותר.
מידע נוסף זמין במאמר שיפור התמונה בתאורה נמוכה.
אמצעי בקרה למצלמה באפליקציה
ב-Android 15 נוספה תוספת שמאפשרת יותר שליטה בחומרה של המצלמה ובאלגוריתמים שלה במכשירים נתמכים:
- כוונונים מתקדמים של עוצמת הפלאש שמאפשרים לשלוט בצורה מדויקת בעוצמת הפלאש במצבים
SINGLEו-TORCHבזמן הצילום.
שליטה במרווח הדינמי של HDR
מערכת Android 15 בוחרת את מרווח ה-HDR שמתאים ליכולות המכשיר ולעומק הביטים של המסך. בדפים שיש בהם הרבה תוכן SDR, כמו אפליקציית הודעות שמציגה תמונה ממוזערת אחת ב-HDR, ההתנהגות הזו עלולה להשפיע לרעה על הבהירות של תוכן ה-SDR. ב-Android 15 אפשר לשלוט במרווח העליון של HDR באמצעות setDesiredHdrHeadroom כדי לשמור על איזון בין תוכן SDR לתוכן HDR.
בקרת עוצמת הקול

Android 15 引入了对 CTA-2075 响度标准的支持,可帮助您避免音频响度不一致,并确保用户在切换内容时不必不断调整音量。系统利用输出设备(头戴式耳机和扬声器)的已知特性以及 AAC 音频内容中提供的响度元数据,智能调整音频响度和动态范围压缩级别。
如需启用此功能,您需要确保 AAC 内容中提供响度元数据,并在应用中启用平台功能。为此,您可以通过使用关联的 AudioTrack 中的音频会话 ID 调用其 create 工厂方法来实例化 LoudnessCodecController 对象;这会自动开始应用音频更新。您可以传递 OnLoudnessCodecUpdateListener 来修改或过滤响度参数,然后再将其应用于 MediaCodec。
// Media contains metadata of type MPEG_4 OR MPEG_D
val mediaCodec = …
val audioTrack = AudioTrack.Builder()
.setSessionId(sessionId)
.build()
...
// Create new loudness controller that applies the parameters to the MediaCodec
try {
val lcController = LoudnessCodecController.create(mSessionId)
// Starts applying audio updates for each added MediaCodec
}
AndroidX media3 ExoPlayer 也将更新,以使用
LoudnessCodecController API,可实现无缝应用集成。
מכשירי MIDI וירטואליים 2.0
ב-Android 13 נוספה תמיכה בחיבור למכשירי MIDI 2.0 באמצעות USB, שמתקשרים באמצעות חבילות MIDI אוניברסליות (UMP). ב-Android 15 הורחבה התמיכה ב-UMP לאפליקציות MIDI וירטואליות, כך שאפליקציות ליצירת מוזיקה יכולות לשלוט באפליקציות סינתיסייזר כמכשיר MIDI 2.0 וירטואלי, בדיוק כמו שהן יכולות לשלוט במכשיר USB MIDI 2.0.
פענוח קוד יעיל יותר של תוכנת AV1
dav1d, מקודד התוכנה הפופולרי של AV1 מ-VideoLAN, זמין למכשירי Android שלא תומכים בפענוח AV1 בחומרה. הביצועים של dav1d טובים פי 3 מאלה של מקודד התוכנה הקודם של AV1, ומאפשרים להפעיל פורמט AV1 באיכות HD למשתמשים רבים יותר, כולל במכשירים מסוימים ברמה נמוכה ובינונית.
כדי להשתמש ב-dav1d, האפליקציה צריכה להביע הסכמה להפעלה שלו בשם "c2.android.av1-dav1d.decoder". בעדכון עתידי, dav1d יהפוך למפענח התוכנה המוגדר כברירת מחדל של AV1. התמיכה הזו סטנדרטית ומועברת לאחור למכשירי Android 11 שמקבלים עדכוני מערכת של Google Play.
פרודוקטיביות וכלים למפתחים
רוב העבודה שלנו לשיפור הפרודוקטיביות מתמקדת בכלים כמו Android Studio, Jetpack Compose וספריות Android Jetpack, אבל אנחנו תמיד מחפשים דרכים בפלטפורמה שיעזרו לכם להגשים את החזון שלכם בקלות רבה יותר.
עדכונים ל-OpenJDK 17
ב-Android 15 ממשיכים בתהליך הרענון של ספריות הליבה של Android, כדי להתאים אותן לתכונות בגרסאות ה-LTS האחרונות של OpenJDK.
התכונות והשיפורים העיקריים שכלולים בגרסה הזו:
- שיפורים באיכות החיים של מאגרי NIO
- Streams
- שיטות נוספות של
mathו-strictmath - עדכוני חבילות של
util, כוללcollection, mapו-set - תמיכה ב-
ByteBufferב-Deflater - עדכוני אבטחה כמו
X500PrivateCredentialועדכוני מפתחות אבטחה
ממשקי ה-API האלה מתעדכנים ביותר ממיליארד מכשירים עם Android 12 (רמת API 31) ואילך דרך עדכוני המערכת של Google Play, כך שתוכלו לטרגט לתכונות התכנות העדכניות ביותר.
שיפורים ב-PDF
Android 15 对 PdfRenderer API 进行了重大改进。应用可以整合呈现等高级功能
受密码保护的文件、注释、表单编辑、
searching,而 selection 则包含副本。支持线性化 PDF 优化,此功能可加快本地 PDF 查看速度并减少资源使用量。Jetpack PDF 库使用这些 API 来简化 PDF 的添加
查看功能。
PdfRenderer 已移至一个可使用 Google
Play 系统更新独立于平台版本,并且我们支持
将这些变更还原到 Android 11(API 级别 30),方法是创建兼容的
Android 15 之前版本的 API Surface,称为
PdfRendererPreV。
שיפורים בהחלפת שפה אוטומטית
ב-Android 14 נוספה יכולת זיהוי אודיו בכמה שפות במכשיר, עם מעבר אוטומטי בין השפות. עם זאת, יכול להיות שהמילה לא תזוהה אם המעבר בין השפות קצר מדי. ב-Android 15 נוספו אמצעי בקרה נוספים שיעזרו לאפליקציות להתאים את המעבר הזה לתרחיש השימוש שלהן.
הערך EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS מגביל את המעבר האוטומטי לתחילת סשן האודיו, ואילו הערך EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES משבית את המעבר בין השפות אחרי מספר מוגדר של מעברים. האפשרויות האלה שימושיות במיוחד אם אתם צופים שייאמר רק שפה אחת במהלך הסשן, ושצריך לזהות אותה באופן אוטומטי.
שיפור של OpenType Variable Font API
ב-Android 15 שיפרנו את נוחות השימוש בגופן המשתנה OpenType. אפשר ליצור
מופע FontFamily מגופן משתנה בלי לציין צירי משקל
באמצעות ממשק ה-API של buildVariableFamily. הכלי לרינדור הטקסט מבטל את הערך
של ציר wght כדי להתאים לטקסט המוצג.
השימוש ב-API מפשט באופן משמעותי את הקוד ליצירת Typeface:
Kotlin
val newTypeface = Typeface.CustomFallbackBuilder( FontFamily.Builder( Font.Builder(assets, "RobotoFlex.ttf").build()) .buildVariableFamily()) .build()
Java
Typeface newTypeface = Typeface.CustomFallbackBuilder( new FontFamily.Builder( new Font.Builder(assets, "RobotoFlex.ttf").build()) .buildVariableFamily()) .build();
בעבר, כדי ליצור את אותו Typeface, היה צורך בקוד הרבה יותר ארוך:
Kotlin
val oldTypeface = Typeface.CustomFallbackBuilder( FontFamily.Builder( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 400") .setWeight(400) .build()) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 100") .setWeight(100) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 200") .setWeight(200) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 300") .setWeight(300) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 500") .setWeight(500) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 600") .setWeight(600) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 700") .setWeight(700) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 800") .setWeight(800) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 900") .setWeight(900) .build() ).build() ).build()
Java
Typeface oldTypeface = new Typeface.CustomFallbackBuilder( new FontFamily.Builder( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 400") .setWeight(400) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 100") .setWeight(100) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 200") .setWeight(200) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 300") .setWeight(300) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 500") .setWeight(500) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 600") .setWeight(600) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 700") .setWeight(700) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 800") .setWeight(800) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 900") .setWeight(900) .build() ) .build() ).build();
דוגמה לאופן שבו Typeface שנוצר באמצעות ה-API הישן והחדש מומר:
בדוגמה הזו, ה-Typeface שנוצר באמצעות ה-API הישן לא כולל את
יכולת ליצור משקלים מדויקים של גופנים עבור 350, 450, 550 ו-650
מופעים של Font, כך שהכלי לרינדור חוזר למשקל הקרוב ביותר. לכן במקרה הזה, 300 יומר במקום 350, 400 יומר במקום 450 וכן הלאה. לעומת זאת, ה-Typeface שנוצר באמצעות ממשקי ה-API החדשים יוצר באופן דינמי.
את המכונה Font למשקל נתון, כך שהתוצאה המדויקת של משקולות היא 350,
450, 550 ו-650.
אמצעי בקרה מפורטים למעברי שורה
从 Android 15 开始,TextView 和底层行断开符可以将给定部分文本保留在同一行中,以提高可读性。您可以通过在字符串资源或 createNoBreakSpan 中使用 <nobreak> 标记来充分利用此换行符自定义功能。同样,您可以使用 <nohyphen> 标记或 createNoHyphenationSpan 来防止对字词进行分词。
例如,以下字符串资源不包含换行符,在呈现时,文本“Pixel 8 Pro”会在不合适的位置换行:
<resources>
<string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>
相比之下,此字符串资源包含 <nobreak> 标记,该标记会将字词“Pixel 8 Pro”换行,并防止换行:
<resources>
<string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>
以下图片展示了这些字符串呈现方式的差异:
<nobreak> 标记换行。
<nobreak> 标记封装“Pixel 8 Pro.”短语的同一行文本的布局。העברת אפליקציות לארכיון
השנה הודענו על תמיכה ב-Android וב-Google Play בהעברת אפליקציות לארכיון, כדי לאפשר למשתמשים לפנות מקום במכשיר על ידי הסרה חלקית של אפליקציות שהם משתמשים בהן לעיתים רחוקות, ופורסמו באמצעות Android App Bundle ב-Google Play. Android 15 כולל תמיכה ברמת מערכת ההפעלה בהעברה של אפליקציות לארכיון ובביטול ההעברה שלהן לארכיון, כך שקל יותר לכל חנויות האפליקציות להטמיע את התכונה הזו.
אפליקציות עם ההרשאה REQUEST_DELETE_PACKAGES יכולות לקרוא ל
השיטה PackageInstaller requestArchive כדי לבקש העברה לארכיון
חבילת אפליקציה מותקנת, שמסירה את ה-APK וכל הקבצים שנשמרו במטמון, אבל ממשיכה
נתוני משתמש. אפליקציות שהועברו לארכיון מוחזרות כאפליקציות שניתנות להצגה דרך ממשקי ה-API של LauncherApps. המשתמשים יראו שינוי בממשק המשתמש כדי להדגיש שהאפליקציות האלה הועברו לארכיון. אם משתמש מקיש על אפליקציה שהועברה לארכיון, מנהל ההתקנה האחראי הוא זה
יקבל בקשה לאחזר אותו מהארכיון, ותהליך השחזור יכול
נמצאים במעקב של ACTION_PACKAGE_ADDED.
הפעלת מצב 16 KB במכשיר באמצעות אפשרויות למפתחים
כדי להפעיל מכשיר במצב 16KB, מעבירים את המתג של אפשרות המפתחים הפעלה בגודל דף של 16KB.
בגרסאות QPR של Android 15, אפשר להשתמש באפשרות למפתחים שזמינה במכשירים מסוימים כדי להפעיל את המכשיר במצב 16KB ולבצע בדיקות במכשיר. לפני שמשתמשים באפשרות למפתחים, עוברים אל הגדרות > מערכת > עדכוני תוכנה ומחילים את כל העדכונים שזמינים.
אפשרות למפתחים זו זמינה במכשירים הבאים:
Pixel 8 ו-Pixel 8 Pro (עם Android 15 QPR1 ומעלה)
Pixel 8a (עם Android 15 QPR1 ומעלה)
Pixel 9, Pixel 9 Pro ו-Pixel 9 Pro XL (עם Android 15 QPR2 ומעלה)
Pixel 9a (עם Android מגרסה 16 ואילך)
גרפיקה
Android 15 כולל את השיפורים האחרונים בגרפיקה, כולל ANGLE ותוספות למערכת הגרפיקה Canvas.
מודרניזציה של הגישה ל-GPU ב-Android
חומרת Android התפתחה משמעותית מאז הימים הראשונים שבהם הליבה של מערכת ההפעלה רצה על מעבד יחיד, והגישה ל-GPU התבצעה באמצעות ממשקי API שמבוססים על צינורות עיבוד נתונים עם פונקציות קבועות. Vulkan® graphics API זמין ב-NDK מאז Android 7.0 (רמת API 24) עם הפשטה ברמה נמוכה יותר שמשקפת טוב יותר את החומרה המודרנית של המעבד הגרפי, מתאימה טוב יותר לתמיכה בכמה ליבות של מעבדים ומציעה עלות ריבית נמוכה יותר של מנהל ה-CPU – וכך משפרת את ביצועי האפליקציה. כל מנועי המשחקים המודרניים תומכים ב-Vulkan.
Vulkan הוא הממשק המועדף של Android ל-GPU. לכן, Android 15 כולל את ANGLE כשכבה אופציונלית להרצת OpenGL® ES מעל Vulkan. המעבר ל-ANGLE יעזור לסטנדרטיזציה של הטמעת OpenGL ב-Android, כדי לשפר את התאימות ובמקרים מסוימים גם את הביצועים. כדי לבדוק את היציבות והביצועים של אפליקציות OpenGL ES באמצעות ANGLE, מפעילים את האפשרות למפתחים ב-Android 15: הגדרות -> מערכת -> אפשרויות למפתחים -> ניסיוני: הפעלת ANGLE.
מפת הדרכים של Android ANGLE ב-Vulkan
כחלק מהיעילות של סטאק ה-GPU שלנו, מעכשיו נתחיל לשלוח את ANGLE בתור מנהל המערכת GL במכשירים חדשים נוספים, ומצפים שבעתיד OpenGL/ES תהיה זמינה רק דרך ANGLE. עם זאת, אנחנו מתכננים להמשיך את התמיכה ב-OpenGL ES בכל המכשירים.
השלבים המומלצים הבאים
אפשר להשתמש באפשרויות למפתחים כדי לבחור את הנהג ANGLE ל-OpenGL ES ולבדוק את האפליקציה. בפרויקטים חדשים, מומלץ מאוד להשתמש ב-Vulkan ל-C/C++.
שיפורים ב-Canvas
ב-Android 15 אנחנו ממשיכים בתהליך המודרניזציה של מערכת הגרפיקה של Android ב-Canvas, עם יכולות נוספות:
Matrix44מספק מטריקס 4x4 לטרנספורמציה של קואורדינטות, שצריך להשתמש בו כשרוצים לבצע פעולות על הלוח ב-3D.- הפונקציה
clipShaderיוצרת חפיפה בין הקליפ הנוכחי לבין ה-shader שצוין, ואילו הפונקציהclipOutShaderמגדירה את הקליפ כהפרש בין הקליפ הנוכחי לבין ה-shader, כאשר כל אחת מהן מתייחסת ל-shader כלמסיכת אלפא. כך אפשר לצייר בצורה יעילה צורות מורכבות.
ביצועים וסוללה
אנחנו ממשיכים להתמקד בשיפור הביצועים והאיכות של האפליקציות שלכם ב-Android. ב-Android 15 מוצגים ממשקי API שעוזרים לבצע משימות באפליקציה בצורה יעילה יותר, לבצע אופטימיזציה של ביצועי האפליקציה ולאסוף תובנות לגבי האפליקציות.
כדי לקבל מידע על שיטות מומלצות לשימוש יעיל בסוללה, על ניפוי באגים בשימוש ברשת ובצריכת החשמל ועל שיפור היעילות של הסוללה בעבודה ברקע ב-Android 15 ובגרסאות עדכניות של Android, אפשר לצפות בהרצאה Improving battery efficiency of background work on Android מ-Google I/O.
ApplicationStartInfo API
בגרסאות קודמות של Android, הפעלת האפליקציות הייתה קצת מסתורית. היה קשה לקבוע באפליקציה אם היא הופעלה במצב 'התחלה קרה', 'התחלה חמה' או 'התחלה חמה מאוד'. בנוסף, היה קשה לדעת כמה זמן האפליקציה נמשכה בשלבים השונים של ההשקה: יצירת ענף בתהליך, קריאה ל-onCreate, ציור המסגרת הראשונה ועוד. כשהיווצר אובייקט של הכיתה Application, לא הייתה לכם אפשרות לדעת אם האפליקציה הופעלה על ידי שידור, ספק תוכן, משימה, גיבוי, סיום האתחול, אזעקה או Activity.
ה-API של ApplicationStartInfo ב-Android 15 מספק את כל הפונקציות האלה ועוד. אפשר גם להוסיף חותמות זמן משלכם לתהליך כדי לאסוף נתוני תזמון במקום אחד. בנוסף לאיסוף מדדים, אפשר להשתמש ב-ApplicationStartInfo כדי לבצע אופטימיזציה ישירה של הפעלת האפליקציה. לדוגמה, אפשר למנוע את היצירה היקרה של ספריות שקשורות לממשק המשתמש בכיתה Application כשהאפליקציה מופעלת בגלל שידור.
מידע מפורט על גודל האפליקציה
החל מגרסה 8.0 של Android (רמת API 26), מערכת Android כוללת את ה-API StorageStats.getAppBytes שמסכם את הגודל ההתקנה של אפליקציה כמספר יחיד של בייטים, שהוא סכום של גודל ה-APK, גודל הקבצים שחולצו מה-APK וקבצים שנוצרו במכשיר, כמו קוד שעבר הידור מראש (AOT). המספר הזה לא מספק הרבה תובנות לגבי האופן שבו האפליקציה משתמשת באחסון.
ב-Android 15 נוספה ה-API StorageStats.getAppBytesByDataType([type]), שמאפשרת לקבל תובנות לגבי האופן שבו האפליקציה משתמשת בכל האחסון הזה, כולל חלוקות של קובצי APK, קוד שקשור ל-AOT ולשיפור המהירות, מטא-נתונים של dex, ספריות ופרופילים מודרכים.
יצירת פרופילים שמנוהלת על ידי האפליקציה
מערכת Android 15 כוללת את הכיתה ProfilingManager, שמאפשרת לאסוף מידע על פרופיל האפליקציה, כמו דיווחים על אשכול, פרופילים של אשכול, דגימות מ-stack ועוד. הוא מספק קריאה חוזרת לאפליקציה עם תג שסופק כדי לזהות את קובץ הפלט, שמועבר לספריית הקבצים של האפליקציה. ממשק ה-API מגביל את קצב הבקשות כדי למזער את ההשפעה על הביצועים.
כדי לפשט את תהליך היצירה של בקשות ליצירת פרופילים באפליקציה, מומלץ להשתמש ב-Profiling AndroidX API המתאים, שזמין ב-Core 1.15.0-rc01 ואילך.
שיפורים במסד נתונים של SQLite
Android 15 引入了 SQLite API,这些 API 可公开底层 SQLite 引擎的高级功能,以解决可能在应用中出现的特定性能问题。将 SQLite 更新到版本 3.44.3。
开发者应参阅 SQLite 性能最佳实践 以便充分利用其 SQLite 数据库,尤其是在处理大型 或运行对延迟敏感的查询时
- 只读延迟事务:在发出
只读(不包括写入语句),请使用
beginTransactionReadOnly()和beginTransactionWithListenerReadOnly(SQLiteTransactionListener)发出只读的DEFERRED事务。此类事务 如果数据库处于 WAL 模式 与IMMEDIATE或EXCLUSIVE事务并发运行。 - 行数和 ID:添加了 API 以检索已更改的行数和 ID
行或最后插入的行 ID 而不发出额外的查询。
getLastChangedRowCount()会返回当前事务中最近的 SQL 语句插入、更新或删除的行数,而getTotalChangedRowCount()会返回当前连接的计数。getLastInsertRowId()返回最后一行的rowid以便在当前连接中插入 - 原始语句:发出原始 SQlite 语句,从而绕过便利 及其可能产生的任何额外处理开销。
עדכונים ל-Android Dynamic Performance Framework
ב-Android 15 אנחנו ממשיכים להשקיע ב-Android Dynamic Performance Framework (ADPF), קבוצה של ממשקי API שמאפשרים למשחקים ולאפליקציות עם ביצועים כבדים לקיים אינטראקציה ישירה יותר עם מערכות החשמל והתרמית של מכשירי Android. במכשירים נתמכים, Android 15 מוסיף יכולות ADPF:
- מצב חיסכון באנרגיה לסשנים של רמזים, כדי לציין שהשרשורים המשויכים צריכים להעדיף חיסכון באנרגיה על פני ביצועים. המצב הזה מתאים מאוד לעומסי עבודה ארוכים ברקע.
- אפשר לדווח על משכי העבודה של ה-GPU ושל המעבד במהלך סשנים של הנחיות, וכך לאפשר למערכת לשנות את התדרים של המעבד ושל ה-GPU יחד כדי לעמוד בצורה הטובה ביותר בדרישות של עומס העבודה.
- סף מרווח תרמי כדי לפרש את סטטוס הצמצום התרמי האפשרי על סמך תחזית של מרווח.
במסמכי העזרה תוכלו לקרוא מידע נוסף על השימוש ב-ADPF באפליקציות ובמשחקים.
פרטיות
Android 15 כולל מגוון תכונות שעוזרות למפתחי אפליקציות להגן על פרטיות המשתמשים.
זיהוי של הקלטת מסך
Android 15 增加了对应用的支持,以检测 正在录制。每当应用转换时,系统都会调用回调 在屏幕录制内容中处于可见与隐藏状态之间。如果正在记录注册进程的 UID 拥有的 activity,则系统会将应用视为可见。这样一来,如果您的应用执行敏感操作,您就可以告知用户正在录制他们的操作。
val mCallback = Consumer<Int> { state ->
if (state == SCREEN_RECORDING_STATE_VISIBLE) {
// We're being recorded
} else {
// We're not being recorded
}
}
override fun onStart() {
super.onStart()
val initialState =
windowManager.addScreenRecordingCallback(mainExecutor, mCallback)
mCallback.accept(initialState)
}
override fun onStop() {
super.onStop()
windowManager.removeScreenRecordingCallback(mCallback)
}
יכולות מורחבות של IntentFilter
ב-Android 15 יש תמיכה בפתרון מדויק יותר של Intent באמצעות UriRelativeFilterGroup, שמכיל קבוצה של אובייקטים מסוג UriRelativeFilter שמרכיבים קבוצה של כללי התאמה ל-Intent, שכל אחד מהם חייב להתקיים, כולל פרמטרים של שאילתה לגבי כתובת URL, קטעי כתובת URL וכללי חסימה או החרגה.
אפשר להגדיר את הכללים האלה בקובץ ה-XML AndroidManifest באמצעות התג <uri-relative-filter-group>, שיכול לכלול גם תג android:allow. התגים האלה יכולים להכיל תגי <data> שמשתמשים במאפיינים של תגי נתונים קיימים, וגם במאפיינים android:query ו-android:fragment.
דוגמה לסינטקס של AndroidManifest:
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="astore.com" />
<uri-relative-filter-group>
<data android:pathPrefix="/auth" />
<data android:query="region=na" />
</uri-relative-filter-group>
<uri-relative-filter-group android:allow="false">
<data android:pathPrefix="/auth" />
<data android:query="mobileoptout=true" />
</uri-relative-filter-group>
<uri-relative-filter-group android:allow="false">
<data android:pathPrefix="/auth" />
<data android:fragmentPrefix="faq" />
</uri-relative-filter-group>
</intent-filter>
המרחב הפרטי
המרחב הפרטי מאפשר למשתמשים ליצור מרחב נפרד במכשיר שבו הם יכולים לשמור אפליקציות עם מידע אישי רגיש מפני עיניים זרות, באמצעות שכבת אימות נוספת. במרחב הפרטי נעשה שימוש בפרופיל משתמש נפרד. המשתמש יכול לבחור אם להשתמש בנעילת המכשיר או בשיטת ביטול נעילה נפרדת למרחב הפרטי.
האפליקציות במרחב הפרטי מופיעות במאגר נפרד במרכז האפליקציות, והן מוסתרות מהתצוגה של האפליקציות האחרונות, מההתראות, מההגדרות ומאפליקציות אחרות כשהמרחב הפרטי נעול. תוכן שנוצר על ידי משתמשים והורדתם (כמו מדיה או קבצים) וחשבונות מופרדים בין המרחב הפרטי למרחב הראשי. אתם יכולים להשתמש בלוח השיתוף של המערכת ובכלי לבחירת תמונות כדי לתת לאפליקציות גישה לתוכן במרחבים השונים כשהמרחב הפרטי לא נעול.
המשתמשים לא יכולים להעביר אפליקציות קיימות ואת הנתונים שלהן למרחב הפרטי. במקום זאת, המשתמשים בוחרים אפשרות התקנה במרחב הפרטי כדי להתקין אפליקציה באמצעות חנות האפליקציות המועדפת עליהם. אפליקציות במרחב הפרטי מותקנות כעותקים נפרדים מאפליקציות במרחב הראשי (עותקים חדשים של אותה אפליקציה).
כשמשתמש נועל את המרחב הפרטי, הפרופיל מושבת. כשהפרופיל מושבת, האפליקציות במרחב הפרטי כבר לא פעילות ולא יכולות לבצע פעילויות בחזית או ברקע, כולל הצגת התראות.
מומלץ לבדוק את האפליקציה במרחב הפרטי כדי לוודא שהיא פועלת כצפוי, במיוחד אם האפליקציה שייכת לאחת מהקטגוריות הבאות:
- אפליקציות עם לוגיקה לפרופילי עבודה שמניחות שכל העותק המותקנים של האפליקציה שלא נמצאים בפרופיל הראשי נמצאים בפרופיל העבודה.
- אפליקציות רפואיות
- אפליקציות מרכז האפליקציות
- אפליקציות בחנות האפליקציות
שאילתה לבחירת המשתמש העדכנית ביותר לגישה לתמונות נבחרות
אפליקציות יכולות להדגיש עכשיו רק את התמונות והסרטונים שנבחרו לאחרונה
ניתנה גישה חלקית להרשאות המדיה. התכונה הזו יכולה לשפר
את חוויית המשתמש של אפליקציות שמבקשות לעיתים קרובות גישה לתמונות
סרטונים. כדי להשתמש בתכונה הזו באפליקציה, מפעילים את הארגומנט QUERY_ARG_LATEST_SELECTION_ONLY כששולחים שאילתה אל MediaStore דרך ContentResolver.
Kotlin
val externalContentUri = MediaStore.Files.getContentUri("external") val mediaColumns = arrayOf( FileColumns._ID, FileColumns.DISPLAY_NAME, FileColumns.MIME_TYPE, ) val queryArgs = bundleOf( // Return only items from the last selection (selected photos access) QUERY_ARG_LATEST_SELECTION_ONLY to true, // Sort returned items chronologically based on when they were added to the device's storage QUERY_ARG_SQL_SORT_ORDER to "${FileColumns.DATE_ADDED} DESC", QUERY_ARG_SQL_SELECTION to "${FileColumns.MEDIA_TYPE} = ? OR ${FileColumns.MEDIA_TYPE} = ?", QUERY_ARG_SQL_SELECTION_ARGS to arrayOf( FileColumns.MEDIA_TYPE_IMAGE.toString(), FileColumns.MEDIA_TYPE_VIDEO.toString() ) )
Java
Uri externalContentUri = MediaStore.Files.getContentUri("external"); String[] mediaColumns = { FileColumns._ID, FileColumns.DISPLAY_NAME, FileColumns.MIME_TYPE }; Bundle queryArgs = new Bundle(); queryArgs.putBoolean(MediaStore.QUERY_ARG_LATEST_SELECTION_ONLY, true); queryArgs.putString(MediaStore.QUERY_ARG_SQL_SORT_ORDER, FileColumns.DATE_ADDED + " DESC"); queryArgs.putString(MediaStore.QUERY_ARG_SQL_SELECTION, FileColumns.MEDIA_TYPE + " = ? OR " + FileColumns.MEDIA_TYPE + " = ?"); queryArgs.putStringArray(MediaStore.QUERY_ARG_SQL_SELECTION_ARGS, new String[] { String.valueOf(FileColumns.MEDIA_TYPE_IMAGE), String.valueOf(FileColumns.MEDIA_TYPE_VIDEO) });
ארגז החול לפרטיות ב-Android
Android 15 כולל את התוספים העדכניים ביותר של Android Ad Services, שמשלבים את הגרסה העדכנית ביותר של ארגז החול לפרטיות ב-Android. ההוספה הזו היא חלק מהמאמצים שלנו לפתח טכנולוגיות שישפרו את פרטיות המשתמשים ויאפשרו חוויית פרסום יעילה ומותאמת אישית באפליקציות לנייד. בדף של ארגז החול לפרטיות מפורט מידע נוסף על ארגז החול לפרטיות בתוכניות הבטא ובגרסת ה-Preview למפתחים של Android, שיעזרו לכם להתחיל.
Health Connect
ב-Android 15 משולבים התוספים העדכניים ביותר של Health Connect by Android, פלטפורמה מאובטחת ומרכזית לניהול ולשיתוף של נתוני בריאות וכושר שנאספים באפליקציות. העדכון הזה מוסיף תמיכה בסוגי נתונים נוספים בנושאי כושר, תזונה, טמפרטורת העור, תוכניות אימון ועוד.
מעקב אחרי טמפרטורת העור מאפשר למשתמשים לאחסן ולשתף נתוני טמפרטורה מדויקים יותר ממכשיר לבישה או ממכשיר מעקב אחר פעילות אחר.
תוכניות אימונים הן תוכניות אימונים מובנות שיעזרו למשתמש להשיג את יעדי הכושר שלו. תוכניות האימונים כוללות תמיכה במגוון מטרות להשגה וביעדי ביצועים:
- יעדי השלמה לגבי קלוריות שנשרפו, מרחק, משך זמן, חזרה וצעדים.
- יעדי ביצועים כ- חזרות רבות ככל האפשר (AMRAP), קצב הלב, קצב הלב, חשמל, שיעור תפיסת הפעילות הגופנית, וגם מהירות.
מידע נוסף על העדכונים האחרונים של Health Connect ב-Android זמין יצירת חוויות שניתנות להתאמה עם Android שיחות בתחום הבריאות מ-Google I/O.
שיתוף מסך של אפליקציה
Android 15 支持应用屏幕共享,因此用户可以仅共享或录制应用窗口,而不是整个设备屏幕。此功能首次在 Android 14 QPR2 中启用,包含 MediaProjection 回调,可让您的应用自定义应用屏幕共享体验。请注意,对于以 Android 14(API 级别 34)或更高版本为目标平台的应用,每个 MediaProjection 捕获会话都需要征得用户同意。
חוויית המשתמש וממשק המשתמש של המערכת
ב-Android 15, מפתחי אפליקציות והמשתמשים מקבלים יותר שליטה וגמישות בהגדרת המכשיר כך שיתאים לצרכים שלהם.
כדי לקבל מידע נוסף על השיפורים האחרונים ב-Android 15 שיעזרו לכם לשפר את חוויית המשתמש באפליקציה, כדאי לצפות בהרצאה שיפור חוויית המשתמש באפליקציית Android מ-Google I/O.
תצוגות מקדימות עשירות יותר של ווידג'טים באמצעות Generated Previews API
在 Android 15 之前,提供微件选择器预览的唯一方法是指定静态图片或布局资源。这些预览通常与放置在主屏幕上的实际 widget 的外观大不相同。此外,由于无法使用 Jetpack Glance 创建静态资源,因此“资讯一览” 开发者必须为其微件截屏或创建 XML 布局, 微件预览。
Android 15 添加了对生成的预览的支持。这意味着,应用微件提供程序可以生成 RemoteViews 以用作选择器预览,而不是静态资源。
推送 API
应用可以通过推送 API 提供生成的预览。应用可以提供
预览,并且不会收到明确的请求,
以提供预览。预览会保留在 AppWidgetService 中,并且主持人可以按需请求预览。以下示例加载了一个 XML 微件
并将其设置为预览:
AppWidgetManager.getInstance(appContext).setWidgetPreview(
ComponentName(
appContext,
SociaLiteAppWidgetReceiver::class.java
),
AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
RemoteViews("com.example", R.layout.widget_preview)
)
预期的流程如下:
- 任何时候,widget 提供程序都会调用
setWidgetPreview。提供的预览会与其他提供方信息一起保留在AppWidgetService中。 setWidgetPreview会通过AppWidgetHost.onProvidersChanged回调。作为回应,微件宿主会重新加载其所有提供方信息。- 显示微件预览时,主机会检查
AppWidgetProviderInfo.generatedPreviewCategories,如果所选类别可用,则调用AppWidgetManager.getWidgetPreview以返回此提供程序的已保存预览。
何时调用 setWidgetPreview
由于没有用于提供预览的回调,因此应用可以选择在运行期间的任何时间发送预览。预览的更新频率取决于微件的用例。
以下列表介绍了两大类预览用例:
- 在 widget 预览中显示真实数据(例如个性化数据)的提供程序 或最新信息。这些提供商可以设置预览 已登录 Google 账号或已在其应用中完成初始配置。之后 可以设置一项定期任务,按照所选的节奏更新预览。 此类 widget 的示例包括照片、日历、天气或新闻 widget。
- 在预览中显示静态信息或不显示任何数据的快捷操作 widget 的提供程序。这些提供程序可以在应用首次启动时设置预览一次。例如,快速开车便是此类微件的示例 操作 widget 或 Chrome 快捷方式 widget。
某些提供商可能会在基座接入模式选择器上显示静态预览,但真实的 信息。这些提供商应遵循指南 设置预览
תמונה בתוך תמונה
Android 15 引入了画中画 (PiP) 方面的变更,确保实现 更流畅的过渡效果。对于在主界面上叠加界面元素的应用,这将非常有用,因为这些界面元素会进入 PiP。
开发者使用 onPictureInPictureModeChanged 回调来定义逻辑
用于切换叠加界面元素的可见性。此回调是
在画中画进入或退出动画播放完毕时触发。距离开始还有
Android 15 中,PictureInPictureUiState 类包含另一种状态。
在此界面状态下,以 Android 15(API 级别 35)为目标平台的应用将遵守
使用以下参数调用 Activity#onPictureInPictureUiStateChanged 回调:
isTransitioningToPip()。还有
在画中画模式下,有很多与应用无关的界面元素,
包含建议、
评分和标题当应用进入画中画模式时,请使用
onPictureInPictureUiStateChanged 回调以隐藏这些界面元素。当
应用从画中画窗口进入全屏模式,使用
onPictureInPictureModeChanged 回调以取消隐藏这些元素,如
请参阅以下示例:
override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
if (pipState.isTransitioningToPip()) {
// Hide UI elements
}
}
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
if (isInPictureInPictureMode) {
// Unhide UI elements
}
}
不相关界面元素的快速可见性切换(适用于画中画窗口)有助于 确保画中画播放动画更流畅、无闪烁。
שיפורים בכללים של 'נא לא להפריע'
AutomaticZenRule מאפשר לאפליקציות להתאים אישית את תשומת הלב
כללי ניהול (נא לא להפריע) ומחליטים מתי להפעיל או להשבית
אותם. ב-Android 15 יש שיפור משמעותי בכללים האלה, במטרה לשפר את חוויית המשתמש. השיפורים הבאים כלולים:
- הוספת סוגים ל-
AutomaticZenRuleמאפשרת למערכת להחיל סוגים מיוחדים לטיפול בכללים מסוימים. - הוספת סמל אל
AutomaticZenRuleעוזרת לשפר את המצבים מה אפשר לזהות. - הוספת מחרוזת
triggerDescriptionל-AutomaticZenRuleשמתארת התנאים שבהם הכלל צריך להיות פעיל עבור המשתמש. - תאריך ההוספה
ZenDeviceEffectsעדAutomaticZenRule, כך שהכללים יכולים להפעיל פעולות כמו גווני אפור תצוגה, מצב לילה או עמעום הטפט.
הגדרת VibrationEffect לערוצי התראות
ב-Android 15 יש תמיכה בהגדרת רטט עשירים להתראות נכנסות באמצעות
הערוץ באמצעות NotificationChannel.setVibrationEffect, כך
המשתמשים יכולים להבחין בין סוגים שונים של התראות,
שצריך לבדוק את המכשיר שלהם.
צ'יפ בסרגל הסטטוס של הקרנת מדיה ועצירה אוטומטית
媒体投放可能会泄露用户的私密信息。一个醒目的新状态栏条状标签可让用户了解任何正在进行的屏幕投影。用户可以点按该条状标签停止投屏、共享或录制屏幕。此外,为了提供更直观的用户体验,当设备屏幕锁定后,所有正在进行的屏幕投影都会自动停止。
מסכים גדולים וגורמי צורה
Android 15 מאפשר לאפליקציות שלכם לתמוך במגוון גורמי הצורה של Android, כולל מסכים גדולים, מכשירים מתקפלים ומכשירים עם מסך מתהפך.
שיפורים בריבוי משימות במסך גדול
ב-Android 15 יש למשתמשים דרכים טובות יותר לבצע משימות מרובות במכשירים עם מסכים גדולים. עבור לדוגמה, משתמשים יכולים לשמור את השילובים המועדפים שלהם של אפליקציות במסך מפוצל לגשת לשורת המשימות במסך ולהצמיד אותה כדי לעבור במהירות בין אפליקציות. כלומר ולכן חשוב יותר מתמיד לוודא שהאפליקציה שלכם יכולה להיות מותאמת.
ב-Google I/O יש מפגשים בנושא יצירת Android דינמי אפליקציות ובניית ממשק משתמש באמצעות Material 3 ספרייה מותאמת שיכול לעזור, והתיעוד שלנו כולל מידע נוסף שיעזור לכם לעצב מודלים גדולים מסכים.
תמיכה במסך החיצוני
האפליקציה יכולה להצהיר על מאפיין שמערכת Android 15 משתמשת בו כדי לאפשר להציג את Application או את Activity במסכי הכיסוי הקטנים של מכשירים נפתחים נתמכים. המסכים האלה קטנים מדי כדי להיחשב כיעדים תואמים להרצה של אפליקציות ל-Android, אבל אפשר להביע הסכמה לכך שהאפליקציה תתמוך בהם, וכך להפוך אותה לזמינה במקומות נוספים.
קישוריות
ב-Android 15, הפלטפורמה מתעדכנת כדי לתת לאפליקציה שלכם גישה לחידושים האחרונים בטכנולוגיות תקשורת וטכנולוגיות אלחוטיות.
תמיכה בלוויין
ב-Android 15 אנחנו ממשיכים להרחיב את תמיכת הפלטפורמה בקישוריות לווינית, ומוסיפים כמה רכיבי ממשק משתמש כדי להבטיח חוויית משתמש עקבית בכל סביבות הקישוריות הלווינית.
אפליקציות יכולות להשתמש ב-ServiceState.isUsingNonTerrestrialNetwork() כדי
לזהות מכשירים שמחוברים ללוויין, וכך להגביר את המוּדעוּת
מדוע שירותי רשת מלאים אינם זמינים. בנוסף, ב-Android 15 יש תמיכה באפליקציות SMS ו-MMS, וגם באפליקציות RCS שהוגדרו מראש, כדי להשתמש בחיבור לווין לשליחה ולקבלה של הודעות.
חוויות NFC חלקות יותר
Android 15 正在努力打造更顺畅、更可靠的感应式付款体验,同时继续支持 Android 强大的 NFC 应用生态系统。在受支持的设备上,应用可以请求 NfcAdapter 进入观察模式,在该模式下,设备会监听但不会响应 NFC 读卡器,并将应用的 NFC 服务 PollingFrame
对象发送以进行处理。PollingFrame 对象可用于在与 NFC 读卡器进行首次通信之前进行身份验证,在许多情况下,这支持一触式交易。
此外,应用可以在受支持的设备上注册过滤器,以便在有轮询循环活动时收到通知,从而能够与多个感知 NFC 的应用顺畅运行。
תפקיד בארנק
Android 15 引入了钱包角色,可与用户的首选钱包应用更紧密地集成。此角色会取代 NFC 默认的感应式付款设置。用户可以前往设置 > 应用 > 默认应用,管理钱包角色持有者。
在为在付款类别中注册的 AID 路由 NFC 感应式付款时,系统会使用钱包角色。点按操作始终会转到 Google 钱包角色持有者,除非有已注册相同 AID 的其他应用在前台运行。
此角色还用于确定“Google 钱包”快速访问功能块在启用后应显示在何处。将角色设为“无”时,“快速访问”功能块不可用,并且支付类别 NFC 点按仅传送到前台应用。
אבטחה
Android 15 עוזרת לכם לשפר את האבטחה של האפליקציה, להגן על הנתונים של האפליקציה ולספק למשתמשים שקיפות ושליטה רבה יותר על הנתונים שלהם. בשיחה שמירה על אבטחת המשתמשים ב-Android בכנס Google I/O מוסבר מה אנחנו עושים כדי לשפר את אמצעי ההגנה על המשתמשים ולהגן על האפליקציה שלכם מפני איומים חדשים.
שילוב של Credential Manager עם מילוי אוטומטי
从 Android 15 开始,开发者可以将用户名或密码字段等特定视图与 Credential Manager 请求相关联,从而更轻松地在登录过程中提供量身定制的用户体验。当用户聚焦于其中一个视图时,系统会向 Credential Manager 发送相应请求。系统会汇总来自各个提供商的凭据,并在自动填充后备界面(例如内嵌建议或下拉菜单建议)中显示这些凭据。Jetpack androidx.credentials 库是开发者首选的端点,很快将在 Android 15 及更高版本中推出,以进一步增强此功能。
שילוב של הרשמה וכניסה בלחיצה אחת עם הנחיות ביומטריות
Credential Manager将生物识别提示集成到凭据创建过程中 和登录流程,这样提供商就无需管理 生物识别提示。因此,凭据提供程序只需专注于创建和获取流程的结果,并辅以生物识别流程结果。这一简化的流程创建了更高效、更精简的凭据 创建和检索过程。
ניהול מפתחות להצפנה מקצה לקצה
我们将在 Android 15 中引入 E2eeContactKeysManager,它通过提供用于存储加密公钥的操作系统级 API,有助于在 Android 应用中实现端到端加密 (E2EE)。
E2eeContactKeysManager 旨在与平台通讯录应用集成,以便用户集中管理和验证通讯录联系人的公钥。
בדיקות הרשאות בכתובות URI של תוכן
Android 15 引入了一组用于对内容 URI 执行权限检查的 API:
Context.checkContentUriPermissionFull:此选项会对内容 URI 执行完整权限检查。Activity清单属性requireContentUriPermissionFromCaller:此属性会在 activity 启动时对提供的内容 URI 强制执行指定权限。Activity调用方的ComponentCaller类:此类表示启动 activity 的应用。
נגישות
ב-Android 15 נוספו תכונות שמשפרות את הנגישות למשתמשים.
שיפורים בברייל
在 Android 15 中,我们让 TalkBack 能够支持通过 USB 和安全蓝牙使用 HID 标准的盲文显示屏。
此标准与鼠标和键盘使用的标准非常相似,将有助于 Android 随着时间的推移支持更多类型的盲文显示屏。
אינטרנציונליזציה
ב-Android 15 נוספו תכונות ויכולות שמשלימות את חוויית המשתמש כשמשתמשים במכשיר בשפות שונות.
גופן משתנה של CJK
החל מגרסה 15 של Android, קובץ הגופן של השפות הסינית, היפנית והקוריאנית (CJK), NotoSansCJK, הוא עכשיו גופן משתנה. גופנים משתנים פותחים אפשרויות לטיפוגרפיה קריאייטיב בשפות CJK. מעצבים יכולים לבחור מתוך מגוון רחב יותר של סגנונות וליצור פריסות חזותיות מרהיבות שקשה או בלתי אפשרי ליצור אותן בדרכים אחרות.
הצדקה בין תווים
החל מ-Android 15, אפשר להצדיק את הטקסט עם ריווח של אותיות
באמצעות JUSTIFICATION_MODE_INTER_CHARACTER. ההצדקה בין המילים הייתה
הושקה לראשונה ב-Android 8.0 (רמת API 26),
להצדקה מספק יכולות דומות לשפות שמשתמשות
לצורך פילוח, כמו סינית, יפנית ועוד.
JUSTIFICATION_MODE_NONE.
JUSTIFICATION_MODE_NONE.
JUSTIFICATION_MODE_INTER_WORD.
JUSTIFICATION_MODE_INTER_WORD.
JUSTIFICATION_MODE_INTER_CHARACTER.
JUSTIFICATION_MODE_INTER_CHARACTER.הגדרה אוטומטית של מעברי שורה
Android התחילה לתמוך במעברי שורה שמבוססים על ביטויים ביפנית ובקוריאנית
Android 13 (רמת API 33). עם זאת, אמנם הפסקות שורות שמבוססות על ביטויים משפרות את הקריאוּת של שורות קצרות של טקסט, אבל הן לא מתאימות לשורות ארוכות של טקסט.
ב-Android 15, אפליקציות יכולות להשתמש בהפסקות שורות שמבוססות על ביטויים רק בשורות קצרות של טקסט, באמצעות האפשרות LINE_BREAK_WORD_STYLE_AUTO. האפשרות הזו בוחרת את סגנון המילים המתאים ביותר לטקסט.
בשורות טקסט קצרות, המערכת משתמשת במעברי שורה שמבוססים על ביטויים, ופועלים באופן זהה
בתור LINE_BREAK_WORD_STYLE_PHRASE, כמו שמוצג
התמונה הבאה:
LINE_BREAK_WORD_STYLE_AUTO
מחיל חלוקות שורות שמבוססות על ביטויים כדי לשפר את הקריאוּת של הטקסט.
הפעולה הזו זהה להחלת
LINE_BREAK_WORD_STYLE_PHRASE.בשורות טקסט ארוכות יותר, LINE_BREAK_WORD_STYLE_AUTO משתמש בפונקציית "לא"
סגנון מילים של מעבר שורה, שפועל באותו אופן כמו
LINE_BREAK_WORD_STYLE_NONE, כפי שמוצג
התמונה הבאה:
LINE_BREAK_WORD_STYLE_AUTO
לא מחילה סגנון מילים של מעבר שורה כדי לשפר את נוחות הקריאה של הטקסט.
הפעולה הזו זהה להחלת
LINE_BREAK_WORD_STYLE_NONE.גופן נוסף של הנטאיגנה יפנית
在 Android 15 中,旧版日语平假名(也称为 Hentaigana)字体文件 捆绑在一起半形人物的独特形状可以增加 风格或设计独特的风格 传播和理解古代日本文件的能力。
VideoLAN cone Copyright (c) 1996-2010 VideoLAN. כל אחד יכול להשתמש בלוגו הזה או בגרסה שונה שלו כדי להפנות לפרויקט VideoLAN או לכל מוצר שפותח על ידי צוות VideoLAN, אבל השימוש בלוגו לא מעיד על תמיכה בפרויקט.
Vulkan והלוגו של Vulkan הם סימנים מסחריים רשומים של Khronos Group Inc.
OpenGL הוא סימן מסחרי רשום והלוגו של OpenGL ES הוא סימן מסחרי של Hewlett Packard Enterprise, ש-Khronos משתמשת בו ברשות.