גרסת הבטא 3 של Android 17 הגיעה היום באופן רשמי ליציבות הפלטפורמה. המשמעות היא שמשטח ה-API נעול. אתם יכולים לבצע בדיקות תאימות סופיות ולהעלות לחנות Play את האפליקציות שמיועדות ל-Android 17. בנוסף, גרסת הבטא 3 מציעה מגוון יכולות חדשות שיעזרו לכם ליצור אפליקציות טובות יותר, מאובטחות יותר ומשולבות יותר.
הכינו את האפליקציות, הספריות, הכלים ומנועי המשחקים שלכם!
אם אתם מפתחים ערכת SDK, ספרייה, כלי או מנוע משחקים, חשוב עוד יותר להכין עכשיו את כל העדכונים הנדרשים כדי למנוע ממפתחי אפליקציות ומשחקים שמשתמשים במוצרים שלכם להיתקל בבעיות תאימות, וכדי לאפשר להם להשתמש בתכונות העדכניות ביותר של ערכת ה-SDK. חשוב להודיע למפתחים שמשתמשים במוצרים שלכם אם נדרשים עדכונים כדי לתמוך באופן מלא ב-Android 17.
הבדיקה כוללת התקנה של אפליקציית הפקה או אפליקציית בדיקה שמשתמשת בספרייה או במנוע שלכם באמצעות 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 וגם על כלי בחירת התמונות המוטמע, ומאפשרת לכם לשמור על אסתטיקה מגובשת כשהמשתמשים יוצרים אינטראקציה עם מדיה.
הכול נעשה במסגרת המאמץ שלנו לעזור לכם לשלב בצורה חלקה את הכלי לבחירת תמונות ב-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 נוסף מקודד תוכנה מורחב של HE-AAC שסופק על ידי המערכת. המקודד הזה תומך בקצב העברת נתונים נמוך וגבוה באמצעות קידוד מאוחד של דיבור ואודיו. אפשר לגשת למקודד הזה דרך MediaCodec API באמצעות השם 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
)עדכונים בנושא פרטיות
כפתור המיקום שסופק על ידי המערכת
ב-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 )
תוויות מוסתרות של אפליקציות במסך הבית
ב-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) {}
}
)עיצבנו מחדש את סרגל הכלים של הקלטת המסך
פונקציונליות עיקרית
הגדרות החרגה של אפליקציית 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.
-
חדשות על מוצריםהיום אנחנו משיקים את Android 17 ומאפשרים להשתמש בו ברוב מכשירי Pixel הנתמכים. בחודשים הקרובים יושקו מכשירים חדשים עם Android 17.
Matthew McCullough • 13 min read -
חדשות על מוצריםהיום אנחנו משיקים את קבוצת המשימות הראשונה לטווח ארוך (LHT), שהן משימות מורכבות מאוד שמהנדס צריך להקדיש להן כמה ימים או אפילו שבוע כדי להשלים אותן. בנוסף, אנחנו משיקים הערכה באמצעות סוכן, ומתחילים עם סוכנים מספקי מודלים תואמים.
Matthew McCullough • משך הקריאה: 3 דקות -
חדשות על מוצריםחוויית משתמש מעולה היא מרכזית למשימה של Android, וכדי לעמוד בהבטחה הזו צריך לוודא שהמכשירים מהירים, רספונסיביים ואמינים.
Blair Harmon • משך הקריאה: 2 דקות
רוצים לקבל טיפים עדכניים לפיתוח Android ישירות לאימייל כל שבוע?