חדשות על המוצר

גרסת הבטא השלישית של Android 17

משך הקריאה: 5 דקות
הצגת הפרופיל של מתיו מקאלו
Matthew McCullough סגן נשיא, ניהול מוצר, מפתח של Android

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

הכינו את האפליקציות, הספריות, הכלים ומנועי המשחקים שלכם!

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

large_Android17Timeline01.png

כדי לבדוק את האפליקציה, צריך להתקין את האפליקציה בסביבת הייצור או אפליקציית בדיקה שמשתמשת בספרייה או במנוע שלכם באמצעות Google Play או אמצעים אחרים במכשיר או באמולטור שפועלת בהם גרסת Android 17 בטא 3. עוברים על כל התהליכים באפליקציה ומחפשים בעיות פונקציונליות או בעיות בממשק המשתמש. כדאי לבדוק את השינויים בהתנהגות כדי להתמקד בבדיקות. כל גרסה של Android כוללת שינויים בפלטפורמה שמשפרים את הפרטיות, האבטחה ואת חוויית המשתמש הכוללת, והשינויים האלה יכולים להשפיע על האפליקציות שלכם. הנה כמה שינויים שכדאי להתמקד בהם:

  • שינוי גודל במסכים גדולים: אחרי שמטרגטים ל-Android 17, אי אפשר יותר לבטל את ההגבלות על כיוון, שינוי גודל ויחס גובה-רוחב במסכים גדולים.
  • טעינת קוד דינמי: אם האפליקציה מטרגטת את Android 17 ומעלה, ההגנה של טעינת קוד דינמי (DCL) בטוחה יותר שהוצגה ב-Android 14 לקובצי DEX ו-JAR, חלה עכשיו גם על ספריות Native. כל הקבצים המקוריים שנטענים באמצעות System.load()‎ חייבים להיות מסומנים כקבצים לקריאה בלבד. אחרת, המערכת תציג את השגיאה UnsatisfiedLinkError.
  • הפעלת CT כברירת מחדל: שקיפות אישורים (CT) מופעלת כברירת מחדל. (ב-Android 16, שקיפות האישורים זמינה, אבל האפליקציות צריכות להביע הסכמה להצטרף).
  • אמצעי הגנה על הרשת המקומית: הגישה לרשת המקומית חסומה כברירת מחדל באפליקציות שמטרגטות ל-Android בגרסה 17 ואילך. אם אפשר, כדאי לעבור לשימוש בבוררים ששומרים על הפרטיות, ולהשתמש בהרשאה החדשה ACCESS_LOCAL_NETWORK כדי לקבל גישה רחבה וקבועה.

שיפורים במדיה ובמצלמה

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

עכשיו אפשר להתאים אישית את התצוגה החזותית של הכלי לבחירת תמונות ב-Android, כדי שתתאים יותר לממשק המשתמש של האפליקציה. בעזרת ה-API החדש PhotoPickerUiCustomizationParams, אתם יכולים לשנות את יחס הגובה-רוחב של תצוגת המשבצות מהריבוע הרגיל של 1:1 לתצוגה לאורך של 9:16. הגמישות הזו חלה גם על ה-Intent‏ ACTION_PICK_IMAGES וגם על הכלי לבחירת תמונות המוטמע, וכך אתם יכולים לשמור על אסתטיקה אחידה כשהמשתמשים מבצעים פעולות במדיה.

large_(Default)11aspectratio.png

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

val params = PhotoPickerUiCustomizationParams.Builder()
.setAspectRatio(PhotoPickerUiCustomizationParams.ASPECT_RATIO_PORTRAIT_9_16)
.build()
val intent = Intent(MediaStore.ACTION_PICK_IMAGES).apply {
putExtra(MediaStore.EXTRA_PICK_IMAGES_UI_CUSTOMIZATION_PARAMS, params)
}
startActivityForResult(intent, REQUEST_CODE)

תמיכה בפורמט התמונה RAW14: ב-Android 17 נוספה תמיכה בפורמט התמונה RAW14 – הסטנדרט המקובל בתעשייה לצילום דיגיטלי מתקדם – באמצעות הקבוע החדש ImageFormat.RAW14. ‫RAW14 הוא פורמט של ערוץ יחיד, 14 ביט לכל פיקסל, שמשתמש בפריסה דחוסה שבה כל ארבעה פיקסלים עוקבים נדחסים לשבעה בייטים.

תוספים למצלמה שמוגדרים על ידי הספק: ב-Android 17 נוספו תוספים שמוגדרים על ידי הספק, שמאפשרים לשותפי החומרה להגדיר ולהטמיע מצבי תוספים מותאמים אישית למצלמה. כך אתם יכולים לגשת לתכונות המצלמה הטובות והעדכניות ביותר, כמו "שדרוג הרזולוציה" או שיפורים מתקדמים מבוססי-AI. אפשר לשלוח שאילתה לגבי המצבים האלה באמצעות ה-API‏ isExtensionSupported(int).

ממשקי API של סוגי מכשירי מצלמה: ממשקי API חדשים של Android 17 מאפשרים לשלוח שאילתות לגבי סוג המכשיר הבסיסי כדי לזהות אם המצלמה היא חומרה מובנית, מצלמת אינטרנט חיצונית בחיבור USB או מצלמה וירטואלית.

תמיכה במכשירי שמיעה עם Bluetooth LE Audio

ב-Android יש עכשיו קטגוריית מכשירים ספציפית למכשירי שמיעה עם Bluetooth עם צריכת אנרגיה נמוכה (BLE) Audio. הוספנו את הקבוע AudioDeviceInfo.TYPE_BLE_HEARING_AID, ועכשיו האפליקציה יכולה להבחין בין מכשירי שמיעה לבין אוזניות רגילות.

val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
val devices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)
val isHearingAidConnected = devices.any { it.type == AudioDeviceInfo.TYPE_BLE_HEARING_AID }

ניתוב אודיו פרטני למכשירי שמיעה

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

מקודד תוכנה Extended HE-AAC

ב-Android 17 יש מקודד תוכנה Extended HE-AAC שסופק על ידי המערכת. המקודד הזה תומך בקצבי העברת נתונים נמוכים וגבוהים באמצעות קידוד מאוחד של דיבור ואודיו. אפשר לגשת למקודד הזה דרך ה-API של MediaCodec באמצעות השם c2.android.xheaac.encoder או באמצעות שליחת שאילתה לסוג ה-MIME של audio/mp4a-latm.

val encoder = MediaCodec.createByCodecName("c2.android.xheaac.encoder")
val format = MediaFormat.createAudioFormat(MediaFormat.MIMETYPE_AUDIO_AAC, 48000, 1)
format.setInteger(MediaFormat.KEY_BIT_RATE, 24000)
format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectXHE)
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)

שיפורים בביצועים ובסוללה

הפחתת נעילות מצב שינה באמצעות תמיכה במאזינים להתראות מסוג allow-while-idle

ב-Android 17 יש גרסה חדשה של AlarmManager.setExactAndAllowWhileIdle שמקבלת OnAlarmListener במקום PendingIntent. המנגנון החדש הזה, שמבוסס על קריאות חוזרות (callbacks), אידיאלי לאפליקציות שמסתמכות כרגע על נעילות מצב פעולה רציפות כדי לבצע משימות תקופתיות, כמו אפליקציות להעברת הודעות ששומרות על חיבורי שקעים.

val alarmManager = getSystemService(AlarmManager::class.java)
val listener = AlarmManager.OnAlarmListener {
// Do work here
}
alarmManager.setExactAndAllowWhileIdle(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 60000,
listener,
null
)

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

כפתור להרשאת מיקום חד-פעמית שסופק על ידי המערכת

localcafe.jpg

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

הגדרות נפרדות להצגת הסיסמה במקלדות מגע ובמקלדות פיזיות

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

val isPhysical = event.source and InputDevice.SOURCE_KEYBOARD == InputDevice.SOURCE_KEYBOARD
val shouldShow = android.text.ShowSecretsSetting.shouldShowPassword(context, isPhysical)

אבטחה

אכיפה של טעינת קוד דינמי לקריאה בלבד

כדי לשפר את האבטחה מפני מתקפות של החדרת קוד, Android אוכפת עכשיו את הדרישה שספריות Native שנטענות באופן דינמי יהיו לקריאה בלבד. אם האפליקציה שלכם מטרגטת את Android מגרסה 17 ואילך, כל הקבצים המקוריים שנטענים באמצעות System.load()‎ חייבים להיות מסומנים מראש כקבצים לקריאה בלבד.

val libraryFile = File(context.filesDir, "my_native_lib.so")
// Mark the file as read-only before loading to comply with Android 17+ security requirements
libraryFile.setReadOnly()
System.load(libraryFile.absolutePath)

חתימה על קובצי APK משולבים עם הצפנה פוסט-קוונטית (PQC)

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

חוויית המשתמש וממשק המשתמש של המערכת

תמיכה טובה יותר בווידג'טים במסכים חיצוניים

התכונה הזו משפרת את העקביות החזותית של ווידג'טים של אפליקציות כשהם מוצגים במסכים מחוברים או חיצוניים עם צפיפות פיקסלים שונה באמצעות יחידות DP או SP.

val options = appWidgetManager.getAppWidgetOptions(appWidgetId)
val displayId = options.getInt(AppWidgetManager.OPTION_APPWIDGET_DISPLAY_ID)
val remoteViews = RemoteViews(context.packageName, R.layout.widget_layout)
remoteViews.setViewPadding(
R.id.container,
16f, 8f, 16f, 8f,
TypedValue.COMPLEX_UNIT_DIP
)

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

Hiddenapplabelsonthehomescreen.png

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

תמונה בתוך תמונה אינטראקטיבית במחשב

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

val appTask: ActivityManager.AppTask = activity.getSystemService(ActivityManager::class.java).appTasks[0]
appTask.requestWindowingLayer(
ActivityManager.AppTask.WINDOWING_LAYER_PINNED,
context.mainExecutor,
object : OutcomeReceiver<Int, Exception> {
override fun onResult(result: Int) {
if (result == ActivityManager.AppTask.WINDOWING_LAYER_REQUEST_GRANTED) {
// Task successfully moved to pinned layer
}
}
override fun onError(error: Exception) {}
}
)

סרגל כלים מעוצב מחדש להקלטת מסך

large_Recording-redesign.png

פונקציונליות עיקרית

הגדרות החרגת אפליקציות מה-VPN

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

val intent = Intent(Settings.ACTION_VPN_APP_EXCLUSION_SETTINGS)
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
}

עדכונים ל-API של OpenJDK 25 ו-21

העדכון הזה כולל תכונות ושיפורים נרחבים מ-OpenJDK 21 ומ-OpenJDK 25, כולל התמיכה העדכנית ביותר ב-Unicode ותמיכה משופרת ב-SSL לקבוצות בעלות שם ב-TLS.

איך מתחילים להשתמש ב-Android 17

אתם יכולים לרשום כל מכשיר Pixel נתמך או להשתמש בקובצי האימג' של המערכת בגרסת 64 ביט עם אמולטור Android.

  • צריך להדר את האפליקציה עם ה-SDK החדש ולדווח על בעיות בדף המשוב.
  • בודקים את התאימות של האפליקציה הנוכחית ומגלים אם האפליקציה מושפעת מהשינויים ב-Android 17.

מידע מלא זמין באתר למפתחים של Android 17.

כותב/ת המסמך:
להמשך קריאה