產品新訊

Android 17 第二個 Beta 版

閱讀時間:6 分鐘
Matthew McCullough
Android 開發人員產品管理副總裁

我們今天推出 Android 17 的第二個 Beta 版,持續打造以隱私權、安全性和效能為優先的平台。本次更新提供多項新功能,包括 EyeDropper API 和可保護隱私權的聯絡人挑選器。我們也新增了進階測距、跨裝置交接 API 等功能。

本次發布的內容延續了我們的發布節奏轉變,在第 2 季發布年度主要 SDK 版本後,接著發布次要 SDK 更新。

使用者體驗與系統 UI

泡泡

泡泡是視窗模式功能,提供與訊息泡泡 API 不同的全新浮動 UI 體驗。使用者只要在啟動器中長按應用程式圖示,即可在手機、摺疊式裝置或平板電腦上建立應用程式泡泡。在大螢幕上,泡泡列會顯示在工作列中,使用者可以在泡泡列中整理泡泡、在泡泡間移動,以及將泡泡移到螢幕上的錨點或從錨點移開。

Bubbles.gif

請按照支援多視窗模式的指南操作,確保應用程式以即時通訊泡泡形式運作時不會出錯。

Beta 2 尚未完全啟用對話泡泡功能。這些功能將在 Android 17 的後續版本中推出。

EyeDropper API

新的系統層級 EyeDropper API 可讓應用程式要求顯示器上任何像素的顏色,不需要敏感的螢幕截圖權限。

Eyedropper_Tester.webp
  val eyeDropperLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
  result -> if (result.resultCode == Activity.RESULT_OK) {
    val color = result.data?.getIntExtra(Intent.EXTRA_COLOR, Color.BLACK)
    // Use the picked color in your app
  }
}

fun launchColorPicker() {
  val intent = Intent(Intent.ACTION_OPEN_EYE_DROPPER)
  eyeDropperLauncher.launch(intent)
}

聯絡人挑選器

透過 ACTION_PICK_CONTACTS 啟用的全新系統層級聯絡人選擇工具,只會授予使用者要求的特定資料欄位暫時性讀取權限 (以工作階段為準),因此可減少對廣泛 READ_CONTACTS 權限的需求。此外,你也可以從裝置的個人或工作資料夾中選取檔案。

android-17-contact-picker.gif
  val contactPicker = rememberLauncherForActivityResult(StartActivityForResult()) {
    if (it.resultCode == RESULT_OK) {
        val uri = it.data?.data ?: return@rememberLauncherForActivityResult
        // Handle result logic
        processContactPickerResults(uri)
    }
}

val dataFields = arrayListOf(Email.CONTENT_ITEM_TYPE, Phone.CONTENT_ITEM_TYPE)
val intent = Intent(ACTION_PICK_CONTACTS).apply {
    putStringArrayListExtra(EXTRA_PICK_CONTACTS_REQUESTED_DATA_FIELDS, dataFields)
    putExtra(EXTRA_ALLOW_MULTIPLE, true)
    putExtra(EXTRA_PICK_CONTACTS_SELECTION_LIMIT, 5)
}

contactPicker.launch(intent)

更輕鬆地透過觸控板擷取指標

先前,當應用程式擷取指標時,觸控板回報事件的方式與滑鼠大不相同,觸控板會回報手指在觸控板上的位置,而不是滑鼠回報的相對移動。這使得第一人稱遊戲難以適當支援觸控板。現在,系統預設會在擷取觸控板時辨識指標移動和捲動手勢,並像滑鼠事件一樣回報。您仍可明確要求以新的「絕對」模式擷取資料,取得舊的詳細手指位置資料。

  // To request the new default relative mode (mouse-like events)
// This is the same as requesting with View.POINTER_CAPTURE_MODE_RELATIVE
view.requestPointerCapture()

// To request the legacy absolute mode (raw touch coordinates)
view.requestPointerCapture(View.POINTER_CAPTURE_MODE_ABSOLUTE)

互動式選擇器靜止邊界

在 Android 的 ChooserSession 上呼叫 getInitialRestingBounds,應用程式就能在動畫和資料載入完成後,找出「選擇器」佔用的目標位置,進而進行更完善的 UI 調整。

連線與跨裝置

跨裝置應用程式交接

您可以使用新的 Handoff API 指定要在其他裝置 (例如 Android 平板電腦) 上繼續執行的應用程式狀態。選擇啟用後,系統會透過 CompanionDeviceManager 同步處理狀態,並在使用者附近裝置的啟動器中顯示交接建議。這項功能旨在提供流暢的任務連續性,讓使用者在 Android 生態系統中,從工作流程中斷的地方繼續作業。重要的是,「接續互通」功能支援原生應用程式間的轉移,以及應用程式到網頁的備援,提供最大的彈性,即使接收裝置未安裝原生應用程式,也能確保完整體驗。

進階測距 API

我們即將支援 2 項新的測距技術:

  1. UWB DL-TDOA,可讓應用程式使用 UWB 進行室內導覽。這個 API 介面符合 FIRA (Fine Ranging Consortium) 4.0 DL-TDOA 規格,可提供保護隱私權的室內導航功能  (避免錨點追蹤裝置)。
  2. 附近裝置偵測:可讓應用程式使用 WFA (Wi-Fi 聯盟) 採用的新測距規格。與現有的 Wi-Fi Aware 測距規格相比,這項技術的可靠性和準確度都更高。

數據方案強化功能

為提升媒體品質,應用程式現在可以使用 getStreamingAppMaxDownlinkKbpsgetStreamingAppMaxUplinkKbps,擷取電信業者為串流應用程式分配的最大資料速率。

核心功能、隱私權和效能

區域網路存取權

Android 17 導入了 ACCESS_LOCAL_NETWORK 執行階段權限,可保護使用者免於未經授權的區域網路存取。由於這項權限屬於現有的 NEARBY_DEVICES 權限群組,因此如果使用者已授予其他 NEARBY_DEVICES 權限,系統就不會再次提示。應用程式宣告並要求這項權限後,即可探索區域網路 (LAN) 上的裝置並與之連線,例如智慧住宅裝置或投放接收器。這樣做可防止惡意應用程式利用不受限制的區域網路存取權,暗中追蹤使用者並建立數位指紋。如果應用程式指定 Android 17 以上版本,現在有兩種方式可與區域網路裝置保持通訊:採用系統中介的裝置選擇器 (可保護隱私權),略過權限提示,或在執行階段明確要求這項新權限,以維持區域網路通訊。

時區偏移變更廣播

Android 現在提供可靠的廣播意圖 ACTION_TIMEZONE_OFFSET_CHANGED,會在系統時區偏移量變更時觸發,例如日光節約時間轉換期間。這項意圖可補足現有的廣播意圖 ACTION_TIME_CHANGEDACTION_TIMEZONE_CHANGED,前者會在 Unix 時間戳記變更時觸發,後者則會在時區 ID 變更時觸發。

NPU 管理與優先順序

以 Android 17 為目標且需要直接存取 NPU 的應用程式,必須在資訊清單中宣告 FEATURE_NEURAL_PROCESSING_UNIT,以免無法存取 NPU。包括使用 LiteRT NPU 委派、廠商專屬 SDK,以及已淘汰的 NNAPI

支援 ICU 78 和 Unicode 17

核心國際化程式庫已更新至 ICU 78,擴大支援新的指令碼、字元和表情符號區塊,並可直接格式化 時間 物件。

簡訊動態密碼防護

Android 將擴大簡訊動態密碼保護機制,自動延遲存取含有動態密碼的簡訊。先前,這項防護功能主要著重於簡訊擷取器格式,也就是延遲傳送含有簡訊擷取器雜湊的訊息,大多數應用程式的延遲時間為三小時。不過,對於預設訊息應用程式等特定應用程式,以及與雜湊對應的應用程式,則不適用這項延遲規定。這項更新會將防護範圍擴大至所有含有動態密碼的簡訊。為防範 OTP 遭竊,含有 OTP 的簡訊會在三小時後才開放存取 (大多數應用程式適用)。系統會暫緩 SMS_RECEIVED_ACTION 廣播,並篩除 簡訊供應商資料庫查詢。簡訊會在延遲後傳送至這些應用程式。

延遲存取 WebOTP 格式的簡訊

如果應用程式有權讀取簡訊,但並非動態密碼的預期接收者 (由網域驗證判斷),則必須經過三小時後才能存取 WebOTP 格式的簡訊。這項異動旨在提升使用者安全性,確保只有與訊息中提及的網域相關聯的應用程式,才能以程式輔助方式讀取驗證碼。無論目標 API 級別為何,所有應用程式都會受到這項異動影響。

延遲存取含有動態密碼的標準簡訊

如果簡訊含有一次性密碼,但未使用 WebOTP 或 SMS Retriever 格式,大多數應用程式只能在三小時後存取這類簡訊。這項異動只會影響指定 Android 17 (API 級別 37) 以上版本的應用程式。

部分應用程式 (例如預設簡訊應用程式、Google 助理應用程式,以及連結裝置的隨附應用程式等) 不會受到這項異動影響。

所有依賴讀取簡訊來擷取動態密碼的應用程式,都應改用 SMS RetrieverSMS User Consent API,確保功能不受影響。

Android 17 時間表

我們預計在 3 月從這個 Beta 版快速轉移至平台穩定性里程碑。在這個里程碑,我們會提供最終的 SDK/NDK API。從那時起,您的應用程式就能以 SDK 37 為目標,並發布至 Google Play,協助您在 Android 17 正式發布前的幾個月內完成測試並收集使用者意見回饋。

Android Release Timeline.png

發布年份

我們預計會透過一系列的季度版本,持續為 Android 17 提供更新。第 2 季的發布版本是唯一會推出應用程式破壞性行為變更的版本。我們預計在第 4 季發布次要 SDK 版本,其中包含其他 API 和功能。

Android Release Timeline_2.png

開始使用 Android 17

您可以註冊任何支援的 Pixel 裝置,透過無線更新取得這個版本和日後的 Android Beta 版更新。如果你沒有 Pixel 裝置,可以在 Android Studio 中使用 Android Emulator 搭配 64 位元系統映像檔

如果你目前已加入 Android Beta 版計畫,系統會提供無線更新,將裝置更新至 Beta 版 2。

如果您使用 Android 26Q1 Beta 版,並想採用 26Q1 的最終穩定版,然後退出 Beta 版,請忽略 26Q2 Beta 版 2 的無線更新,並等待 26Q1 發布。

歡迎前往意見回饋頁面回報問題及提交功能要求。越早收到意見回饋,就越有機會納入最終版本。

為獲得最佳 Android 17 開發體驗,建議使用最新預先發布版 Android Studio (Panda)。設定完成後,請執行下列操作:

  • 請根據新版 SDK 進行編譯、在 CI 環境中測試,並在意見回饋頁面的追蹤工具中回報任何問題。
  • 測試目前應用程式的相容性,瞭解應用程式是否受到 Android 17 變更的影響,並在執行 Android 17 的裝置或模擬器上安裝應用程式,進行廣泛測試。

在 Android 17 發布週期內,我們會定期更新搶先版/Beta 版系統映像檔和 SDK。安裝 Beta 版後,系統會自動更新

之後所有的預先發布版本和 Beta 版本。

如要瞭解詳情,請前往 Android 17 開發人員網站

加入討論

我們將於今年稍晚推出 Android 17 正式發布版,並邁向 平台穩定性,因此您的意見回饋仍是我們最寶貴的資產。無論您是 Canary 管道的搶先體驗者,還是在 Beta 2 版上測試的應用程式開發人員,都歡迎加入我們的社群並提供意見回饋。我們洗耳恭聽。

撰寫者:

繼續閱讀