ב-Android 9 (רמת API 28) יש תכונות ויכולות חדשות ומגניבות למשתמשים ולמפתחים. במסמך הזה נדגיש את התכונות החדשות למפתחים.
מידע נוסף על ממשקי ה-API החדשים זמין בדוח ההבדלים בין גרסאות ה-API או במאמר העזרה בנושא Android API. חשוב גם לבדוק את המידע שינויים בהתנהגות ב-Android 9 כדי ללמוד על תחומים שבהם שינויים בפלטפורמות עשויים להשפיע על האפליקציות שלך.
מיקום בפנים עם Wi-Fi RTT

ב-Android 9 נוספה תמיכה בפלטפורמה בפרוטוקול ה-Wi-Fi של IEEE 802.11-2016, שנקרא גם זמן נסיעה הלוך ושוב ב-Wi-Fi (RTT), כדי שתוכלו להשתמש במיקום בתוך מבנים באפליקציות שלכם.
במכשירים עם Android 9 עם תמיכה בחומרה, האפליקציות יכולות להשתמש בממשקי ה-API של RTT כדי למדוד את המרחק לנקודות גישה (AP) של Wi-Fi בקרבת מקום עם תמיכה ב-RTT. יש צורך במכשיר
שירותי המיקום מופעלים וסריקת נקודות ה-Wi-Fi מופעלת (בקטע
הגדרות > מיקום), והאפליקציה צריכה לכלול את
ACCESS_FINE_LOCATION
הרשאה. המכשיר לא צריך להתחבר לנקודות הגישה כדי להשתמש ב-RTT.
כדי לשמור על הפרטיות, רק הטלפון יכול לקבוע את המרחק לנקודת הגישה. בנקודות הגישה אין מידע כזה.
אם המכשיר מודד את המרחק ל-3 נקודות גישה או יותר, אפשר להשתמש באלגוריתם של טריאנגולציה כדי להעריך את המיקום של המכשיר שמתאים בצורה הטובה ביותר למדידות האלה. התוצאה היא בדרך כלל מדויקת בטווח של 1-2 מטר.
בעזרת הדיוק הזה אפשר ליצור חוויות חדשות, כמו ניווט בתוך מבנים ושירותים מבוססי-מיקום ברמת פירוט גבוהה, כמו בקרת קול עם הסרת עמימות (לדוגמה, "הפעלת הנורה הזו") ומידע מבוסס-מיקום (לדוגמה, "האם יש מבצעים מיוחדים על המוצר הזה?").
הצגת ה-Wi-Fi RTT API בשימוש ב אפליקציית הדגמה ל-Android WifiRttScan.
מידע נוסף זמין במאמר מיקום באמצעות Wi-Fi: מדידת מרחק באמצעות RTT.
תמיכה במגרעת במסך

בדיקת מגרעת במסך באמצעות אמולטור
ב-Android 9 יש תמיכה במסכים העדכניים ביותר מקצה לקצה
שכוללים גזירי מסך למצלמות ולרמקולים. באמצעות הכיתה DisplayCutout
אפשר למצוא את המיקום והצורה של האזורים הלא פונקציונליים שבהם לא צריך להציג תוכן. כדי לקבוע את קיומם ואת המיקום של אזורי החיתוך האלה, משתמשים ב-method getDisplayCutout()
.
מאפיין חדש של פריסה בחלון, layoutInDisplayCutoutMode
, מאפשר לאפליקציה לפרס את התוכן שלה סביב הפתחים במכשיר. אפשר להגדיר
את המאפיין הזה לאחד מהערכים הבאים:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
אפשר לדמות חתיכת מסך בכל מכשיר או באמולטור עם Android 9 באופן הבא:
- מפעילים את האפשרויות למפתחים.
- במסך אפשרויות למפתחים, גוללים למטה אל הקטע שרטוט. ובוחרים באפשרות סימולציה של מסך עם חיתוך.
- בוחרים את הגודל של היצירה.
התראות
ב-Android 9 יש כמה שיפורים בהתראות, שזמינים לכל המפתחים שמטרגטים את רמת ה-API 28 ואילך.

MessagingStyle עם תמונה מצורפת.

סגנון הודעות עם תשובות ושיחות.
קוד לדוגמה שמשתמש בהתראות, כולל תכונות של Android 9, זמין בדוגמה של People.
חוויה משופרת של העברת הודעות
החל מ-Android 7.0 (רמת API 24), אפשר להוסיף פעולה שצריך להשיב לה הודעות או טקסט אחר ישירות מתוך התראה. Android 9 משופר את התכונה הזו עם השיפורים הבאים:
תמיכה פשוטה יותר למשתתפי השיחה:
Person
הכיתה משמשת לזיהוי אנשים שמעורבים בשיחה, כולל דמויות ומזהי URI. ממשקי API רבים אחרים, כמוaddMessage()
, משתמשים עכשיו בכיתהPerson
במקום ב-CharSequence
. הכיתהPerson
תומכת גם בתבנית העיצוב של Builder.תמיכה בתמונות: ב-Android 9 מוצגות עכשיו תמונות ב'התראות להעברת הודעות' בטלפונים. אפשר להשתמש ב
setData()
בהודעה כדי להציג תמונה. קטע הקוד הבא מדגים איך יוצריםPerson
ומסר שמכיל תמונה.
Kotlin
// Create new Person. val sender = Person() .setName(name) .setUri(uri) .setIcon(null) .build() // Create image message. val message = Message("Picture", time, sender) .setData("image/", imageUri) val style = Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message)
Java
// Create new Person. Person sender = new Person() .setName(name) .setUri(uri) .setIcon(null) .build(); // Create image message. Message message = new Message("Picture", time, sender) .setData("image/", imageUri); Notification.MessagingStyle style = new Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message);
שמירת תשובות כטיוטות: האפליקציה יכולה לאחזר את הערך של
EXTRA_REMOTE_INPUT_DRAFT
שנשלח על ידי המערכת כשמשתמש סוגר בטעות התראה על הודעה. אפשר להשתמש בתוספת הזו כדי לאכלס מראש שדות טקסט באפליקציה כך שהמשתמשים יוכלו לסיים את התשובה.לזהות אם שיחה היא שיחה קבוצתית: אפשר להשתמש ב-
setGroupConversation()
כדי לזהות שיחה כשיחת קבוצה או כשיחה אישית.מגדירים את הפעולה הסמנטית ל-Intent:
setSemanticAction()
מאפשרת לתת לפעולה משמעות סמנטית, כ'סימון כפריט שנקרא', "delete", "Reply, " וכן הלאה.תשובה מהירה: ב-Android 9 יש תמיכה באותן הצעות לתשובות שזמינות של אפליקציית הודעות. כדאי להשתמש
RemoteInput.setChoices()
כדי לספק מערך של תשובות סטנדרטיות למשתמש.
הגדרות הערוץ, שידורים ו'נא לא להפריע'
ב-Android 8.0 הושקה Notification Channels, שמאפשרת ליצור ערוץ מותאם אישית לכל סוג של התראה שרוצים להציג. ב-Android 9, השינויים הבאים מפשטים את ההגדרות של ערוצי ההתראות:
חסימה של קבוצות ערוצים: משתמשים יכולים עכשיו לחסום קבוצות שלמות של ערוצים בהגדרות ההתראות של אפליקציה. אפשר להשתמש בשיטה
isBlocked()
כדי לזהות מתי קבוצה חסומה, וכתוצאה מכך לא לשלוח התראות לגבי ערוצים בקבוצה הזו.בנוסף, האפליקציה יכולה לשלוח שאילתה לגבי ההגדרות הנוכחיות של קבוצת הערוצים באמצעות השיטה החדשה
getNotificationChannelGroup()
.סוגי כוונות חדשים לשידור: מערכת Android שולחת עכשיו כוונות לשידור כשמצב החסימה של ערוצי ההתראות ושל קבוצות הערוצים משתנה. האפליקציה שבבעלותה הערוץ או הקבוצה החסומים יכולה להקשיב לכוונות האלה וגם מגיבים בהתאם. למידע נוסף על הפעולות והפרטים הנוספים האלה של הכוונה, תוכלו לעיין ברשימת הקבועים המעודכנת במסמך העזרה של
NotificationManager
. לקבלת מידע על תגובה לכוונות שידור, אפשר לעיין ב: שידורים.NotificationManager.Policy
יש שלוש קטגוריות חדשות של עדיפות 'נא לא להפריע':PRIORITY_CATEGORY_ALARMS
נותן עדיפות לשעונים מעוררים.PRIORITY_CATEGORY_MEDIA
נותן עדיפות לצלילים ממקורות מדיה, כמו מדיה וניווט קולי.PRIORITY_CATEGORY_SYSTEM
מתעדפת את צלילי המערכת.
ב-
NotificationManager.Policy
יש גם שבעה קבועי 'ללא הפרעות' חדשים יכול להשתמש כדי למנוע הפרעה בראייה:SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
מונעת מההתראה להפעיל פעילות במסך מלא.SUPPRESSED_EFFECT_LIGHTS
חסימת נוריות ההתראות.SUPPRESSED_EFFECT_PEEK
מונעת מצב של החלקה מהירה של ההתראות לתצוגה ('הצצה').SUPPRESSED_EFFECT_STATUS_BAR
ההגדרה מונעת הצגת התראות בשורת הסטטוס במכשירים שתומכים בסרגלי הסטטוס.SUPPRESSED_EFFECT_BADGE
חסימת תגים במכשירים שתומכים בתגים. מידע נוסף זמין במאמר שינוי של תג ההתראהSUPPRESSED_EFFECT_AMBIENT
חוסם התראות במכשירים שתומכים במסכים עם תאורת אווירה.SUPPRESSED_EFFECT_NOTIFICATION_LIST
מונעת את הצגת ההתראות בתצוגת הרשימה במכשירים שתומכים בתצוגת רשימה, כמו תריס ההתראות או מסך הנעילה.
תמיכה בכמה מצלמות ועדכונים למצלמות
במכשירים עם Android 9, אפשר לגשת לשידורים. בו-זמנית משני או יותר מצלמות. במכשירים עם שתי מצלמות קדמיות או שתי מצלמות אחוריות, אפשר ליצור תכונות חדשניות שלא ניתן ליצור עם מצלמה אחת בלבד, כמו זום חלק, אפקט בוקה ותצוגה סטריאופונית. ה-API מאפשר גם להפעיל שידור מצלמה לוגי או משולב שמבצע מעבר אוטומטי בין שתי מצלמות או יותר.
שיפורים נוספים במצלמה כוללים פרמטרים של סשן נוספים שעוזרים לצמצם עיכובים במהלך הצילום הראשוני, ושיתוף של משטח שמאפשר ללקוחות המצלמה לטפל בתרחישי שימוש שונים בלי צורך להפסיק ולהתחיל את הסטרימינג של המצלמה. הוספנו גם ממשקי API עבור Flash מבוסס-תצוגה תמיכה וגישה ל-OIS חותמות זמן לייצוב תמונה ברמת האפליקציה ולאפקטים מיוחדים.
ב-Android 9 יש ריבוי מצלמות
API
תומכת במצלמות מונוכרומטיות במכשירים עם
FULL
או
יכולת LIMITED
.
פלט מונוכרום מתקבל באמצעות הפורמט YUV_420_888
, כאשר Y הוא רמת אפור, U (Cb) הוא 128 ו-V (Cr) הוא 128.
ב-Android 9 יש גם תמיכה במצלמות USB/UVC חיצוניות במכשירים נתמכים.
ImageDecoder לתמונות ולמפות ביטים שניתנים להזזה
ב-Android 9 מופיעה הכיתה ImageDecoder
, שמספקת גישה מודרנית לפענוח תמונות. שימוש בכיתה הזו
במקום BitmapFactory
ו-BitmapFactory.Options
ממשקי API.
ImageDecoder
מאפשר לך ליצור
Drawable
או
Bitmap
ממאגר נתונים זמני של בייטים, מקובץ,
או URI. כדי לפענח תמונה, צריך להפעיל
createSource()
במקור של התמונה המקודדת. לאחר מכן, קוראים ל-decodeDrawable()
או ל-decodeBitmap()
ומעבירים את האובייקט ImageDecoder.Source
כדי ליצור Drawable
או Bitmap
. כדי לשנות את הגדרות ברירת המחדל, מעבירים את OnHeaderDecodedListener
אל decodeDrawable()
או decodeBitmap()
. ImageDecoder
קורא ל-onHeaderDecoded()
עם רוחב וגובה ברירת המחדל של התמונה, ברגע שהם ידועים.
אם התמונה המקודדת היא GIF או WebP מונפש, הפונקציה decodeDrawable()
מחזירה
Drawable
שהוא מופע של
AnimatedImageDrawable
בכיתה.
יש כמה שיטות להגדרת מאפיינים של תמונות:
- כדי לשנות את הגודל של התמונה שמקודדת לגודל מדויק, צריך להעביר את מידות היעד אל
setTargetSize()
אפשר גם לשנות את הגודל של תמונות באמצעות גודל דגימה. מעבירים את גודל המדגם ישירות אלsetTargetSampleSize()
. - לחיתוך תמונה מתוך הטווח של תמונה מותאמת, יש להפעיל את
setCrop()
- כדי ליצור מפת סיביות ניתנת לשינוי, מעבירים את
true
אלsetMutableRequired()
.
באמצעות ImageDecoder
אפשר גם להוסיף אפקטים מורכבים ומותאמים אישית לתמונה
כמו פינות מעוגלות או
מסיכות מעגלות. משתמשים בפקודה setPostProcessor()
עם מופע של הכיתה PostProcessor
כדי להריץ את פקודות הציור שרוצים.
אנימציה
Android 9 כולל
AnimatedImageDrawable
לציור ולהצגה של תמונות מונפשות בפורמט GIF ו-WebP.
AnimatedImageDrawable
פועל באופן דומה ל-AnimatedVectorDrawable
, בכך ששרשור הרינדור מניע את האנימציות של AnimatedImageDrawable
.
חוט הרינדור משתמש גם בחוט עבודה כדי לבצע פענוח, כדי שהפענוח לא יפריע לפעולות אחרות בחוט הרינדור. ההטמעה הזו מאפשרת לאפליקציה להציג תמונה מונפשת בלי לנהל את העדכונים שלה או להפריע לאירועים אחרים בשרשור של ממשק המשתמש באפליקציה.
אפשר לפענח AnimatedImageDrawable
באמצעות מכונה של ImageDecoder
. קטע הקוד הבא מראה איך להשתמש ב-ImageDecoder
כדי לפענח את ה-AnimatedImageDrawable
:
Kotlin
@Throws(IOException::class) private fun decodeImage() { val decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(resources, R.drawable.my_drawable)) // Prior to start(), the first frame is displayed. (decodedAnimation as? AnimatedImageDrawable)?.start() }
Java
private void decodeImage() throws IOException { Drawable decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(getResources(), R.drawable.my_drawable)); if (decodedAnimation instanceof AnimatedImageDrawable) { // Prior to start(), the first frame is displayed. ((AnimatedImageDrawable) decodedAnimation).start(); } }
ב-ImageDecoder
יש כמה שיטות שמאפשרות להמשיך לשנות את התמונה.
לדוגמה, אפשר להשתמש ב-method setPostProcessor()
כדי לשנות את המראה של התמונה, למשל להחיל מסכה עגולה או פינות מעוגלות.
סרטוני HDR VP9, דחיסת תמונות HEIF וממשקי Media API
ב-Android 9 יש תמיכה מובנית ב-VP9 Profile 2 בטווח דינמי גבוה (HDR), כך שתוכלו לספק למשתמשים סרטים באיכות HDR מ-YouTube, מ-Play Movies וממקורות אחרים במכשירים שתומכים ב-HDR.
ב-Android 9 נוספה גם תמיכה בקידוד תמונות באמצעות התכונה 'תמונה של רמת יעילות גבוהה'
פורמט הקובץ (HEIF
או HEIC), שמשפר את הדחיסה ומצמצם את נפח האחסון ונתוני הרשת
בשימוש. דוגמאות של תמונות סטילס מסוג HEIF נתמכות
MediaMuxer
ו-MediaExtractor
הסוגים. תמיכת הפלטפורמה במכשירי Android 9 מאפשרת לשלוח תמונות HEIF ולהשתמש בהן בקלות משרת הקצה העורפי. אחרי שתבדקו שהאפליקציה תואמת לפורמט הנתונים הזה לשיתוף ולהצגה, נסו להשתמש ב-HEIF כפורמט אחסון תמונות באפליקציה. אפשר לבצע המרה של JPEG ל-HEIC באמצעות ImageDecoder
או BitmapFactory
(שמקבלת קובץ בייטמאפ מקובץ JPEG). לאחר מכן תוכלו להשתמש ב-HeifWriter
כדי לכתוב תמונות סטילס בפורמט HEIF ממאגרי בייטים של YUV, או ממופעים של Surface
או Bitmap
.
מדדי המדיה זמינים גם מהמחלקות AudioTrack
, AudioRecord
ו-MediaDrm
.
ב-Android 9 יש שיטות חדשות
MediaDRM
כדי לקבל מדדים, HDCP
רמות האבטחה, מספר הסשנים ומספר הסשנים, וכדי להוסיף יותר שליטה
רמות האבטחה ועצירות מאובטחות. לעיון בהבדלים ב-API
לפרטים נוספים.
ב-Android 9, נוספה ל-AAudio API תמיכה במספר מאפיינים נוספים של AAudioStream, כולל שימוש, סוג תוכן והגדרה מוגדרת מראש של קלט. בעזרת המאפיינים האלה אפשר ליצור זרמים
שמכוון לאפליקציות VoIP או למצלמות וידאו. אפשר גם להגדיר את מזהה הסשן כדי לשייך סטרימינג של AAudio ל-submix שיכול לכלול אפקטים. משתמשים ב-API AudioEffect
כדי לשלוט בהשפעות.
ב-Android 9 מופיע ה-API AudioEffect
לעיבוד דינמי.
בעזרת הכיתה הזו תוכלו ליצור אפקטים של אודיו שמבוססים על ערוצים – כולל איזולציה, דחיסה במספר תדרים ומגבלה – במספר שלבים. אפשר להגדיר את מספר הפסגות והשלבים הפעילים, ורוב הפרמטרים ניתנים לשליטה בזמן אמת.
רגישות לעלויות של נתונים ב-JobScheduler
החל מ-Android 9, JobScheduler
יכול להשתמש באותות של סטטוס הרשת שספק הסלולר מספק כדי לשפר את הטיפול במשימות שקשורות לרשת.
משימות יכולות להצהיר על גודל הנתונים המשוער, לשליפה מראש של אותות ולציין
דרישות רשת מפורטות. לאחר מכן JobScheduler
מנהל את העבודה בהתאם
סטטוס הרשת. לדוגמה, כשהרשת מאותתת על עומס, JobScheduler
עשוי לדחות בקשות רשת גדולות. כשמשתמשים ברשת ללא חיוב לפי נפח נתונים, JobScheduler
יכול להריץ משימות של אחסון נתונים מראש כדי לשפר את חוויית המשתמש, למשל על ידי אחסון כותרות מראש.
כשמוסיפים משרות, חשוב להשתמש בכתובת setEstimatedNetworkBytes()
,
setPrefetch()
,
ו-setRequiredNetwork()
כשהדבר רלוונטי
JobScheduler
מטפלים בעבודה כמו שצריך. כשהמשימה מתבצעת,
חשוב להשתמש באובייקט Network
הוחזר על ידי
JobParameters.getNetwork()
אחרת, תשתמשו באופן מרומז ברשת ברירת המחדל של המכשיר,
לא יעמדו בדרישות שלך, מה שיגרום לשימוש לא מכוון בנתונים.
1.1 ממשק API של רשתות נוירונים
Neural Networks API הוצג ב-Android 8.1 (API ברמה 27) כדי לזרז את למידת המכונה במכשיר ב-Android. ב-Android 9 יש הרחבה ושיפור של ה-API, עם תמיכה בתשע פעולות חדשות:
- פעולות מתמטיות ברמת הרכיב:
- פעולות במערך:
בעיה ידועה: כשמעבירים טינסורים של ANEURALNETWORKS_TENSOR_QUANT8_ASYMM
לפעולה ANEURALNETWORKS_PAD
, שזמינה ב-Android מגרסה 9 ואילך, יכול להיות שהפלט מ-NNAPI לא יתאים לפלט של מסגרות למידה חישובית ברמה גבוהה יותר, כמו TensorFlow Lite. שלך
במקום זאת עובר רק
ANEURALNETWORKS_TENSOR_FLOAT32
עד שהבעיה תיפתר.
בנוסף, נוספה ל-API פונקציה חדשה, ANeuralNetworksModel_relaxComputationFloat32toFloat16()
, שמאפשרת לציין אם לחשב את ANEURALNETWORKS_TENSOR_FLOAT32
בטווח ובדיוק נמוכים כמו בפורמט של נקודת צפה באורך 16 ביט של IEEE 754.
מסגרת למילוי אוטומטי
ב-Android 9 יש כמה שיפורים שמאפשרים לבצע מילוי אוטומטי יכולים להשתמש בשירותים כדי לשפר עוד יותר את חוויית המשתמש בעת מילוי הטפסים. למידע נוסף על השימוש בתכונות המילוי האוטומטי באפליקציה, קראו את המדריך Autofill Framework.
שיפורי אבטחה
ב-Android 9 נוספו כמה תכונות אבטחה, שמפורטות בקטעים הבאים:
אישור מאובטח של Android
מכשירים נתמכים עם Android מגרסה 9 ואילך מספקים היכולת להשתמש ב'אישור מוגן של Android'. כשמשתמשים בתהליך העבודה הזה, האפליקציה מציגה למשתמש הודעה שמבקשת ממנו לאשר הצהרה קצרה. ההצהרה הזו מאפשרת לאפליקציה לאשר מחדש שהמשתמש רוצה להשלים לבצע עסקה רגישה, כמו ביצוע תשלום.
אם המשתמש מקבל את דף החשבון, Android Keystore מקבל ומאחסן
חתימה קריפטוגרפית שמוגנת על ידי אימות הודעה עם גיבוב (hash) עם מפתח
קוד HMAC. אחרי ש-Android Keystore מאשר את תקינות ההודעה, האפליקציה יכולה להשתמש במפתח שנוצר מ-trustedConfirmationRequired
בסביבת הביצוע המאובטחת (TEE) כדי לחתום על ההודעה שהמשתמש אישר. החתימה מציינת, ברמת ביטחון גבוהה מאוד, שהמשתמש ראה את ההצהרה ואישר אותה.
זהירות: התכונה 'אישור מוגן על ידי Android' לא מספקת ערוץ מידע מאובטח למשתמש. האפליקציה לא יכולה להבטיח סודיות מעבר למה שפלטפורמת Android מציעה. במיוחד, אל תשתמשו בתהליך העבודה הזה כדי להציג מידע רגיש שאתם לא מציגים בדרך כלל במכשיר של המשתמש.
לקבלת הנחיות להוספת תמיכה ב'אישור מוגן ב-Android', אפשר לעיין ב הגנה על Android אישור מותאמת אישית.
תיבת דו-שיח מאוחדת לאימות ביומטרי
ב-Android 9, המערכת מספקת תיבות דו-שיח לאימות ביומטרי בשם של האפליקציה. הפונקציונליות הזו יוצרת מראה, חוויה ומיקום סטנדרטיים לתיבת הדו-שיח, וכך מעניקה למשתמשים יותר ביטחון שהם מבצעים אימות מול בודק מהימן של פרטי כניסה ביומטריים.
אם באפליקציה שלכם נעשה שימוש ב-FingerprintManager
כדי להציג למשתמשים תיבת דו-שיח לאימות באמצעות טביעת אצבע, צריך לעבור לשימוש ב-BiometricPrompt
במקום זאת. BiometricPrompt
מתבסס על המערכת כדי להציג את האימות
הוא גם משנה את ההתנהגות שלו כדי להתאים אותו לסוג המידע הביומטרי
האימות שהמשתמש בחר.
מודול אבטחה לחומרה
מכשירים נתמכים שבהם פועלת מערכת Android מגרסה 9 ואילך יכולים כולל StrongBox Keymaster, יישום של Keymaster HAL נמצא במודול אבטחת חומרה. המודול מכיל את הדברים הבאים:
- מעבד משלו.
- אחסון מאובטח.
- מחולל מספרים אקראיים אמיתי.
- מנגנונים נוספים למניעת פגיעה בחבילות והתקנה לא מורשית של אפליקציות.
כשבודקים מפתחות שמאוחסנים ב-StrongBox Keymaster, המערכת מאמתת את תקינות המפתח באמצעות Trusted Execution Environment (TEE).
למידע נוסף על השימוש ב-Strongbox Keymaster, אפשר לעיין באבטחת חומרה יחידת לימוד.
ייבוא של מפתחות מאובטחים ל-Keystore
ב-Android 9 נוספה יכולת לייבא מפתחות מוצפנים באופן מאובטח ל-Keystore באמצעות פורמט מפתחות עם קידוד ASN.1, וכך לשפר את האבטחה של פענוח המפתחות. לאחר מכן, Keymaster מפענח את המפתחות ב-Keystore, כך שתוכן המפתחות אף פעם לא מופיע כטקסט ללא הצפנה בזיכרון המארח של המכשיר.
מידע נוסף על ייבוא מפתחות מוצפנים בצורה מאובטחת יותר
סכמת חתימת APK עם רוטציית מפתחות
במערכת Android 9 נוספה תמיכה ב-APK Signature Scheme v3. לסכמה הזו יש אפשרות לכלול רשומה של הוכחת סבב מפתחות בבלוק החתימה על כל חתימה. אישור. היכולת הזו מאפשרת לחתום על האפליקציה באמצעות חתימה חדשה על ידי קישור אישורי החתימה הקודמים של קובץ ה-APK לאישור עם והוא חתום עכשיו.
מידע נוסף על רוטציית מפתחות באמצעות
apksigner
אפשרות לאפשר פענוח מפתחות רק במכשירים לא נעולים
ב-Android 9 מוצג הדגל unlockedDeviceRequired
. האפשרות הזו קובעת אם ב-Keystore יידרשו לבטל את הנעילה של המסך לפני שאפשר יהיה לבצע פענוח של נתונים שנמצאים בהעברה או מאוחסנים באמצעות המפתח שצוין. סוגי המפתחות האלה מתאימים להצפנת מידע רגיש לאחסון בדיסק, כמו נתונים רפואיים או נתונים ארגוניים. הדגל מספק למשתמשים ביטחון גבוה יותר
לא ניתן לפענח את הנתונים כשהמכשיר נעול במקרה שהטלפון אבד
או שנגנב.
כדי להגן על המפתח מפני פענוח כשהמכשיר נעול, צריך להפעיל את הדגל
על ידי העברת true
אל setUnlockedDeviceRequired()
. לאחר השלמת השלב הזה, כשמסך המשתמש נעול, כל
מנסה לפענח את הנתונים או לחתום עליהם באמצעות המפתח הזה. למכשיר נעול נדרש
קוד אימות, סיסמה, טביעת אצבע או גורם מהימן אחר לפני שניתן
בוצעה גישה.
תמיכה בהצפנה מדור קודם
מכשירי Android 9 שנשלחים עם Keymaster 4 תומכים בנתוני Triple Encryption Algorithm, או Triple DES. אם האפליקציה שלכם פועלת בשילוב עם מערכות מדור קודם שדורשות Triple DES, כדאי להשתמש בסוג הצפנה הזה כשאתם מצפינים פרטי כניסה רגישים.
למידע נוסף על שיפור האבטחה של האפליקציה, אפשר לקרוא את המאמר אבטחה ב-Android מפתחים.
הוצאה משימוש של WPS
תצורה מוגנת של רשת Wi-Fi (WPS) הוצאה משימוש מטעמי אבטחה.
גיבויים של Android
ב-Android 9 נוספו פונקציונליות חדשה ואפשרויות חדשות למפתחים כדי לגבות ולשחזר אותם. פרטים על השינויים האלה מופיעים בהמשך .
גיבויים להצפנה מצד הלקוח
ב-Android 9 נוספה תמיכה בהצפנת גיבויים ל-Android באמצעות סוד מצד הלקוח. התמיכה הזו מופעלת באופן אוטומטי כשהתנאים הבאים מתקיימים:
- המשתמש הפעיל גיבוי באמצעות Android 9 ומעלה.
- המשתמש הגדיר נעילת מסך למכשיר שלו, שדורשת קוד אימות, קו ביטול נעילה או סיסמה כדי לבטל את הנעילה.
כשאמצעי הפרטיות הזה מופעל, קוד האימות, קו ביטול הנעילה או הסיסמה של המכשיר שנדרשים כדי לשחזר נתונים מהגיבויים שבוצעו על ידי המכשיר של המשתמש. למידה מידע נוסף על הטכנולוגיה שמאחורי התכונה הזו זמין ב-Google Cloud Key Vault סקירה מפורטת בנושא שירות.
הגדרת התנאים שנדרשים לגיבוי במכשיר
אם נתוני האפליקציה כוללים מידע אישי רגיש או העדפות, ב-Android 9 יש לכם אפשרות להגדיר את התנאים במכשיר שבהם נתוני האפליקציה ייכללו בגיבוי של המשתמש, למשל כשהצפנה בצד הלקוח מופעלת או כשמתבצעת העברה מקומית ממכשיר למכשיר.
למידע נוסף על גיבוי נתונים במכשירי Android, אפשר לעיין בנתונים סקירה כללית של הגיבוי.
נגישות
ב-Android 9 נוספו שיפורים למסגרת הנגישות, שבעזרתם קל יותר לספק למשתמשים באפליקציה חוויה טובה יותר.
סמנטיקה של ניווט
מאפיינים שנוספו ב-Android 9 מאפשרים לכם להגדיר בקלות רבה יותר איך שירותי הנגישות, במיוחד קוראי המסך, מנווטים מחלק אחד של המסך לחלק אחר. המאפיינים האלה יכולים לעזור למשתמשים עם ליקויי ראייה לעבור במהירות בין טקסט בממשק המשתמש של האפליקציה ולאפשר להם לבחור.
לדוגמה, באפליקציית שופינג, קורא מסך יכול לעזור למשתמשים לנווט ישירות מקטגוריה אחת של מבצעים, ללא קורא המסך שתצטרכו לקרוא את כל הפריטים בקטגוריה לפני שתעברו לפריט הבא.
כותרות של חלונית נגישות
ב-Android 8.1 (רמת API 27) ובגרסאות ישנות יותר, שירותי הנגישות לא תמיד יכולים לקבוע מתי חלון ספציפי במסך עודכן, למשל כשפעילות מחליפה קטע אחד בקטע אחר. חלוניות מורכבות מרכיבי ממשק משתמש שקשורים זה לזה מבחינה חזותית ומקובצים באופן לוגי, ובדרך כלל הן כוללות קטע.
ב-Android 9, אפשר לספק שמות של חלוניות נגישות או שמות שניתן לזהות בנפרד, לחלוניות האלה. אם לחלונית יש כותרת של חלונית הנגישות, שירותי הנגישות מקבלים מידע מפורט יותר כשהחלונית משתנה. היכולת הזו מאפשרת לשירותים לספק למשתמש מידע מפורט יותר על השינויים בממשק המשתמש.
כדי לציין כותרת של חלונית, משתמשים ב
android:accessibilityPaneTitle
. אפשר גם לעדכן את הכותרת של חלונית בממשק המשתמש שמוחלפת במהלך זמן הריצה באמצעות setAccessibilityPaneTitle()
.
לדוגמה, אפשר לספק שם לאזור התוכן של אובייקט Fragment
.
ניווט מבוסס-כותרת
אם באפליקציה מוצג תוכן טקסטואלי שכולל כותרות לוגיות, צריך להגדיר את
android:accessibilityHeading
ל-true
במקרים של
View
שמייצגות את הכותרות האלה. הוספת הכותרות האלה מאפשרת לשירותי הנגישות לעזור למשתמשים לנווט ישירות מכותרת אחת לכותרת הבאה. כל שירות נגישות יכול להשתמש באפשרות הזו
לשיפור היכולת לשפר חוויית הניווט בממשק המשתמש.
ניווט ופלט בקבוצה
בדרך כלל, קוראי מסך השתמשו
שיוך של android:focusable
לערך
כדי לקבוע מתי כדאי לקרוא
ViewGroup
, או אוסף של
View
אובייקטים, כיחידה אחת. כך המשתמשים יוכלו להבין שהתצוגות היו קשורות זו לזו באופן לוגי.
ב-Android 8.1 ומטה, צריך לסמן כל אובייקט View
בתוך
התמונה ViewGroup
לא ניתנת למיקוד וה-ViewGroup
עצמו ניתן למיקוד. ההסדר הזה גרם לכך שחלק מהמקרים של View
סומנו ככאלה שאפשר להתמקד בהם, באופן שהקשה על הניווט במקלדת.
החל מ-Android 9, אפשר להשתמש במאפיין android:screenReaderFocusable
במקום במאפיין android:focusable
במצבים שבהם להגדרת אובייקט View
כזמין להדגשה יש השלכות לא רצויות. קוראי המסך מתמקדים בכל הרכיבים שהגדירו את android:screenReaderFocusable
או את android:focusable
לערך true
.
פעולות נוחות
ב-Android 9 נוספה תמיכה בביצוע פעולות נוחות בשם המשתמשים:
- אינטראקציה עם הסברים קצרים
- תכונות נוספות במסגרת הנגישות מעניקות לכם גישה לתיאורים מפורטים בממשק המשתמש של האפליקציה. משתמשים ב-
getTooltipText()
כדי לקרוא את הטקסט של תיבת העזרה, וב-ACTION_SHOW_TOOLTIP
ו-ACTION_HIDE_TOOLTIP
כדי להורות למופעים שלView
להציג או להסתיר את תיבות העזרה שלהם. - נוספו פעולות גלובליות
- Android 9 כולל תמיכה בשתי פעולות נוספות במכשיר
AccessibilityService
בכיתה. השירות שלך יכול לעזור למשתמשים לנעול את המכשירים שלהם וליצור צילומי מסך באמצעותGLOBAL_ACTION_LOCK_SCREEN
ו-GLOBAL_ACTION_TAKE_SCREENSHOT
פעולות, בהתאמה.
פרטי השינוי של החלון
ב-Android 9 קל יותר לעקוב אחרי עדכונים בחלונות של אפליקציה כשהאפליקציה מצייר מחדש כמה חלונות בו-זמנית. כשמתרחש אירוע TYPE_WINDOWS_CHANGED
, אפשר להשתמש ב-API של getWindowChanges()
כדי לקבוע איך החלונות השתנו. במהלך עדכון בכמה חלונות, כל חלון יוצר קבוצת אירועים משלו.
getSource()
הפונקציה מחזירה את תצוגת הרמה הבסיסית (root) של החלון שמשויך לכל אירוע.
אם באפליקציה יש כותרות של חלוניות נגישות
View
אובייקטים, שהשירות שלך יכול לזהות
כשממשק המשתמש של האפליקציה מתעדכן. כאשר
TYPE_WINDOW_STATE_CHANGED
התרחש אירוע, יש להשתמש בסוגים שהוחזרו על ידי
getContentChangeTypes()
כדי לקבוע איך החלון השתנה. לדוגמה, ה-framework יכול
לזהות מתי לחלונית יש כותרת חדשה, או מתי חלונית נעלמה.
סיבוב
כדי למנוע סיבוב לא מכוון, הוספנו מצב שמצמיד את הכיוון הנוכחי גם אם מיקום המכשיר משתנה. המשתמשים יכולים להפעיל את הסיבוב באופן ידני לפי הצורך בלחיצה על לחצן בסרגל המערכת.
ברוב המקרים, ההשפעה על התאימות של האפליקציות היא מינימלית. אבל אם לאפליקציה יש התנהגות סיבוב מותאמת אישית או שימוש בכיוון מסך יוצא דופן הגדרות כאלה, אתם עשויים להיתקל בבעיות שלא הייתם שמים לב אליהן בעבר, העדפת סבב המשתמשים תמיד הייתה לאורך. מומלץ לבדוק את התנהגות הסיבוב בכל הפעילויות העיקריות באפליקציה, ולוודא שכל ההגדרות של כיוון המסך עדיין מספקות את חוויית השימוש האופטימלית.
פרטים נוספים זמינים בשינויים בהתנהגות המשויכים.

מצב רוטציה חדש מאפשר למשתמשים להפעיל את הכיוון האנכי באופן ידני לפי הצורך באמצעות לחצן בסרגל המערכת.
טקסט
Android 9 כולל את התכונות הבאות שקשורות לטקסט Platform:
טקסט שחושב מראש: הכיתה
PrecomputedText
משפרת את הביצועים של עיבוד הטקסט על ידי כך שמאפשרת לחשב את המידע הנדרש ולשמור אותו במטמון מראש. הוא גם מאפשר לאפליקציה לבצע פריסה של טקסט מחוץ ל-thread הראשי.זכוכית מגדלת: הכיתה
Magnifier
היא ווידג'ט פלטפורמה שמספק API לזכוכית מגדלת, שמאפשר חוויית זכוכית מגדלת בכל האפליקציות.Smart Linkify: מערכת Android 9 משפרת את
TextClassifier
כיתה, שמשתמש בלמידת מכונה כדי לזהות ישויות מסוימות בטקסט שנבחר הצעות לפעולות. לדוגמה,TextClassifier
מאפשר לאפליקציה לזהות שהמשתמש בחר מספר טלפון. לאחר מכן, האפליקציה תוכל להציע למשתמש להתקשר למספר הזה. התכונות שלTextClassifier
החלפה של הפונקציונליות של המחלקהLinkify
.פריסת טקסט: יש כמה שיטות ומאפייני נוחות שיעזרו לכם להטמיע את העיצוב של ממשק המשתמש. פרטים נוספים זמינים במסמכי העזרה של
TextView
.
המרה מראש של קובצי DEX ב-ART
במכשירים עם Android מגרסה 9 ואילך, המהדר מראש של סביבת זמן הריצה של Android (ART) מבצע אופטימיזציה נוספת של קבצים דחוסים בפורמט Dalvik Executable (DEX) על ידי המרת קובצי ה-DEX בחבילת האפליקציה לייצוג קומפקטי יותר. השינוי הזה מאפשר לאפליקציה להתחיל לפעול מהר יותר ולצרוך פחות מקום בדיסק ופחות זיכרון RAM.
השיפור הזה מועיל במיוחד למכשירים ברמה נמוכה עם מהירויות איטיות יותר של קלט/פלט בדיסק.
תיעוד עקבות המערכת במכשיר
ב-Android 9 אפשר לתעד את נתוני המערכת מהמכשיר, ואז לשתף דוח של ההקלטות האלה עם צוות הפיתוח. הדוח הזה שתומך בכמה פורמטים, כולל HTML.
איסוף הנתונים האלה מאפשר לתעד נתוני תזמון שקשורים לתהליכים ולשרשראות של האפליקציה, ולראות סוגים אחרים של מצבי מכשיר שחשובים ברמה הגלובלית.
מידע נוסף על הכלי הזה זמין במאמר ביצוע מעקב אחרי מערכת במכשיר.