חדשות על מוצרים

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

משך הקריאה: 5 דקות
צפייה בפרופיל של Matthew McCullough
Matthew McCullough סמנכ"ל, ניהול מוצר, Android Developer

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

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

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

large_Android17Timeline01.png

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

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

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

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

ב-Android אפשר עכשיו להתאים את ההצגה החזותית של כלי בחירת התמונות כך שתתאים יותר לממשק המשתמש של האפליקציה. באמצעות ה-API החדש PhotoPickerUiCustomizationParams, אפשר לשנות את יחס הגובה-רוחב של תצוגת המשבצות מהריבוע הרגיל 1:1 לתצוגה לאורך של 9:16. הגמישות הזו חלה גם על פעולת הכוונות 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 Low Energy ‏ (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, המשתמשים יכולים להגדיר באופן עצמאי איפה יושמעו צלילי מערכת ספציפיים. הם יכולים לבחור לנתב התראות, רינגטונים ושעונים מעוררים למכשירי שמיעה מחוברים או לרמקול המובנה של המכשיר.

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

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

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

תחילת העבודה עם Android 17

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

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

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

נכתב על ידי:
להמשך קריאה