תכונות וממשקי API ב-Android 9

ב-Android 9 (רמת API‏ 28) יש תכונות ויכולות חדשות ומגניבות למשתמשים ולמפתחים. במסמך הזה נדגיש את התכונות החדשות למפתחים.

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

מיקום בפנים עם Wi-Fi RTT

ממשקי RTT חדשים של 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, מאפשר לאפליקציה לפרס את התוכן שלה סביב הפתחים במכשיר. אפשר להגדיר את המאפיין הזה לאחד מהערכים הבאים:

אפשר לדמות חתיכת מסך בכל מכשיר או באמולטור עם Android 9 באופן הבא:

  1. מפעילים את האפשרויות למפתחים.
  2. במסך אפשרויות למפתחים, גוללים למטה אל הקטע שרטוט. ובוחרים באפשרות סימולציה של מסך עם חיתוך.
  3. בוחרים את הגודל של היצירה.

התראות

ב-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 יש שלוש קטגוריות חדשות של עדיפות 'נא לא להפריע':

  • ב-NotificationManager.Policy יש גם שבעה קבועי 'ללא הפרעות' חדשים יכול להשתמש כדי למנוע הפרעה בראייה:

תמיכה בכמה מצלמות ועדכונים למצלמות

במכשירים עם 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 באמצעות סוד מצד הלקוח. התמיכה הזו מופעלת באופן אוטומטי כשהתנאים הבאים מתקיימים:

כשאמצעי הפרטיות הזה מופעל, קוד האימות, קו ביטול הנעילה או הסיסמה של המכשיר שנדרשים כדי לשחזר נתונים מהגיבויים שבוצעו על ידי המכשיר של המשתמש. למידה מידע נוסף על הטכנולוגיה שמאחורי התכונה הזו זמין ב-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.

איסוף הנתונים האלה מאפשר לתעד נתוני תזמון שקשורים לתהליכים ולשרשראות של האפליקציה, ולראות סוגים אחרים של מצבי מכשיר שחשובים ברמה הגלובלית.

מידע נוסף על הכלי הזה זמין במאמר ביצוע מעקב אחרי מערכת במכשיר.