סקירה כללית על תכונות וממשקי API

‫Android 11 כולל תכונות חדשות וממשקי API חדשים למפתחים. בקטעים הבאים תוכלו לקרוא על התכונות של האפליקציות ולהתחיל להשתמש בממשקי ה-API שקשורים אליהן.

רשימה מפורטת של ממשקי API חדשים, ממשקי API שעברו שינוי וממשקי API שהוסרו מופיעה בדוח ההבדלים בין ממשקי ה-API. לפרטים על ממשקי API חדשים, אפשר לעיין בהפניית Android API. ממשקי API חדשים מסומנים כדי שיהיה קל לראות אותם. כדאי גם לעיין בשינויים בהתנהגות של Android 11 באפליקציות שמטרגטות Android R ובכל האפליקציות, וגם בשינויים בפרטיות, כדי להבין באילו תחומים שינויים בפלטפורמה עשויים להשפיע על האפליקציות שלכם.

חוויות חדשות

פקדי מכשירים

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

פקדי מדיה

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

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

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

מסכים

תמיכה טובה יותר בתצוגות Waterfall

ב-Android 11 יש כמה ממשקי API לתמיכה בתצוגות מפל, כלומר תצוגות שמקיפות את קצה המכשיר. התצוגות האלה נחשבות לגרסה של תצוגות עם חיתוכי מסך. השיטות הקיימות DisplayCutout.getSafeInset…() מחזירות עכשיו את השוליים הפנימיים הבטוחים כדי להימנע מאזורים של מפל ומאזורים חתוכים. כדי להציג את תוכן האפליקציה באזור של תרשים המפל:

  • כדי לקבל את המידות המדויקות של התמונה הממוזערת של המפל, אפשר להתקשר למספר DisplayCutout.getWaterfallInsets().

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

חיישן זווית הציר ומכשירים מתקפלים

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

מידע נוסף על מכשירים מתקפלים

שיחות

שיפורים בשיחות

ב-Android 11 בוצעו כמה שיפורים באופן הטיפול בשיחות. שיחות הן תקשורת דו-כיוונית בזמן אמת בין שני אנשים או יותר. לשיחות האלה יש חשיבות מיוחדת, והמשתמשים יכולים לבחור מבין כמה אפשרויות חדשות לאינטראקציה איתן.

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

בועות צ'אט

בועות זמינות עכשיו למפתחים כדי לעזור להם להציג שיחות במערכת. התכונה 'בועות' הייתה תכונה ניסיונית ב-Android 10 שהופעלה דרך אפשרות למפתחים. ב-Android 11, כבר לא צריך להפעיל אותה.

אם אפליקציה מטרגטת ל-Android מגרסה 11 (רמת API 30) ואילך, ההתראות שלה לא מוצגות כבועות אלא אם הן עומדות בדרישות החדשות לשיחות. באופן ספציפי, ההתראה צריכה להיות משויכת לקיצור דרך.

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

בוצעו מספר שיפורים בביצועים של הבועות, ועכשיו למשתמשים יש יותר גמישות בהפעלה ובהשבתה של בועות מכל אפליקציה. למפתחים שהטמיעו תמיכה ניסיונית, יש כמה שינויים בממשקי ה-API ב-Android 11:

אינדיקטורים ויזואליים של 5G

מידע על הצגת אינדיקטורים של 5G במכשירים של משתמשים זמין במאמר איך מודיעים למשתמשים שהם מחוברים ל-5G.

פרטיות

‫Android 11 כולל מספר רב של שינויים והגבלות שמטרתם לשפר את הפרטיות של המשתמשים. מידע נוסף זמין בדף פרטיות.

אבטחה

עדכונים בנושא אימות ביומטרי

כדי לעזור לכם לשלוט ברמת האבטחה של נתוני האפליקציה, ב-Android 11 יש כמה שיפורים באימות ביומטרי. השינויים האלה מופיעים גם בספריית Jetpack Biometric.

סוגי אימות

ב-Android 11 הוצג הממשק BiometricManager.Authenticators, שבו אפשר להצהיר על סוגי האימות שאפליקציה תומכת בהם.

איך קובעים באיזה סוג אימות נעשה שימוש

אחרי שהמשתמש עובר אימות, אפשר לבדוק אם האימות בוצע באמצעות פרטי כניסה למכשיר או פרטים ביומטריים על ידי קריאה ל-getAuthenticationType().

תמיכה נוספת במפתחות אימות לכל שימוש

‫Android 11 מספק תמיכה נוספת באימות באמצעות מפתחות auth-per-use.

שיטות שהוצאו משימוש

ב-Android 11 הוצאו משימוש השיטות הבאות:

  • השיטה setDeviceCredentialAllowed().
  • השיטה setUserAuthenticationValidityDurationSeconds().
  • הגרסה העמוסה מדי של canAuthenticate() שלא מקבלת ארגומנטים.

שיתוף מאובטח של מערכי נתונים גדולים

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

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

ביצוע הצפנה מבוססת-קבצים אחרי הפעלה מחדש של OTA ללא פרטי כניסה של משתמש

אחרי שהמכשיר משלים עדכון OTA ומבצע הפעלה מחדש, מפתחות מוצפנים של פרטי הכניסה (CE) שמוצבים באחסון מוגן באמצעות פרטי כניסה זמינים באופן מיידי לפעולות של הצפנה מבוססת-קובץ (FBE). המשמעות היא שאחרי עדכון OTA, האפליקציה יכולה להמשיך פעולות שדורשות את מפתחות ה-CE לפני שהמשתמש מזין את קוד האימות, קו ביטול הנעילה או הסיסמה.

ביצועים ואיכות

ניפוי באגים אלחוטי

‫Android 11 תומך בפריסה ובניפוי באגים של האפליקציה באופן אלחוטי מתחנת העבודה באמצעות ממשק הגישור של Android‏ (adb). לדוגמה, אתם יכולים לפרוס את האפליקציה שניתנת לניפוי באגים למספר מכשירים מרוחקים בלי לחבר את המכשיר שלכם פיזית באמצעות USB, ובלי להתמודד עם בעיות נפוצות בחיבור USB, כמו התקנת מנהל התקן. מידע נוסף אפשר לקרוא במאמר בנושא הפעלת אפליקציות במכשיר ציוד.

התקנת APK מצטברת באמצעות ADB

התקנה של קובצי APK גדולים (2GB ומעלה) במכשיר יכולה להימשך זמן רב, גם אם בוצע שינוי קטן באפליקציה. התקנה מצטברת של קובצי APK באמצעות ADB ‏ (Android Debug Bridge) מאיצה את התהליך הזה על ידי התקנה של חלק מקובץ ה-APK שמאפשר להפעיל את האפליקציה, בזמן שהנתונים הנותרים מועברים ברקע. ‫adb install ישתמש בתכונה הזו באופן אוטומטי אם היא נתמכת על ידי המכשיר ומותקנת אצלך הגרסה העדכנית של SDK Platform-Tools. אם היא לא נתמכת, נעשה שימוש בשיטת ההתקנה שמוגדרת כברירת מחדל.

כדי להשתמש בתכונה, מריצים את פקודת ה-adb הבאה. אם המכשיר לא תומך בהתקנה מצטברת, הפקודה תיכשל ותציג הסבר מפורט.

adb install --incremental

לפני שמריצים התקנה מצטברת של APK באמצעות ADB, צריך לחתום על ה-APK וליצור קובץ APK Signature Scheme v4. כדי שהתכונה הזו תפעל, קובץ החתימה v4 צריך להיות ממוקם לצד קובץ ה-APK.

זיהוי שגיאות באמצעות מקצה הזיכרון המקורי

‫GWP-ASan היא תכונה של הקצאת זיכרון נייטיב שעוזרת למצוא באגים מסוג use-after-free ו-heap-buffer-overflow. אפשר להפעיל את התכונה הזו באופן גלובלי או לתהליכי משנה ספציפיים באפליקציה. למידע נוסף, אפשר לעיין במדריך GWP-Asan.

Neural Networks API 1.3

‫Android 11 מרחיבה ומשפרת את ממשק ה-API של רשתות נוירונים (NNAPI).

פעולות חדשות

‫NNAPI 1.3 מציג סוג אופרנד חדש, TENSOR_QUANT8_ASYMM_SIGNED, כדי לתמוך בסכמת הכימות החדשה של TensorFlow Lite.

בנוסף, NNAPI 1.3 כולל את הפעולות החדשות הבאות:

  • QUANTIZED_LSTM
  • IF
  • WHILE
  • ELU
  • HARD_SWISH
  • FILL
  • RANK

אמצעי בקרה חדשים של ML

‫NNAPI 1.3 כולל אמצעי בקרה חדשים שעוזרים להפעיל למידת מכונה בצורה חלקה:

NDK Thermal API

כשמכשירים מתחממים מדי, הם עשויים להגביל את המעבד (CPU) או את המעבד הגרפי (GPU), והדבר עלול להשפיע על האפליקציות בדרכים לא צפויות. באפליקציות או במשחקים שמשלבים גרפיקה מורכבת, חישובים כבדים או פעילות רשת מתמשכת, סביר יותר שיתגלו בעיות.

אפשר להשתמש ב-NDK Thermal API ב-Android 11 כדי לעקוב אחרי שינויים בטמפרטורה במכשיר, ואז לפעול כדי לשמור על צריכת חשמל נמוכה יותר ועל טמפרטורה נמוכה יותר במכשיר. ממשק ה-API הזה דומה ל-Java Thermal API. אפשר להשתמש בו כדי לקבל התראות על כל שינוי בסטטוס התרמי או כדי לבדוק את הסטטוס הנוכחי ישירות.

טקסט וקלט

שיפור המעברים בין IME

ב-Android 11 נוספו ממשקי API חדשים כדי לשפר את המעברים בכלי עריכה לשיטות קלט (IME), כמו מקלדות וירטואליות. ממשקי ה-API האלה מאפשרים לכם להתאים את התוכן של האפליקציה בקלות, כך שהוא יסתנכרן עם ההופעה וההיעלמות של ה-IME ועם רכיבים אחרים כמו שורת הסטטוס וסרגל הניווט.

כדי להציג IME בזמן שמוקד ההתמקדות הוא על EditText, קוראים ל-view.getInsetsController().show(Type.ime()). (אפשר לקרוא לשיטה הזו בכל תצוגה באותה היררכיה כמו EditText שבמוקד, לא צריך לקרוא לה ב-EditText ספציפית). כדי להסתיר את ה-IME, קוראים ל-view.getInsetsController().hide(Type.ime()). כדי לבדוק אם IME גלוי כרגע, אפשר להתקשר אל view.getRootWindowInsets().isVisible(Type.ime()).

כדי לסנכרן את התצוגות של האפליקציה עם ההופעה וההיעלמות של ה-IME, צריך להגדיר מאזין לתצוגה על ידי העברת WindowInsetsAnimation.Callback אל View.setWindowInsetsAnimationCallback(). (אפשר להגדיר את מאזין ההודעות הזה בכל תצוגה, לא רק בתצוגה EditText). ה-IME קורא לשיטת onPrepare() של מאזין ההודעות, ואז קורא לשיטת onStart() בתחילת המעבר. לאחר מכן, הפונקציה קוראת ל-onProgress() בכל שלב של המעבר. כשהמעבר מסתיים, ה-IME מתקשר אל onEnd(). בכל שלב בתהליך המעבר, אפשר להתקשר למספר WindowInsetsAnimation.getFraction() כדי לברר מה מצב המעבר.

דוגמה לשימוש בממשקי ה-API האלה מופיעה בדוגמת הקוד החדשה של WindowInsetsAnimation.

שליטה באנימציה של IME

אפשר גם לשלוט באנימציה של IME או באנימציה של סרגל מערכת אחר, כמו סרגל הניווט. כדי לעשות את זה, קודם מתקשרים אל setOnApplyWindowInsetsListener() כדי להגדיר מאזין חדש לשינויים במיקום החלון:

Kotlin

rootView.setOnApplyWindowInsetsListener { rootView, windowInsets ->
    val barsIme = windowInsets.getInsets(Type.systemBars() or Type.ime())
    rootView.setPadding(barsIme.left, barsIme.top, barsIme.right, 
                          barsIme.bottom)

      // We return the new WindowInsets.CONSUMED to stop the insets being
      // dispatched any further into the view hierarchy. This replaces the
      // deprecated WindowInsets.consumeSystemWindowInsets() and related
      // functions.
    WindowInsets.CONSUMED
}

Java

mRoot.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
   @Override
   public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {

       Insets barsIME = insets.getInsets(Type.systemBars() | Type.ime());
       mRootView.setPadding(barsIme.left, barsIme.top, barsIme.right,
                             barsIme.bottom);

      // We return the new WindowInsets.CONSUMED to stop the insets being
      // dispatched any further into the view hierarchy. This replaces the
      // deprecated WindowInsets.consumeSystemWindowInsets() and related
      // functions.
       return WindowInsets.CONSUMED;
   }
});

כדי להזיז את ה-IME או סרגל מערכת אחר, קוראים לשיטה controlWindowInsetsAnimation() של בקר:

Kotlin

view.windowInsetsController.controlWindowInsetsAnimation(
       Type.ime(),
       1000,
       LinearInterpolator(),
       cancellationSignal,
       object : WindowInsetsAnimationControlListener() {
           fun onReady(controller: WindowInsetsAnimationController,
                         types: Int) {
               // update IME inset
             controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset),
                           1f /* alpha */, 0.1 /* fraction progress */)
           }
       }
);

Java

mRoot.getWindowInsetsController().controlWindowInsetsAnimation(
       Type.ime(), 1000, new LinearInterpolator(), cancellationSignal,
       new WindowInsetsAnimationControlListener() {
           @Override
           public void onReady(
                   @NonNull WindowInsetsAnimationController controller,
                   int types
                   ) {
                   // update IME inset
                   controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset),
                           1f /* alpha */, 0.1 /* fraction progress */);
           }

           @Override
           public void onCancelled() {}
       });

עדכונים בספריות ICU

ב-Android 11, חבילת android.icu מעודכנת לגרסה 66 של ספריית ICU, לעומת גרסה 63 ב-Android 10. גרסת הספרייה החדשה כוללת נתוני לוקאל מעודכנים של CLDR ומספר שיפורים בתמיכה באינטרנציונליזציה ב-Android.

שינויים חשובים בגרסאות החדשות של הספריות:

  • הרבה ממשקי API לעיצוב תומכים עכשיו בסוג חדש של אובייקט החזרה שמרחיב את FormattedValue.
  • LocaleMatcher API משופר עם מחלקה ליצירת אובייקטים, תמיכה בסוג java.util.Locale ומחלקה של תוצאות שכוללת נתונים נוספים על התאמה.
  • יש עכשיו תמיכה ב-Unicode 13.

מדיה

הקצאת מאגרי נתונים זמניים של MediaCodec

‫Android 11 כולל ממשקי MediaCodec API חדשים שמאפשרים לאפליקציות לשלוט יותר בהקצאה של מאגרי קלט ופלט. כך האפליקציה יכולה לנהל את הזיכרון בצורה יעילה יותר.

כיתות חדשות:
שיטות חדשות:

בנוסף, יש שינויים בהתנהגות של שתי שיטות ב-MediaCodec.Callback():

onInputBufferAvailable()
במקום לקרוא ל-MediaCodec.getInputBuffer() ול-MediaCodec.queueInputBuffer() עם האינדקס, אם האפליקציות מוגדרות לשימוש ב-Block Model API, הן צריכות להשתמש ב-MediaCodec.getQueueRequest עם האינדקס ולצרף LinearBlock או HardwareBuffer למשבצת.
onOutputBufferAvailable()
במקום להתקשר אל MediaCodec.getOutputBuffer() עם האינדקס, אפליקציות יכולות להשתמש ב-MediaCodec.getOutputFrame() עם האינדקס כדי לקבל את האובייקט OutputFrame עם מידע נוסף ומאגרי LinearBlock/HardwareBuffer.

פענוח עם זמן אחזור קצר ב-MediaCodec

‫Android 11 משפר את MediaCodec כדי לתמוך בפענוח עם זמן אחזור נמוך למשחקים ולאפליקציות אחרות בזמן אמת. כדי לבדוק אם קודק תומך בפענוח עם השהיה נמוכה, מעבירים את FEATURE_LowLatency אל MediaCodecInfo.CodecCapabilities.isFeatureSupported().

כדי להפעיל או להשבית את פענוח ההשהיה הנמוכה, מבצעים אחת מהפעולות הבאות:

פונקציית AAudio חדשה AAudioStream_release()

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

הפונקציה החדשה AAudioStream_release() משחררת את הזרם אבל לא סוגרת אותו. כך המשאבים שלה מתפנים והשידור נשאר במצב ידוע. האובייקט נשאר עד שמפעילים את AAudioStream_close().

MediaParser API

MediaParser הוא API חדש ברמה נמוכה לחילוץ מדיה. הוא גמיש יותר מ-MediaExtractor ומספק שליטה נוספת בפונקציונליות של חילוץ המדיה.

הקלטת אודיו ממכשיר USB

כשמשתמשים באפליקציה ללא הרשאת RECORD_AUDIO כדי לבקש גישה ישירה למכשיר אודיו USB עם יכולת הקלטת אודיו (כמו אוזניות USB), מוצגת הודעת אזהרה חדשה שמבקשת מהמשתמש לאשר את ההרשאה לשימוש במכשיר.UsbManager המערכת מתעלמת מכל אפשרות של 'שימוש תמיד', ולכן המשתמש צריך לאשר את האזהרה ולהעניק הרשאה בכל פעם שאפליקציה מבקשת גישה.

כדי למנוע את ההתנהגות הזו, האפליקציה צריכה לבקש את ההרשאה RECORD_AUDIO.

גישה למיקרופון בו-זמנית

ב-Android 11 נוספו שיטות חדשות לממשקי ה-API‏ AudioRecord, MediaRecorder ו-AAudioStream. השיטות האלה מאפשרות להפעיל ולהשבית את היכולת לצלם בו-זמנית, ללא קשר לתרחיש השימוש שנבחר. אפשר לעיין במאמר בנושא שיתוף קלט אודיו.

מתג מעבר למכשיר אחר

ב-Android 11 הוטמעה התנהגות חדשה באפליקציות שמשתמשות ב-APIs של Cast ו-mediarouter.

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

קישוריות

שיפורים ב-Passpoint ברשת Wi-Fi

מידע על היכולות של Passpoint שנוספו ב-Android 11 זמין במאמר בנושא Passpoint.

ההרחבה של Wi-Fi Suggestion API

ב-Android 11,‏ Wi-Fi Suggestion API הורחב כדי לשפר את יכולות ניהול הרשת של האפליקציה, כולל:

  • אפליקציות לניהול קישוריות יכולות לנהל את הרשתות שלהן על ידי מתן אפשרות לשליחת בקשות לניתוק.
  • רשתות Passpoint משולבות ב-API של ההצעות, ואפשר להציע אותן למשתמש.
  • ממשקי ה-API של Analytics מאפשרים לכם לקבל מידע על איכות הרשתות שלכם.

עדכונים של CallScreeningService

החל מ-Android 11, ‏ CallScreeningService יכול לבקש מידע על סטטוס האימות (verstat) של STIR/SHAKEN לשיחות נכנסות. המידע הזה מופיע בפרטי השיחה של שיחות נכנסות.

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

מידע נוסף מופיע במאמר בנושא מניעת זיוף של מספר הטלפון המתקשר.

עדכונים ב-Open Mobile API

מידע על תמיכה ב-OMAPI ב-Android 11 ואילך זמין במאמר תמיכה בקורא Open Mobile API.

רשתות VPN עם ביצועים טובים

אפליקציות שמטרגטות לרמת API ‏30 ומעלה או שפועלות במכשירים שהושקו עם רמת API ‏29 ומעלה יכולות להחיל IKEv2/IPsec על רשתות VPN, גם על רשתות VPN שהוגדרו על ידי המשתמש וגם על רשתות VPN שמבוססות על אפליקציות.

רשתות ה-VPN פועלות באופן מקורי במערכת ההפעלה, ולכן הקוד שנדרש כדי ליצור חיבורי IKEv2/IPsec VPN באפליקציה הוא פשוט יותר.

בקרת גישה לרשת לכל תהליך

מידע על הפעלת גישה לרשת על בסיס כל תהליך זמין במאמר ניהול השימוש ברשת.

אפשר להתקין כמה הגדרות Passpoint עם אותו FQDN

החל מ-Android 11, אפשר להשתמש ב-PasspointConfiguration.getUniqueId() כדי לקבל מזהה ייחודי לאובייקט PasspointConfiguration, וכך לאפשר למשתמשים באפליקציה להתקין כמה פרופילים עם אותו שם דומיין מוגדר במלואו (FQDN).

הפונקציונליות הזו שימושית כשספק פורס יותר משילוב אחד של קוד מדינה לנייד (MCC) וקוד רשת לנייד (MNC) ברשת שלו, אבל יש לו רק שם דומיין מלא (FQDN) אחד. ב-Android 11 ואילך, אפשר להתקין יותר מפרופיל אחד עם אותו FQDN שתואם לרשת כספקית הביתית, כשהמשתמש מתקין כרטיס SIM עם MCC או MNC.

תמיכה באנטנת GNSS

ב-Android 11 הוצג המחלקה GnssAntennaInfo, שמאפשרת לאפליקציה שלכם להשתמש יותר במיקום ברמת דיוק של סנטימטר, שניתן לספק על ידי מערכת הלוויינים הגלובלית לניווט (GNSS).

מידע נוסף זמין במדריך בנושא כיול אנטנה.

גרפיקה

מפענח תמונות NDK

‫NDK ImageDecoder API מספק API סטנדרטי לאפליקציות C/C++‎ ל-Android כדי לפענח תמונות ישירות. מפתחי אפליקציות לא צריכים יותר להשתמש בממשקי ה-API של המסגרת (דרך JNI) או בספריות של צד שלישי לפענוח תמונות. מידע נוסף זמין במדריך למפתחים בנושא פענוח תמונות.

Frame rate API

‫Android 11 מספק API שמאפשר לאפליקציות להודיע למערכת על קצב הפריימים המיועד שלהן, כדי לצמצם את הריצוד במכשירים שתומכים בכמה קצבי רענון. מידע על השימוש ב-API הזה זמין במדריך בנושא קצב פריימים.

בקשה לבדיקה של תמיכה בהשהיה נמוכה

צגים מסוימים יכולים לבצע עיבוד גרפי לאחר העיבוד, כמו צגים חיצוניים וטלוויזיות מסוימות. העיבוד הזה משפר את הגרפיקה אבל יכול להגדיל את זמן האחזור. במסכים חדשים יותר שתומכים ב-HDMI 2.1 יש מצב אוטומטי של השהיה נמוכה (ALLM, שנקרא גם מצב משחק), שממזער את ההשהיה על ידי השבתת העיבוד הזה. פרטים נוספים על ALLM זמינים במפרט של HDMI 2.1.

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

כדי להפעיל או להשבית את העיבוד המינימלי שאחרי הצילום, קוראים ל-Window.setPreferMinimalPostProcessing() או מגדירים את מאפיין החלון preferMinimalPostProcessing ל-true. לא כל המסכים תומכים בעיבוד מינימלי אחרי העיבוד הראשוני. כדי לברר אם מסך מסוים תומך בעיבוד כזה, צריך להפעיל את השיטה החדשה Display.isMinimalPostProcessingSupported().

החדרה של שכבת ניפוי באגים גרפית עם ביצועים טובים

אפליקציות יכולות עכשיו לטעון שכבות גרפיות חיצוניות (GLES,‏ Vulkan) לתוך קוד אפליקציה מקורי כדי לחשוף את אותה פונקציונליות כמו אפליקציה שניתן לנפות בה באגים, אבל בלי להשפיע על הביצועים. התכונה הזו חשובה במיוחד כשיוצרים פרופיל של האפליקציה באמצעות כלים כמו GAPID. כדי ליצור פרופיל לאפליקציה, צריך לכלול את רכיב המטא-נתונים הבא בקובץ המניפסט של האפליקציה במקום להפוך את האפליקציה לניתנת לניפוי באגים:

<application ... >
    <meta-data android:name="com.android.graphics.injectLayers.enable"
                  android:value="true" />
</application>

תמונות ומצלמה

השתקת הצלילים והרטט של ההתראות במהלך צילום פעיל

החל מ-Android 11, כשמשתמשים במצלמה באופן פעיל, האפליקציה יכולה להשתיק רק את הרטט, גם את הצלילים וגם את הרטט, או לא להשתיק אף אחד מהם באמצעות setCameraAudioRestriction().

תמיכה מורחבת במצלמה באמולטור של Android

למידע על התמיכה המורחבת במצלמות באמולטור החל מ-Android 11, אפשר לעיין במאמר בנושא תמיכה במצלמות.

תמיכה בשימוש בו-זמני ביותר ממצלמה אחת

ב-Android 11 נוספו ממשקי API לשאילתות לגבי תמיכה בשימוש ביותר ממצלמה אחת בו-זמנית, כולל מצלמה קדמית ומצלמה אחורית.

כדי לבדוק אם יש תמיכה במכשיר שבו האפליקציה פועלת, משתמשים בשיטות הבאות:

  • getConcurrentCameraIds() מחזירה Set של שילובי מזהי מצלמות שאפשר להזרים בו-זמנית עם שילובי הזרמה מובטחים כשהיא מוגדרת על ידי אותו תהליך של אפליקציה.
  • isConcurrentSessionConfigurationSupported() שאילתות אם מכשירי מצלמה יכולים לתמוך בו-זמנית בהגדרות המתאימות של הסשן.

תמיכה משופרת בתמונות HEIF עם כמה מסגרות

החל מ-Android 11, אם קוראים ל-ImageDecoder.decodeDrawable() ומעבירים תמונת HEIF שמכילה רצף של פריימים (כמו אנימציה או צילום רצף), השיטה מחזירה AnimatedImageDrawable שמכיל את רצף התמונות כולו. בגרסאות קודמות של Android, ה-method החזיר BitmapDrawable של פריים אחד בלבד.

אם גרפיקת ה-HEIF מכילה כמה פריימים שלא מוצגים ברצף, אפשר לאחזר פריימים בודדים באמצעות הקריאה ל-MediaMetadataRetriever.getImageAtIndex().

נגישות

עדכונים למפתחים של שירותי נגישות

אם יוצרים שירות נגישות בהתאמה אישית, אפשר להשתמש בתכונות הבאות ב-Android 11:

  • ההסבר למשתמשים על שירות נגישות יכול לכלול עכשיו HTML ותמונות, בנוסף לטקסט פשוט. הגמישות הזו מקלה על ההסבר למשתמשי הקצה מה השירות עושה ואיך הוא יכול לעזור להם.
  • כדי לעבוד עם תיאור של מצב רכיב בממשק משתמש שהוא בעל משמעות סמנטית יותר מ-contentDescription, צריך לקרוא לשיטה getStateDescription().
  • כדי לבקש שאירועי מגע יעקפו את כלי המגע של המערכת, קוראים ל-setTouchExplorationPassthroughRegion(). באופן דומה, כדי לבקש שהתנועות ידלגו על זיהוי התנועות של המערכת, צריך להתקשר אל setGestureDetectionPassthroughRegion().
  • אתם יכולים לבקש פעולות של IME, כמו 'הזנה' ו'הבא', וגם צילומי מסך של חלונות שלא מופעל בהם הדגל FLAG_SECURE.

תכונות נוספות

הסיבות ליציאה מתהליך האפליקציה

ב-Android 11 הוצגה השיטה ActivityManager.getHistoricalProcessExitReasons() שמדווחת על הסיבות להפסקות תהליכים שהתרחשו לאחרונה. אפליקציות יכולות להשתמש בשיטה הזו כדי לאסוף מידע מאבחן על קריסות, למשל אם סיום התהליך נובע ממקרי ANR, מבעיות בזיכרון או מסיבות אחרות. בנוסף, אפשר להשתמש בשיטה החדשה setProcessStateSummary() כדי לאחסן מידע מותאם אישית על מצב המשתמש לצורך ניתוח מאוחר יותר.

השיטה getHistoricalProcessExitReasons() מחזירה מופעים של המחלקה ApplicationExitInfo, שמכילה מידע שקשור לסיום של תהליך אפליקציה. אפשר להתקשר אל getReason() במופע של המחלקה הזו כדי לגלות למה התהליך של האפליקציה הופסק. לדוגמה, ערך החזרה REASON_CRASH מציין שחריגה לא מטופלת התרחשה באפליקציה. אם האפליקציה צריכה להבטיח ייחודיות לאירועי יציאה, היא יכולה לשמור מזהה ספציפי לאפליקציה, כמו ערך hash שמבוסס על חותמת הזמן מהשיטה getTimestamp().

מקורות מידע נוספים

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

טועני משאבים

ב-Android 11 מוצג API חדש שמאפשר לאפליקציות להרחיב באופן דינמי את האופן שבו המערכת מחפשת וטוענת משאבים. המחלקות החדשות של ה-API‏ ResourcesLoader ו-ResourcesProvider אחראיות בעיקר על אספקת הפונקציונליות החדשה. יחד, הם מאפשרים לספק משאבים ונכסים נוספים, או לשנות את הערכים של משאבים ונכסים קיימים.

אובייקטים מסוג ResourcesLoader הם קונטיינרים שמספקים אובייקטים מסוג ResourcesProvider למופע Resources של אפליקציה. בתמורה, אובייקטים של ResourcesProvider מספקים שיטות לטעינת נתוני משאבים מקובצי APK ומטבלאות משאבים.

תרחיש שימוש מרכזי אחד ב-API הזה הוא טעינה מותאמת אישית של נכסים. אפשר להשתמש ב-loadFromDirectory() כדי ליצור ResourcesProvider שמפנה מחדש את הרזולוציה של משאבים ונכסים מבוססי-קובץ, כך שהמערכת תחפש בספרייה ספציפית ולא בקובץ ה-APK של האפליקציה. אפשר לגשת לנכסים האלה באמצעות משפחת השיטות open() ממחלקת ה-API‏ AssetManager, בדיוק כמו לנכסים שכלולים ב-APK.

APK signature scheme v4

ב-Android 11 נוסף תמיכה ב-APK Signature Scheme v4. הפורמט הזה יוצר סוג חדש של חתימה בקובץ נפרד (apk-name.apk.idsig), אבל הוא דומה לפורמטים v2 ו-v3. לא מתבצעים שינויים ב-APK. הסכימה הזו תומכת בהתקנה מצטברת של APK באמצעות ADB, שמאיצה את התקנת ה-APK.

מסנני כוונות דינמיים

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

ב-Android 11 הוצגו קבוצות MIME, רכיב מניפסט חדש שמאפשר לאפליקציה להצהיר על קבוצה דינמית של סוגי MIME במסנן Intent ולשנות אותה באופן פרוגרמטי בזמן הריצה. כדי להשתמש בקבוצת MIME, צריך לכלול אלמנט data במניפסט של האפליקציה עם המאפיין החדש android:mimeGroup:

<intent-filter>
  <action android:name="android.intent.action.SEND"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <data android:mimeGroup="myMimeGroup"/>
</intent-filter>

הערך של המאפיין android:mimeGroup הוא מזהה מחרוזת שרירותי שמזהה את קבוצת ה-MIME בזמן הריצה. כדי לגשת לתוכן של קבוצת MIME ולעדכן אותו, צריך להעביר את המזהה שלה לשיטות החדשות הבאות במחלקה PackageManager API:

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

שיפורים במילוי האוטומטי

ב-Android 11 יש שיפורים בשירותי המילוי האוטומטי.

מזהי רמזים ב-AssistStructure.ViewNode

לעתים קרובות, שירותים למילוי אוטומטי מחשבים גיבוב חתימה לתצוגה על סמך המאפיינים של התצוגה. רמז הצפייה הוא מאפיין טוב במיוחד לכלול בחישוב של גיבוב החתימה, אבל מחרוזת הרמז עשויה להשתנות בהתאם ללוקאל של הטלפון. כדי לפתור את הבעיה הזו, ב-Android 11 הורחבה השיטה AssistStructure.ViewNode עם שיטה חדשה getHintIdEntry(), שמחזירה את מזהה המשאב של טקסט הרמז של תצוגה. השיטה הזו מספקת ערך בלתי תלוי במיקום שאפשר להשתמש בו כדי לחשב גיבובים של חתימות.

אירועים שמוצגים במערכי נתונים

כדי לעזור לשירותי מילוי אוטומטי לשפר את ההצעות שלהם, ב-Android 11 יש דרך לזהות מקרים שבהם שירות מילוי אוטומטי הציג מערכי נתונים אבל המשתמש לא בחר אף אחד מהם. ב-Android 11, FillEventHistory מדווח על סוג חדש של אירוע TYPE_DATASETS_SHOWN. ‫FillEventHistory מתעד אירוע מהסוג הזה בכל פעם ששירות המילוי האוטומטי מציג למשתמש מערך נתונים אחד או יותר. שירותי מילוי אוטומטי יכולים להשתמש באירועים האלה בשילוב עם האירוע הקיים TYPE_DATASET_SELECTED כדי לקבוע אם המשתמש בחר באחת מאפשרויות המילוי האוטומטי שסופקו.

שילוב של IME

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

שיתוף נתונים עם שירות ללכידת תוכן

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

כדי להפוך את הנתונים מהאפליקציה לזמינים לשירות ללכידת תוכן, צריך להפעיל את השיטה shareData() במופע של ContentCaptureManager. אם המערכת מאשרת את הבקשה לשיתוף נתונים, האפליקציה מקבלת מתאר קובץ לקריאה בלבד לשיתוף עם שירות ללכידת תוכן.