ב-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 מ-Google I/O.
שיפור תנאי תאורה ירודים
ב-Android 15 נוספה התכונה שיפור התמונה בתאורה חלשה, מצב חשיפה אוטומטי שזמין גם ב-Camera 2 וגם בתוסף המצלמה של מצב לילה. התכונה 'הגברת התאורה החלשה' מכווננת את החשיפת הסטרימינג של התצוגה המקדימה בתנאים של תאורה חלשה. זה שונה מהאופן שבו התוסף של מצב הלילה במצלמה יוצר תמונות סטילס, כי במצב הלילה נעשה שימוש ברצף של תמונות כדי ליצור תמונה אחת משופרת. מצב לילה מתאים מאוד ליצירת תמונה סטילס, אבל אי אפשר ליצור בו שידור רציף של פריימים. לעומת זאת, התכונה 'שיפור תמונה בתאורה חלשה' מאפשרת לעשות זאת. לכן, התכונה 'שיפור איכות בתנאי תאורה חלשה' מאפשרת למצלמה לבצע פעולות כמו:
- הצגת תצוגה מקדימה משופרת של התמונות, כדי שהמשתמשים יוכלו לבחור מסגרת טובה יותר לתמונות שצולמו בתאורה חלשה
- סריקת קודי QR בתאורה חלשה
אם מפעילים את התכונה'הגברת התאורה החלשה', היא מופעלת באופן אוטומטי כשרמת התאורה נמוכה, ומושבתת כשיש יותר אור.
אפליקציות יכולות לצלם את מקור הווידאו של התצוגה המקדימה בתנאים של תאורה חלשה כדי לשמור סרטון בהיר יותר.
מידע נוסף זמין במאמר שיפור התמונה בתאורה נמוכה.
אמצעי בקרה למצלמה בתוך האפליקציה
Android 15 adds an extension for more control over the camera hardware and its algorithms on supported devices:
- Advanced flash strength adjustments enabling precise control of flash
intensity in both
SINGLEandTORCHmodes while capturing images.
שליטה במרווח העליון של HDR
Android 15 chooses HDR headroom that is appropriate for the underlying device
capabilities and bit-depth of the panel. For pages that have lots of SDR
content, such as a messaging app displaying a single HDR thumbnail, this
behavior can end up adversely influencing the perceived brightness of the SDR
content. Android 15 lets you control the HDR headroom with
setDesiredHdrHeadroom to strike a balance between SDR
and HDR content.
בקרת עוצמת הקול

Android 15 introduces support for the CTA-2075 loudness standard to help you avoid audio loudness inconsistencies and ensure users don't have to constantly adjust volume when switching between content. The system leverages known characteristics of the output devices (headphones and speaker) along with loudness metadata available in AAC audio content to intelligently adjust the audio loudness and dynamic range compression levels.
To enable this feature, you need to ensure loudness metadata is available in
your AAC content and enable the platform feature in your app. For this, you
instantiate a LoudnessCodecController object by
calling its create factory method with the audio
session ID from the associated AudioTrack; this
automatically starts applying audio updates. You can pass an
OnLoudnessCodecUpdateListener to modify or filter
loudness parameters before they are applied on the
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 will also be updated to use the
LoudnessCodecController APIs for a seamless app integration.
מכשירי MIDI וירטואליים 2.0
Android 13 added support for connecting to MIDI 2.0 devices using USB, which communicate using Universal MIDI Packets (UMP). Android 15 extends UMP support to virtual MIDI apps, enabling composition apps to control synthesizer apps as a virtual MIDI 2.0 device just like they would with an USB MIDI 2.0 device.
פענוח יעיל יותר של תוכנת AV1
dav1d, the popular AV1 software decoder from VideoLAN is available for Android devices that don't support AV1 decode in hardware. dav1d is up to 3x more performant than the legacy AV1 software decoder, enabling HD AV1 playback for more users, including some low and mid tier devices.
Your app needs to opt-in to using dav1d by invoking it by name
"c2.android.av1-dav1d.decoder". dav1d will be made the default AV1 software
decoder in a subsequent update. This support is standardized and backported to
Android 11 devices that receive Google Play system updates.
פרודוקטיביות וכלים למפתחים
רוב העבודה שלנו לשיפור הפרודוקטיביות מתמקדת בכלים כמו 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. אפליקציות יכולות לכלול תכונות מתקדמות כמו עיבוד קבצים שמוגנים באמצעות סיסמה, הערות, עריכת טפסים, חיפוש ובחירה עם העתקה. יש תמיכה באופטימיזציה של קובצי PDF ליניאריים כדי לזרז את הצפייה ב-PDF מקומי ולצמצם את השימוש במשאבים.
אנחנו משתמשים בממשקי ה-API האלה בספריית ה-PDF של Jetpack כדי להוסיף קובצי PDF בקלות רבה יותר
יכולות צפייה באפליקציה שלך.
PdfRenderer הועבר למודול שאפשר לעדכן באמצעות עדכוני המערכת של Google Play, ללא קשר למהדורת הפלטפורמה. כדי לתמוך בשינויים האלה ב-Android 11 (רמת API 30), יצרנו גרסה תואמת של ממשק ה-API שתוכננה ל-Android 15 ואילך, שנקראת PdfRendererPreV.
שיפורים בהחלפת שפה אוטומטית
ב-Android 14 נוספה יכולת זיהוי אודיו בכמה שפות במכשיר, עם מעבר אוטומטי בין השפות. עם זאת, יכול להיות שהמילה לא תזוהה אם המעבר בין השפות קצר מדי. ב-Android 15 נוספו אמצעי בקרה נוספים שיעזרו לאפליקציות להתאים את המעבר הזה לתרחיש השימוש שלהן.
הערך EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS מגביל את המעבר האוטומטי לתחילת סשן האודיו, ואילו הערך EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES משבית את המעבר בין השפות אחרי מספר מוגדר של מעברים. האפשרויות האלה שימושיות במיוחד אם אתם צופים שייאמר רק שפה אחת במהלך הסשן, ושצריך לזהות אותה באופן אוטומטי.
שיפור של OpenType Variable Font API
Android 15 improves the usability of the OpenType variable font. You can create
a FontFamily instance from a variable font without specifying weight axes
with the buildVariableFamily API. The text renderer overrides the value
of wght axis to match the displaying text.
Using the API simplifies the code for creating a Typeface considerably:
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();
Previously, to create the same Typeface, you would need much more code:
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();
Here's an example of how a Typeface created with both the old and new APIs
renders:
In this example, the Typeface created with the old API doesn't have the
capability to create accurate font weights for the 350, 450, 550 and 650
Font instances, so the renderer falls back to the closest weight. So in
this case, 300 is rendered instead of 350, 400 is rendered instead of 450, and
so on. By contrast, the Typeface created with the new APIs dynamically creates
a Font instance for a given weight, so accurate weights are rendered for 350,
450, 550, and 650 as well.
אמצעי בקרה מפורטים למעברי שורה
החל מגרסה 15 של Android, האפשרות TextView והתכונה הבסיסית של הפסקת שורה יכולות לשמור על החלק הנתון של הטקסט באותה שורה כדי לשפר את הקריאוּת. כדי לנצל את ההתאמה האישית של הפסקות השורות, אפשר להשתמש בתג <nobreak> במשאבי מחרוזות או ב-createNoBreakSpan. באופן דומה, אפשר למנוע הוספת מקפים במילים באמצעות התג <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>.העברת אפליקציות לארכיון
Android and Google Play announced support for app archiving last year, allowing users to free up space by partially removing infrequently used apps from the device that were published using Android App Bundle on Google Play. Android 15 includes OS level support for app archiving and unarchiving, making it easier for all app stores to implement it.
Apps with the REQUEST_DELETE_PACKAGES permission can call the
PackageInstaller requestArchive method to request archiving an
installed app package, which removes the APK and any cached files, but persists
user data. Archived apps are returned as displayable apps through the
LauncherApps APIs; users will see a UI treatment to highlight that those
apps are archived. If a user taps on an archived app, the responsible installer
will get a request to unarchive it, and the restoration process can be
monitored by the ACTION_PACKAGE_ADDED broadcast.
הפעלת מצב 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 hardware has evolved quite a bit from the early days where the core OS would run on a single CPU and GPUs were accessed using APIs based on fixed-function pipelines. The Vulkan® graphics API has been available in the NDK since Android 7.0 (API level 24) with a lower-level abstraction that better reflects modern GPU hardware, scales better to support multiple CPU cores, and offers reduced CPU driver overhead — leading to improved app performance. Vulkan is supported by all modern game engines.
Vulkan is Android's preferred interface to the GPU. Therefore, Android 15 includes ANGLE as an optional layer for running OpenGL® ES on top of Vulkan. Moving to ANGLE will standardize the Android OpenGL implementation for improved compatibility, and, in some cases, improved performance. You can test out your OpenGL ES app stability and performance with ANGLE by enabling the developer option in Settings -> System -> Developer Options -> Experimental: Enable ANGLE on Android 15.
The Android ANGLE on Vulkan roadmap
As part of streamlining our GPU stack, going forward we will be shipping ANGLE as the GL system driver on more new devices, with the future expectation that OpenGL/ES will be only available through ANGLE. That being said, we plan to continue support for OpenGL ES on all devices.
Recommended next steps
Use the developer options to select the ANGLE driver for OpenGL ES and test your app. For new projects, we strongly encourage using Vulkan for C/C++.
שיפורים ב-Canvas
Android 15 continues our modernization of Android's Canvas graphics system with additional capabilities:
Matrix44provides a 4x4 matrix for transforming coordinates that should be used when you want to manipulate the canvas in 3D.clipShaderintersects the current clip with the specified shader, whileclipOutShadersets the clip to the difference of the current clip and the shader, each treating the shader as an alpha mask. This supports the drawing of complex shapes efficiently.
ביצועים וסוללה
אנחנו ממשיכים להתמקד בשיפור הביצועים והאיכות של האפליקציות שלכם ב-Android. ב-Android 15 מוצגים ממשקי API שעוזרים לבצע משימות באפליקציה בצורה יעילה יותר, לבצע אופטימיזציה של ביצועי האפליקציה ולאסוף תובנות לגבי האפליקציות.
כדי לקבל מידע על שיטות מומלצות לשימוש יעיל בסוללה, על ניפוי באגים בשימוש ברשת ובצריכת החשמל ועל האופן שבו אנחנו משפרים את היעילות של הסוללה בעבודה ברקע ב-Android 15 ובגרסאות עדכניות של Android, אפשר לצפות בהרצאה Improving battery efficiency of background work on Android (שיפור היעילות של הסוללה בעבודה ברקע ב-Android) מ-Google I/O.
ApplicationStartInfo API
בגרסאות קודמות של Android, הפעלת האפליקציות הייתה קצת מסתורית. היה קשה לקבוע באפליקציה אם היא הופעלה במצב 'התחלה קרה', 'התחלה חמה' או 'התחלה חמה מאוד'. בנוסף, היה קשה לדעת כמה זמן האפליקציה נמשכה בשלבים השונים של ההשקה: יצירת ענף בתהליך, קריאה ל-onCreate, ציור המסגרת הראשונה ועוד. כשהיווצר אובייקט של הכיתה Application, לא הייתה לכם אפשרות לדעת אם האפליקציה הופעלה על ידי שידור, ספק תוכן, משימה, גיבוי, סיום האתחול, אזעקה או Activity.
ה-API של ApplicationStartInfo ב-Android 15 מספק את כל הפונקציות האלה ועוד. אפשר גם להוסיף חותמות זמן משלכם לתהליך כדי לאסוף נתוני תזמון במקום אחד. בנוסף לאיסוף מדדים, אפשר להשתמש ב-ApplicationStartInfo כדי לבצע אופטימיזציה ישירה של הפעלת האפליקציה. לדוגמה, אפשר למנוע את היצירה היקרה של ספריות שקשורות לממשק המשתמש בכיתה Application כשהאפליקציה מופעלת בגלל שידור.
מידע מפורט על גודל האפליקציה
Since Android 8.0 (API level 26), Android has included the
StorageStats.getAppBytes API that summarizes the installed
size of an app as a single number of bytes, which is a sum of the APK size, the
size of files extracted from the APK, and files that were generated on the
device such as ahead-of-time (AOT) compiled code. This number is not very
insightful in terms of how your app is using storage.
Android 15 adds the
StorageStats.getAppBytesByDataType([type]) API, which lets
you get insight into how your app is using up all that space, including APK file
splits, AOT and speedup related code, dex metadata, libraries, and guided
profiles.
יצירת פרופילים באמצעות אפליקציה
Android 15 includes the ProfilingManager class,
which lets you collect profiling information from within your app such as heap
dumps, heap profiles, stack sampling, and more. It provides a callback to your
app with a supplied tag to identify the output file, which is delivered to your
app's files directory. The API does rate limiting to minimize the performance
impact.
To simplify constructing profiling requests in your app, we recommend using the
corresponding Profiling AndroidX API, available
in Core 1.15.0-rc01 or higher.
שיפורים במסד נתונים של SQLite
ב-Android 15 נוספו ממשקי API של SQLite שמציגים תכונות מתקדמות מהמנוע הבסיסי של SQLite, שמטרגטות בעיות ספציפיות בביצועים שעשויות להתרחש באפליקציות. ממשקי ה-API האלה כלולים בעדכון של SQLite לגרסה 3.44.3.
מומלץ למפתחים לעיין בשיטות מומלצות לביצועי SQLite להפיק את המרב ממסד הנתונים של SQLite, במיוחד כשעובדים עם מסדי נתונים או כשמריצים שאילתות רגישות לזמן אחזור.
- עסקאות מושהות לקריאה בלבד: כשאתם מנפיקים עסקאות לקריאה בלבד (לא כוללות הצהרות כתיבה), השתמשו ב-
beginTransactionReadOnly()וב-beginTransactionWithListenerReadOnly(SQLiteTransactionListener)כדי להנפיק עסקאותDEFERREDלקריאה בלבד. עסקאות כאלה יכולות לפעול בו-זמנית זו עם זו, ואם מסד הנתונים נמצא במצב WAL, הן יכולות לפעול בו-זמנית עם עסקאותIMMEDIATEאוEXCLUSIVE. - מספרים ומזהים של שורות: נוספו ממשקי API לאחזור מספר השורות שהשתנו או מזהה השורה האחרונה שהוכנסה, בלי להפעיל שאילתה נוספת.
הפונקציה
getLastChangedRowCount()מחזירה את מספר השורות שנוספו, עודכנו או נמחקו באמצעות הצהרת ה-SQL האחרונה בעסקה הנוכחית, בזמן ש-getTotalChangedRowCount()מחזירה את הספירה בחיבור הנוכחי. הפונקציהgetLastInsertRowId()מחזירה את הערךrowidשל השורה האחרונה. יוכנס לחיבור הנוכחי. - הצהרות גולמיות: הוצאת הצהרת SQlite גולמית, תוך עקיפת מעטפות נוחות וכל עלות עיבוד נוספת שעשויה להיגרם כתוצאה מהן.
עדכונים ב-Android Dynamic Performance Framework
Android 15 continues our investment in the Android Dynamic Performance Framework (ADPF), a set of APIs that allow games and performance intensive apps to interact more directly with power and thermal systems of Android devices. On supported devices, Android 15 adds ADPF capabilities:
- A power-efficiency mode for hint sessions to indicate that their associated threads should prefer power saving over performance, great for long-running background workloads.
- GPU and CPU work durations can both be reported in hint sessions, allowing the system to adjust CPU and GPU frequencies together to best meet workload demands.
- Thermal headroom thresholds to interpret possible thermal throttling status based on headroom prediction.
To learn more about how to use ADPF in your apps and games, head over to the documentation.
פרטיות
Android 15 כולל מגוון תכונות שעוזרות למפתחי אפליקציות להגן על פרטיות המשתמשים.
זיהוי של הקלטת מסך
במערכת Android 15 נוספה תמיכה באפליקציות כדי לזהות הן מתועדות. קריאה חוזרת (callback) מופעלת בכל פעם שהאפליקציה עוברת ממצב גלוי למצב מוסתר במהלך הקלטת מסך. אפליקציה היא נחשב כגלוי אם פעילויות שנמצאות בבעלות ה-UID של תהליך הרישום מוקלטת. כך, אם האפליקציה מבצעת פעולה רגישה, יכול ליידע את המשתמש על כך שהוא מוקלט.
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 builds in support for more precise Intent resolution through
UriRelativeFilterGroup, which contains a set of
UriRelativeFilter objects that form a set of Intent
matching rules that must each be satisfied, including URL query parameters, URL
fragments, and blocking or exclusion rules.
These rules can be defined in the AndroidManifest XML file with the
<uri-relative-filter-group> tag, which can optionally include an
android:allow tag. These tags can contain <data> tags that use existing data
tag attributes as well as the android:query and android:fragment
attributes.
Here's an example of the AndroidManifest syntax:
<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>
המרחב הפרטי
Private space lets users create a separate space on their device where they can keep sensitive apps away from prying eyes, under an additional layer of authentication. The private space uses a separate user profile. The user can choose to use the device lock or a separate lock factor for the private space.
Apps in the private space show up in a separate container in the launcher, and are hidden from the recents view, notifications, settings, and from other apps when the private space is locked. User-generated and downloaded content (such as media or files) and accounts are separated between the private space and the main space. The system sharesheet and the photo picker can be used to give apps access to content across spaces when the private space is unlocked.
Users can't move existing apps and their data into the private space. Instead, users select an install option in the private space to install an app using whichever app store they prefer. Apps in the private space are installed as separate copies from any apps in the main space (new copies of the same app).
When a user locks the private space, the profile is stopped. While the profile is stopped, apps in the private space are no longer active and can't perform foreground or background activities, including showing notifications.
We recommend that you test your app with private space to make sure your app works as expected, especially if your app falls into one of the following categories:
- Apps with logic for work profiles that assumes that any installed copies of their app that aren't in the main profile are in the work profile.
- Medical apps
- Launcher apps
- App store apps
שאילתה לגבי הבחירה האחרונה של המשתמשים בנושא גישה לתמונות נבחרות
אפליקציות יכולות להדגיש עכשיו רק את התמונות והסרטונים שנבחרו לאחרונה
ניתנה גישה חלקית להרשאות המדיה. התכונה הזו יכולה לשפר
את חוויית המשתמש של אפליקציות שמבקשות לעיתים קרובות גישה לתמונות
סרטונים. כדי להשתמש בתכונה הזו באפליקציה, מפעילים את הארגומנט 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 includes the latest Android Ad Services extensions, incorporating the latest version of the Privacy Sandbox on Android. This addition is part of our work to develop technologies that improve user privacy and enable effective, personalized advertising experiences for mobile apps. Our privacy sandbox page has more information about the Privacy Sandbox on Android developer preview and beta programs to help you get started.
Health Connect
Android 15 integrates the latest extensions around Health Connect by Android, a secure and centralized platform to manage and share app-collected health and fitness data. This update adds support for additional data types across fitness, nutrition, skin temperature, training plans, and more.
Skin temperature tracking allows users to store and share more accurate temperature data from a wearable or other tracking device.
Training plans are structured workout plans to help a user achieve their fitness goals. Training plans support includes a variety of completion and performance goals:
- Completion goals around calories burned, distance, duration, repetition, and steps.
- Performance goals around as many repetitions as possible (AMRAP), cadence, heart rate, power, perceived rate of exertion, and speed.
Learn more about the latest updates to Health Connect in Android in the Building adaptable experiences with Android Health talk from 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, הדרך היחידה לספק תצוגות מקדימות של בורר הווידג'טים הייתה לציין משאב תמונה או פריסה סטטי. לרוב, התצוגות המקדימות האלה שונות באופן משמעותי מהמראה של הווידג'ט בפועל כשממקמים אותו במסך הבית. בנוסף, אי אפשר ליצור משאבים סטטיים באמצעות Jetpack Glance, ולכן מפתחי Glance נאלצו לצלם את הווידג'ט שלהם או ליצור פריסה של XML כדי להציג תצוגה מקדימה של הווידג'ט.
ב-Android 15 נוספה תמיכה בתצוגות מקדימות שנוצרו. המשמעות היא שספקי ווידג'טים של אפליקציות יכולים ליצור את RemoteViews כדי להשתמש בו בתצוגה המקדימה של הבורר, במקום משאב סטטי.
Push 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)
)
התהליך הצפוי הוא:
- ספק הווידג'ט יכול לבצע קריאה ל-
setWidgetPreviewבכל שלב. התצוגות המקדימות שסיפקתם נשמרות ב-AppWidgetServiceעם פרטי ספק אחרים. setWidgetPreviewתודיע למארחים על תצוגה מקדימה מעודכנת באמצעות קריאה חוזרת (callback) שלAppWidgetHost.onProvidersChanged. בתגובה, מארח הווידג'ט טוען מחדש את כל פרטי הספק שלו.- כשמציגים תצוגה מקדימה של ווידג'ט, המארח בודק את
AppWidgetProviderInfo.generatedPreviewCategories. אם הקטגוריה שנבחרה זמינה, הוא קורא ל-AppWidgetManager.getWidgetPreviewכדי להציג את התצוגה המקדימה השמורה של הספק הזה.
מתי כדאי להתקשר אל setWidgetPreview
מכיוון שאין קריאה חוזרת (callback) כדי לספק תצוגות מקדימות, האפליקציות יכולות לבחור לשלוח תצוגות מקדימות בכל שלב שבו הן פועלות. תדירות העדכון של התצוגה המקדימה תלויה בתרחיש לדוגמה שבו משתמשים בווידג'ט.
ברשימה הבאה מתוארות שתי הקטגוריות העיקריות של תרחישים לדוגמה לשימוש בתצוגה המקדימה:
- ספקים שמציגים נתונים אמיתיים בתצוגות המקדימות של הווידג'טים שלהם, כמו מידע מותאם אישית או מידע עדכני. הספקים האלה יכולים להגדיר את התצוגה המקדימה אחרי שהמשתמש נכנס לחשבון או ביצע הגדרה ראשונית באפליקציה. לאחר מכן, הם יכולים להגדיר משימה תקופתית לעדכון התצוגות המקדימה בקצב שהם בוחרים. דוגמאות לווידג'טים מהסוג הזה הן ווידג'ט של תמונות, ווידג'ט של יומן, ווידג'ט של מזג אוויר או ווידג'ט של חדשות.
- ספקים שמציגים מידע סטטי בתצוגות מקדימות או בווידג'טים של פעולות מהירות שלא מציגים נתונים. הספקים האלה יכולים להגדיר קטעי מקדים פעם אחת, כשהאפליקציה מופעלת בפעם הראשונה. דוגמאות לווידג'טים מהסוג הזה כוללות ווידג'ט של פעולות מהירות ב-Drive או ווידג'ט של קיצורי דרך ב-Chrome.
יכול להיות שחלק מהספקים יציג תצוגות מקדימות סטטיות בבורר של מצב Hub, אבל מידע אמיתי בבורר של מסך הבית. הספקים האלה צריכים לפעול בהתאם להנחיות בשני התרחישים לדוגמה האלה כדי להגדיר קטעי מקדים.
תמונה בתוך תמונה
Android 15 introduces changes in Picture-in-Picture (PiP) ensuring an even smoother transition when entering into PiP mode. This will be beneficial for apps having UI elements overlaid on top of their main UI, which goes into PiP.
Developers use the onPictureInPictureModeChanged callback to define logic
that toggles the visibility of the overlaid UI elements. This callback is
triggered when the PiP enter or exit animation is completed. Beginning in
Android 15, the PictureInPictureUiState class includes another state.
With this UI state, apps targeting Android 15 (API level 35) will observe the
Activity#onPictureInPictureUiStateChanged callback being invoked with
isTransitioningToPip() as soon as the PiP animation starts. There are
many UI elements that are not relevant for the app when it is in PiP mode, for
example views or layout that include information such as suggestions, upcoming
video, ratings, and titles. When the app goes to PiP mode, use the
onPictureInPictureUiStateChanged callback to hide these UI elements. When the
app goes to full screen mode from the PiP window, use
onPictureInPictureModeChanged callback to unhide these elements, as shown in
the following examples:
override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
if (pipState.isTransitioningToPip()) {
// Hide UI elements
}
}
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
if (isInPictureInPictureMode) {
// Unhide UI elements
}
}
This quick visibility toggle of irrelevant UI elements (for a PiP window) helps ensure a smoother and flicker-free PiP enter animation.
שיפורים בכללים של 'נא לא להפריע'
AutomaticZenRule lets apps customize Attention
Management (Do Not Disturb) rules and decide when to activate or deactivate
them. Android 15 greatly enhances these rules with the goal of improving the
user experience. The following enhancements are included:
- Adding types to
AutomaticZenRule, allowing the system to apply special treatment to some rules. - Adding an icon to
AutomaticZenRule, helping to make the modes be more recognizable. - Adding a
triggerDescriptionstring toAutomaticZenRulethat describes the conditions on which the rule should become active for the user. - Added
ZenDeviceEffectstoAutomaticZenRule, allowing rules to trigger things like grayscale display, night mode, or dimming the wallpaper.
הגדרת VibrationEffect לערוצי התראות
Android 15 supports setting rich vibrations for incoming notifications by
channel using NotificationChannel.setVibrationEffect, so
your users can distinguish between different types of notifications without
having to look at their device.
הצגת שבב בשורת הסטטוס של הקרנת המדיה ועצירה אוטומטית
Media projection can expose private user information. A new, prominent status bar chip makes users aware of any ongoing screen projection. Users can tap the chip to stop screen casting, sharing, or recording. Also, for a more intuitive user experience, any in‑progress screen projection now automatically stops when the device screen is locked.
מסכים גדולים וגורמי צורה
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 is working to make the tap to pay experience more seamless and
reliable while continuing to support Android's robust NFC app ecosystem. On
supported devices, apps can request the NfcAdapter to enter
observe mode, where the device listens but doesn't respond to NFC
readers, sending the app's NFC service PollingFrame
objects to process. The PollingFrame objects can be used to auth
ahead of the first communication to the NFC reader, allowing for a one tap
transaction in many cases.
In addition, apps can register a filter on supported devices so they can be notified of polling loop activity, which allows for smooth operation with multiple NFC-aware applications.
תפקיד בארנק
Android 15 introduces a Wallet role that allows tighter integration with the user's preferred wallet app. This role replaces the NFC default contactless payment setting. Users can manage the Wallet role holder by navigating to Settings > Apps > Default Apps.
The Wallet role is used when routing NFC taps for AIDs registered in the payment category. Taps always go to the Wallet role holder unless another app that is registered for the same AID is running in the foreground.
This role is also used to determine where the Wallet Quick Access tile should go when activated. When the role is set to "None", the Quick Access tile isn't available and payment category NFC taps are only delivered to the foreground app.
אבטחה
Android 15 עוזר לשפר את האבטחה של האפליקציה, להגן על הנתונים של האפליקציה ולספק למשתמשים שקיפות ושליטה רבות יותר על הנתונים שלהם. בשיחה Safeguarding user security on Android בכנס Google I/O מוסבר מה אנחנו עושים כדי לשפר את אמצעי ההגנה על המשתמשים ולהגן על האפליקציה שלכם מפני איומים חדשים.
שילוב של מנהל פרטי הכניסה עם מילוי אוטומטי
Starting with Android 15, developers can link specific views like username or password fields with Credential Manager requests, making it easier to provide a tailored user experience during the sign-in process. When the user focuses on one of these views, a corresponding request is sent to Credential Manager. The resulting credentials are aggregated across providers and displayed in autofill fallback UIs, such as inline suggestions or drop-down suggestions. The Jetpack androidx.credentials library is the preferred endpoint for developers to use and will soon be available to further enhance this feature in Android 15 and higher.
שילוב של הרשמה וכניסה בלחיצה אחת עם הנחיות ביומטריות
Credential Manager integrates biometric prompts into the credential creation and sign-in processes, eliminating the need for providers to manage biometric prompts. As a result, credential providers only need to focus on the results of the create and get flows, augmented with the biometric flow result. This simplified process creates a more efficient and streamlined credential creation and retrieval process.
ניהול מפתחות להצפנה מקצה לקצה
We are introducing the E2eeContactKeysManager in Android 15, which
facilitates end-to-end encryption (E2EE) in your Android apps by providing an
OS-level API for the storage of cryptographic public keys.
The E2eeContactKeysManager is designed to integrate with the platform
contacts app to give users a centralized way to manage and verify their
contacts' public keys.
בדיקות הרשאות ב-URI של תוכן
Android 15 introduces a set of APIs that perform permission checks on content URIs:
Context.checkContentUriPermissionFull: This performs a full permission check on content URIs.Activitymanifest attributerequireContentUriPermissionFromCaller: This enforces specified permissions on the provided content URIs at activity launch.ComponentCallerclass forActivitycallers: This represents the app that launched the activity.
נגישות
ב-Android 15 נוספו תכונות שמשפרות את הנגישות למשתמשים.
ברייל משופר
ב-Android 15, הוספנו ל-TalkBack תמיכה בצגי ברייל שמשתמשים בתקן HID גם דרך USB וגם דרך Bluetooth מאובטח.
התקן הזה, בדומה לזה שמשמש עכברים ומקלדות, יעזור ל-Android לתמוך במגוון רחב יותר של צגי בריל לאורך זמן.
אינטרנציונליזציה
ב-Android 15 נוספו תכונות ויכולות שמשלימות את חוויית המשתמש כשמשתמשים במכשיר בשפות שונות.
גופן משתנה של CJK
Starting with Android 15, the font file for Chinese, Japanese, and Korean (CJK) languages, NotoSansCJK, is now a variable font. Variable fonts open up possibilities for creative typography in CJK languages. Designers can explore a broader range of styles and create visually striking layouts that were previously difficult or impossible to achieve.
הצדקה בין תווים
Starting with Android 15, text can be justified utilizing letter spacing by
using JUSTIFICATION_MODE_INTER_CHARACTER. Inter-word justification was
first introduced in Android 8.0 (API level 26), and inter-character
justification provides similar capabilities for languages that use the
whitespace character for segmentation, such as Chinese, Japanese, and others.
JUSTIFICATION_MODE_NONE.
JUSTIFICATION_MODE_NONE.
JUSTIFICATION_MODE_INTER_WORD.
JUSTIFICATION_MODE_INTER_WORD.
JUSTIFICATION_MODE_INTER_CHARACTER.
JUSTIFICATION_MODE_INTER_CHARACTER.הגדרה אוטומטית של מעברי שורה
Android started supporting phrase-based line breaks for Japanese and Korean in
Android 13 (API level 33). However, while phrase-based line breaks improve the
readability of short lines of text, they don't work well for long lines of text.
In Android 15, apps can apply phrase-based line breaks only for short lines
of text, using the LINE_BREAK_WORD_STYLE_AUTO
option. This option selects the best word style option for the text.
For short lines of text, phrase-based line breaks are used, functioning the same
as LINE_BREAK_WORD_STYLE_PHRASE, as shown in the
following image:
LINE_BREAK_WORD_STYLE_AUTO
applies phrase-based line breaks to improve the readability of the text.
This is the same as applying
LINE_BREAK_WORD_STYLE_PHRASE.For longer lines of text, LINE_BREAK_WORD_STYLE_AUTO uses a no
line-break word style, functioning the same as
LINE_BREAK_WORD_STYLE_NONE, as shown in the
following image:
LINE_BREAK_WORD_STYLE_AUTO
applies no line-break word style to improve the readability of the text.
This is the same as applying
LINE_BREAK_WORD_STYLE_NONE.גופן נוסף של הנטאיגנה יפנית
בגרסה Android 15, קובץ גופן של היראגאנה היפנית הישנה (המכונה Hentaigana) נכלל בחבילה כברירת מחדל. הצורות הייחודיות של דמויות הנטאייגה יכולות להוסיף מראה ייחודי לגרפיקה או לעיצוב, תוך שמירה על רמת דיוק גבוהה הפצה והבנה של מסמכים יפניים עתיקים.
VideoLAN cone Copyright (c) 1996-2010 VideoLAN. This logo or a modified version may be used or modified by anyone to refer to the VideoLAN project or any product developed by the VideoLAN team, but does not indicate endorsement by the project.
Vulkan and the Vulkan logo are registered trademarks of the Khronos Group Inc.
OpenGL is a registered trademark and the OpenGL ES logo is a trademark of Hewlett Packard Enterprise used by permission by Khronos.