Android 17 今天正式推出 Beta 版 3,達到平台穩定性。這表示 API 介面已鎖定,您可以執行最終相容性測試,並將指定 Android 17 的應用程式發布到 Play 商店。此外,Beta 3 還提供許多新功能,協助您建構更優質、更安全且高度整合的應用程式。
準備好應用程式、程式庫、工具和遊戲引擎!
如果您開發 SDK、程式庫、工具或遊戲引擎,現在就準備好所有必要更新就更顯重要,這樣一來,下游應用程式和遊戲開發人員就不會因相容性問題而受阻,並能以最新的 SDK 功能為目標。如要全面支援 Android 17,請通知下游開發人員進行更新。
測試時,請在搭載 Android 17 Beta 3 的裝置或模擬器上,透過 Google Play 或其他方式安裝正式版或測試版應用程式,並使用您的程式庫或引擎。逐步完成應用程式的所有流程,並找出功能或 UI 問題。請查看行為變更,以便專注於測試。Android 每次發布新版本時,都會進行平台變更,以提升隱私權、安全性和整體使用者體驗,而這些變更可能會影響您的應用程式。以下列出幾個重點異動項目:
- 大螢幕上的可調整大小功能:以 Android 17 為目標後,您將無法再選擇在大螢幕上維持螢幕方向、可調整大小和長寬比限制。
- 動態程式碼載入:如果您的應用程式指定 Android 17 以上版本,Android 14 針對 DEX 和 JAR 檔案導入的「更安全的動態程式碼載入 (DCL)」保護機制,現在也適用於原生程式庫。使用 System.load() 載入的所有原生檔案都必須標示為唯讀。否則系統會擲回 UnsatisfiedLinkError。
- 預設啟用 CT:系統預設會啟用憑證透明化 (CT)。(Android 16 支援 CT,但應用程式必須選擇加入)。
- 區域網路保護措施:如果應用程式指定 Android 17 以上版本,系統預設會封鎖區域網路存取權。請盡可能改用可保護隱私權的選擇器,並使用新的 ACCESS_LOCAL_NETWORK 取得廣泛的持續存取權。
媒體和相機強化功能
相片挑選器自訂選項
Android 現在可讓您自訂相片挑選工具的視覺呈現方式,更符合應用程式的使用者介面。透過新的 PhotoPickerUiCustomizationParams API,您可以將格狀檢視畫面的顯示比例從標準的 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 透過新的 ImageFormat.RAW14 常數,支援 RAW14 圖片格式。RAW14 是高階數位攝影的業界標準,RAW14 是單一通道,每個像素 14 位元的格式,使用密集封裝的版面配置,每四個連續像素會封裝成七個位元組。
供應商定義的相機擴充功能:Android 17 新增了供應商定義的擴充功能,讓硬體合作夥伴定義及實作自訂相機擴充模式,為你提供最佳的最新相機功能,例如「超高解析度」或尖端 AI 輔助強化功能。您可以使用 isExtensionSupported(int) API 查詢這些模式。
攝影機裝置類型 API:Android 17 新增的 API 可讓您查詢基礎裝置類型,判斷攝影機是內建硬體、外接 USB 網路攝影機還是虛擬攝影機。
支援藍牙 LE Audio 助聽器
Android 現在提供藍牙低功耗 (BLE) 音訊助聽器的專屬裝置類別。新增 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 軟體編碼器。這個編碼器支援低位元率和高位元率,並使用統一的語音和音訊編碼。您可以使用 MediaCodec API,透過 c2.android.xheaac.encoder 名稱或查詢 audio/mp4a-latm MIME 類型來存取這個編碼器。
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)效能和電池續航力提升
透過允許閒置時觸發的鬧鐘,減少接聽程式的喚醒鎖定
Android 17 推出 AlarmManager.setExactAndAllowWhileIdle 的新變體,可接受 OnAlarmListener,而非 PendingIntent。如果應用程式目前依賴持續喚醒鎖定來執行週期性工作 (例如維護通訊端連線的訊息應用程式),這個以回呼為基礎的新機制就非常適合。
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)
後量子密碼編譯 (PQC) 混合 APK 簽署
為因應未來量子運算技術的進展,Android 將透過新的 v3.2 APK 簽署配置,支援後量子密碼編譯 (PQC)。這項配置採用混合做法,結合傳統簽章和 ML-DSA 簽章。
使用者體驗和系統 UI
外接螢幕上的小工具支援功能更完善
這項功能會使用 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 應用程式排除設定
使用新的 ACTION_VPN_APP_EXCLUSION_SETTINGS Intent,應用程式就能啟動系統管理的「設定」畫面,讓使用者選取要略過 VPN 通道的應用程式。
val intent = Intent(Settings.ACTION_VPN_APP_EXCLUSION_SETTINGS) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) }
OpenJDK 25 和 21 API 更新
本次更新引進了 OpenJDK 21 和 OpenJDK 25 的多項功能和改良項目,包括最新的 Unicode 支援,以及 TLS 中具名群組的強化 SSL 支援。
開始使用 Android 17
您可以註冊任何支援的 Pixel 裝置,或在 Android Emulator 中使用 64 位元系統映像檔。
- 使用新版 SDK 進行編譯,並在意見回饋頁面回報問題。
- 測試目前應用程式的相容性,並瞭解應用程式是否會受到 Android 17 變更的影響。
如要瞭解詳情,請前往 Android 17 開發人員網站。
繼續閱讀
-
產品新訊
今天,我們推出最新的先進開放式模型 Gemma 4,具備複雜的推論和自主工具呼叫能力,可提升 Android 開發體驗。
Matthew McCullough • 閱讀時間:2 分鐘
-
產品新訊
我們共同致力於贏得使用者信任,這是 Android 生態系統的基石。隨著行動裝置的發展,我們保護私密資訊的方式也與時俱進。
Robert Clifford • 3 分鐘可讀完
-
產品新訊
我們希望您能更快速輕鬆地建構優質 Android 應用程式,而協助您提升工作效率的其中一個方法,就是讓您隨時都能運用 AI。
Matthew McCullough • 閱讀時間:2 分鐘
隨時掌握最新消息
每週透過電子郵件接收最新的 Android 開發洞察資訊。