מערכת Android 9 (רמת API 28) כוללת תכונות ויכולות חדשות ונהדרות משתמשים ומפתחים. במסמך הזה נדגיש את התכונות החדשות למפתחים.
למידע נוסף על ממשקי ה-API החדשים, אפשר לקרוא את דוח ההבדלים של ממשקי ה-API. אפשר גם להיכנס אל הפניית Android API. חשוב גם לבדוק את המידע שינויים בהתנהגות ב-Android 9 כדי ללמוד על תחומים שבהם שינויים בפלטפורמות עשויים להשפיע על האפליקציות שלך.
מיקום בפנים עם Wi-Fi RTT
ב-Android 9 נוספה תמיכה בפלטפורמה לרשת Wi-Fi מסוג IEEE 802.11-2016 פרוטוקול שנקרא גם Wi-Fi Round-Trip-Time (RTT) – כדי לאפשר לכם ליהנות מהיתרון של המיקום בפנים באפליקציות שלכם.
במכשירים שמותקנת בהם גרסת Android 9 עם תמיכה בחומרה, האפליקציות יכולות להשתמש
ממשקי API של RTT שמיועדים למדידה של
המרחק בין נקודות גישה (AP) ל-Wi-Fi עם יכולות RTT בקרבת מקום. יש צורך במכשיר
שירותי המיקום מופעלים וסריקת נקודות ה-Wi-Fi מופעלת (בקטע
הגדרות > מיקום), והאפליקציה צריכה לכלול את
ACCESS_FINE_LOCATION
הרשאה. המכשיר לא צריך להתחבר לנקודות הגישה כדי להשתמש ב-RTT.
כדי לשמור על הפרטיות, רק הטלפון יכול לקבוע את המרחק אל
נקודת גישה (AP) נקודות הגישה לא כוללות את המידע הזה.
אם המכשיר מודד את המרחק ל-3 נקודות גישה או יותר, ניתן להשתמש אלגוריתם רב-שלבי להערכת מיקום המכשיר המתאים ביותר מדידות. התוצאה היא בדרך כלל מדויקת בטווח של 1-2 מטר.
הדיוק הזה מאפשר לפתח חוויות חדשות, כמו ניווט בתוך המבנה ושירותים מבוססי-מיקום פרטניים, כמו שליטה באמצעות הקול (לדוגמה, "הדליקי את הנורה הזו") ומידע מבוסס-מיקום (כמו "האם יש מבצעים מיוחדים על המוצר הזה?").
הצגת ה-Wi-Fi RTT API בשימוש ב אפליקציית הדגמה ל-Android WifiRttScan.
מידע נוסף זמין במאמר הבא: מיקום Wi-Fi: בטווח של RTT.
תמיכה במגרעת במסך
ב-Android 9 יש תמיכה במסכים העדכניים ביותר מקצה לקצה
שכוללים גזירי מסך למצלמות ולרמקולים.
DisplayCutout
מאפשר לגלות את המיקום והצורה של האזורים הלא פונקציונליים שבהם
אסור להציג תוכן. כדי לקבוע את הקיום ואת המיקום של
של אזורי המגרעת האלה,
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 ומעלה.
כדי לראות קוד לדוגמה שמשתמש בהתראות, כולל תכונות של Android 9, אפשר לעיין אנשים דוגמה.
חוויה משופרת של העברת הודעות
החל מ-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
class כדי להריץ כל פקודות שרטוט שרוצים.
אנימציה
Android 9 כולל
AnimatedImageDrawable
לציור ולהצגה של תמונות מונפשות בפורמט GIF ו-WebP.
AnimatedImageDrawable
פועל בצורה דומה ל-
AnimatedVectorDrawable
בכך ששרשור העיבוד מפעיל את האנימציות של AnimatedImageDrawable
.
ה-thread של העיבוד משתמש גם ב-thread של עובד כדי לפענח את הקוד,
להפריע לפעולות אחרות בשרשור של העיבוד. ההטמעה הזאת מאפשרת
להציג תמונה מונפשת באפליקציה בלי לנהל את העדכונים שלה
שמפריעים לאירועים אחרים בשרשור (thread) בממשק המשתמש של האפליקציה.
אפשר לפענח את הקוד של 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
יש כמה שיטות שמאפשרות להמשיך לשנות את התמונה.
לדוגמה, אפשר להשתמש
setPostProcessor()
שיטה לשינוי מראה התמונה, כמו החלת מסכת עיגול או
עם פינות מעוגלות.
דחיסת וידאו בפורמט HDR VP9 , דחיסת תמונות HEIF וממשקי API של מדיה
ב-Android 9 יש תמיכה מובנית בטווח דינמי גבוה (HDR) בפרופיל 29. כדי שתהיה לך אפשרות לספק למשתמשים שלך סרטים שתומכים ב-HDR מ-YouTube, מ-Play Movies, ומקורות אחרים במכשירים שתומכים ב-HDR.
ב-Android 9 נוספה גם תמיכה בקידוד תמונות באמצעות התכונה 'תמונה של רמת יעילות גבוהה'
פורמט הקובץ (HEIF
או HEIC), שמשפר את הדחיסה ומצמצם את נפח האחסון ונתוני הרשת
בשימוש. דוגמאות של תמונות סטילס מסוג HEIF נתמכות
MediaMuxer
ו-MediaExtractor
הסוגים. עם תמיכה בפלטפורמה במכשירי Android 9, קל לשלוח ולקבל
להשתמש בתמונות HEIF משרת הקצה העורפי. אחרי שמוודאים
תואמת לפורמט הנתונים הזה לצורך שיתוף והצגה. אפשר לנסות את HEIF
בתור פורמט לאחסון תמונות באפליקציה. אפשר לבצע המרה מסוג jpeg-to-heic
באמצעות ImageDecoder
או
BitmapFactory
(שמקבל
מפת סיביות מקובץ JPEG). לאחר מכן תוכלו להשתמש
HeifWriter
כדי לכתוב HEIF
תמונות סטילס ממאגרי נתונים זמניים של בייטים של YUV, או מופעים של
Surface
או
Bitmap
.
מדדי המדיה זמינים גם דרך
AudioTrack
,
AudioRecord
,
ו-MediaDrm
כיתות.
ב-Android 9 יש שיטות חדשות
MediaDRM
כדי לקבל מדדים, HDCP
רמות האבטחה, מספר הסשנים ומספר הסשנים, וכדי להוסיף יותר שליטה
רמות האבטחה ועצירות מאובטחות. לעיון בהבדלים ב-API
לפרטים נוספים.
ב-Android 9, AAudio API מוסיף
תמיכה בכמה מאפיינים נוספים של AAudioStream, כולל שימוש, תוכן
הסוג וההגדרה הקבועה מראש של הקלט. בעזרת המאפיינים האלה אפשר ליצור זרמים
שמכוון לאפליקציות VoIP או למצלמות וידאו. אפשר גם להגדיר את מזהה הסשן בתור
לשייך שידור אודיו עם תת-מיקס שיכול לכלול אפקטים. משתמשים ב
API של AudioEffect
לשליטה
באפקטים מיוחדים.
Android 9 כולל
API של AudioEffect
ל-
עיבוד הדינמיקה.
בכיתה הזו תוכלו ליצור אפקטים קוליים מבוססי-ערוץ,
איזון, דחיסה בריבוי תדרים ומגביל – במספר שלבים.
ניתן להגדיר את מספר התדרים והשלבים הפעילים, ורוב הפרמטרים
בשליטתו בזמן אמת.
רגישות עלות הנתונים ב-JobScheduler
החל מ-Android 9, JobScheduler
יכול להשתמש באותות סטטוס הרשת שסופקו על ידי הספקים כדי לשפר את
של משרות שקשורות לרשת.
משימות יכולות להצהיר על גודל הנתונים המשוער, לשליפה מראש של אותות ולציין
דרישות רשת מפורטות. לאחר מכן JobScheduler
מנהל את העבודה בהתאם
סטטוס הרשת. לדוגמה, כשהרשת מסמנת שהיא עמוסה,
יכול להיות שבקשות רשת גדולות יידחו על ידי JobScheduler
. במהלך
ברשת לא נמדדת, JobScheduler
יכול להריץ משימות שליפה מראש (prefetch) כדי
לשפר את חוויית המשתמש, למשל על ידי אחזור מראש של כותרות.
כשמוסיפים משרות, חשוב להשתמש בכתובת setEstimatedNetworkBytes()
,
setPrefetch()
,
ו-setRequiredNetwork()
כשהדבר רלוונטי
JobScheduler
מטפלים בעבודה כמו שצריך. כשהמשימה מתבצעת,
חשוב להשתמש באובייקט Network
הוחזר על ידי
JobParameters.getNetwork()
אחרת, תשתמשו באופן מרומז ברשת ברירת המחדל של המכשיר,
לא יעמדו בדרישות שלך, מה שיגרום לשימוש לא מכוון בנתונים.
Neural Networks API 1.1
השקנו את Neural Networks API ב-Android 8.1 (רמת API 27) כדי להאיץ את למידת המכונה במכשיר Android. מערכת Android 9 מרחיבה ומשפרת את ה-API, תמיכה בתשע פעולות חדשות:
- פעולות מתמטיות ברמת הרכיב:
- פעולות מערך:
בעיה ידועה: כשמעבירים את העכבר
ANEURALNETWORKS_TENSOR_QUANT8_ASYMM
את Tensor
ANEURALNETWORKS_PAD
שזמינה ב-Android מגרסה 9 ואילך,
יכול להיות שהפלט מ-NNAPI לא יתאים לפלט ממכונה ברמה גבוהה יותר
מסגרות למידה,
TensorFlow Lite. שלך
במקום זאת עובר רק
ANEURALNETWORKS_TENSOR_FLOAT32
עד שהבעיה תיפתר.
בנוסף, ה-API כולל גם פונקציה חדשה:
ANeuralNetworksModel_relaxComputationFloat32toFloat16()
שמאפשרת לקבוע אם לחשב
ANEURALNETWORKS_TENSOR_FLOAT32
בטווח ובדיוק נמוכים כמו של ה-IEEE 754 עם נקודה צפה (floating-point) של 16 ביט
הפורמט.
מסגרת למילוי אוטומטי
ב-Android 9 יש כמה שיפורים שמאפשרים לבצע מילוי אוטומטי יכולים להשתמש בשירותים שלנו כדי לשפר עוד יותר את חוויית המשתמש בעת מילוי הטפסים. מידע נוסף על אופן השימוש בתכונות המילוי האוטומטי באפליקציה זמין במאמר מדריך בנושא מסגרת המילוי האוטומטי.
שיפורי אבטחה
ב-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 נמצא במודול אבטחת חומרה. המודול מכיל את הדברים הבאים:
- מעבד (CPU) משלו.
- אחסון מאובטח.
- מחולל מספרים אקראיים אמיתי.
- מנגנונים נוספים לעמידות בפני פגיעה בחבילות והתקנה לא מורשית ממקור לא ידוע של אפליקציות.
בבדיקת מפתחות השמורים ב-StrongBox Keymaster, המערכת מאמתת התקינות של המפתח בסביבת ביצוע מהימנה (TEE).
למידע נוסף על השימוש ב-Strongbox Keymaster, אפשר לעיין באבטחת חומרה יחידת לימוד.
ייבוא של מפתחות מאובטחים ל-Keystore
עם Android 9, נהנים מאבטחה נוספת לפענוח מפתחות באמצעות הוספה יכולת לייבא מפתחות מוצפנים באופן מאובטח ל-Keystore באמצעות פורמט מפתח בקידוד ASN.1. לאחר מכן, Keymaster מפענח את המפתחות מאגר המפתחות, כך שהתוכן של המפתחות אף פעם לא יופיע כטקסט ללא הצפנה בזיכרון המארח של המכשיר.
מידע נוסף על ייבוא מפתחות מוצפנים באופן מאובטח.
סכמת חתימת APK עם רוטציית מפתחות
ב-Android 9 נוספה תמיכה ב-APK Signature Scheme v3. לסכמה הזו יש אפשרות לכלול רשומה של הוכחת סבב מפתחות בבלוק החתימה על כל חתימה. אישור. היכולת הזו מאפשרת לחתום על האפליקציה באמצעות חתימה חדשה על ידי קישור אישורי החתימה הקודמים של קובץ ה-APK לאישור עם והוא חתום עכשיו.
מידע נוסף על רוטציית מפתחות באמצעות
apksigner
אפשרות לאפשר פענוח מפתחות רק במכשירים לא נעולים
ב-Android 9 מוצג הדגל unlockedDeviceRequired
. האפשרות הזו קובעת
אם Keystore דורש לבטל את נעילת המסך לפני מתן הרשאה
פענוח של נתונים פעילים או נתונים מאוחסנים באמצעות המפתח שצוין. הסוגים האלה
מתאימים להצפנה של מידע אישי רגיש שנשמר בדיסק, כמו
בריאות או נתונים ארגוניים. הדגל מספק למשתמשים ביטחון גבוה יותר
לא ניתן לפענח את הנתונים כשהמכשיר נעול במקרה שהטלפון אבד
או גנוב.
כדי להגן על המפתח מפני פענוח כשהמכשיר נעול, צריך להפעיל את הדגל
על ידי העברת true
אל setUnlockedDeviceRequired()
. לאחר השלמת השלב הזה, כשמסך המשתמש נעול, כל
מנסה לפענח את הנתונים או לחתום עליהם באמצעות המפתח הזה. למכשיר נעול נדרש
קוד אימות, סיסמה, טביעת אצבע או גורם מהימן אחר לפני שניתן
בוצעה גישה.
תמיכה בהצפנה מדור קודם
מכשירי Android 9 שנשלחים עם Keymaster 4 תומכים ב-Triple Data Encryption Algorithm, או Triple DES. אם האפליקציה פועלת באופן הדדי עם משתמשים מדור קודם במערכות שדורשות Triple DES, משתמשות בהצפנה מהסוג הזה במהלך ההצפנה פרטי כניסה רגישים.
למידע נוסף על שיפור האבטחה של האפליקציה, אפשר לקרוא את המאמר אבטחה ב-Android מפתחים.
הוצאה משימוש של WPS
הגדרת Wi-Fi Protected Setup (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
של האירוע, השתמשו
getWindowChanges()
API לקביעת האופן שבו החלונות השתנו. במהלך עדכון של מספר חלונות, כל אחד
המערכת יוצרת סדרת אירועים משלו.
getSource()
הפונקציה מחזירה את תצוגת הרמה הבסיסית (root) של החלון שמשויך לכל אירוע.
אם באפליקציה יש כותרות של חלוניות נגישות
View
אובייקטים, שהשירות שלך יכול לזהות
כשממשק המשתמש של האפליקציה מתעדכן. כאשר
TYPE_WINDOW_STATE_CHANGED
התרחש אירוע, יש להשתמש בסוגים שהוחזרו על ידי
getContentChangeTypes()
כדי לקבוע איך החלון השתנה. לדוגמה, ה-framework יכול
לזהות מתי לחלונית יש כותרת חדשה, או מתי חלונית נעלמת.
סיבוב
כדי למנוע סיבובים לא מכוונת, הוספנו מצב שמצמיד את גם אם מיקום המכשיר משתנה. המשתמשים יכולים להפעיל רוטציה באופן ידני במקרה הצורך, על ידי לחיצה על לחצן בסרגל המערכת.
ברוב המקרים, ההשפעה על התאימות של האפליקציות היא מינימלית. אבל אם לאפליקציה יש התנהגות סיבוב מותאמת אישית או שימוש בכיוון מסך יוצא דופן הגדרות כאלה, אתם עלולים להיתקל בבעיות שלא הייתם שמים לב אליהן בעבר, העדפת סבב המשתמשים תמיד הייתה לאורך. מומלץ להקדיש לבדוק את התנהגות הסבב בכל הפעילויות העיקריות של האפליקציה שכל הגדרות כיוון המסך שלך עדיין מספקות לחוויה אופטימלית.
לפרטים נוספים אפשר לעיין בהתנהגות המשויכת .
טקסט
Android 9 כולל את התכונות הבאות שקשורות לטקסט Platform:
טקסט מחושב מראש: שיפור הכיתה
PrecomputedText
את הביצועים של רינדור הטקסט בכך שהם מאפשרים לחשב ולשמור במטמון את מראש. היא גם מאפשרת לאפליקציה להשבית את פריסת הטקסט בשרשור הראשי.זכוכית מגדלת: הכיתה
Magnifier
היא ווידג'ט פלטפורמה שמספק API לזכוכית מגדלת, שמאפשר בכל האפליקציות.Smart Linkify: מערכת Android 9 משפרת את
TextClassifier
כיתה, שמשתמש בלמידת מכונה כדי לזהות ישויות מסוימות בטקסט שנבחר הצעות לפעולות. לדוגמה, האפליקציהTextClassifier
יכולה לאפשר לאפליקציה לזהות שהמשתמש בחר מספר טלפון. לאחר מכן האפליקציה יכולה להציע משתמש יבצע שיחת טלפון באמצעות המספר הזה. התכונות שלTextClassifier
החלפת הפונקציונליות של המחלקהLinkify
.פריסת טקסט: יש כמה שיטות ומאפייני נוחות שיעזרו לכם להטמיע את העיצוב של ממשק המשתמש. לקבלת פרטים, תוכלו לקרוא את מאמרי העזרה של
TextView
המרה מראש של קובצי DEX ב-ART
במכשירים עם Android מגרסה 9 ואילך, זמן הריצה של Android (ART) מהדר מראש מבצע אופטימיזציה נוספת של Dalvik Executable בפורמט DEX על ידי המרת קובצי ה-DEX שבחבילת אפליקציה תצוגה קומפקטית. השינוי הזה מאפשר לאפליקציה לפעול מהר יותר ולצרוך יותר פחות מקום בכונן ו-RAM.
השיפור הזה מועיל במיוחד למכשירים פשוטים עם קלט/פלט (I/O) איטי יותר מהירויות גבוהות.
מעקב מערכת במכשיר
Android 9 מאפשר לכם לתעד את עקבות המערכת מהמכשיר שלכם, לאחר מכן לשתף דוח על ההקלטות האלה עם צוות הפיתוח. הדוח הזה שתומך בכמה פורמטים, כולל HTML.
איסוף של נתוני המעקב האלה מאפשר לך לתעד את נתוני התזמון שקשורים לאפליקציה של תהליכים ושרשורים והצגה של סוגים אחרים של מכשירים בעלי חשיבות גלובלית .
מידע נוסף על הכלי הזה זמין במאמר ביצוע מערכת במכשיר .