今天我們推出 Android 17 的第二個 Beta 版,持續致力打造優先考量隱私、安全和精緻效能的平台。本次更新提供多項新功能,包括 EyeDropper API 和隱私權保護聯絡人選擇工具。我們也新增了進階測距、跨裝置接力 API 等功能。
本次版本延續了我們發布節奏的轉變,在第 2 季發布年度主要 SDK 版本後,接著推出次要 SDK 更新。
使用者體驗和系統 UI
泡泡
泡泡是一種視窗模式功能,提供與訊息泡泡 API 不同的全新浮動 UI 體驗。使用者只要長按啟動器上的應用程式圖示,即可在手機、摺疊式裝置或平板電腦上建立應用程式泡泡。在大螢幕上,工作列會包含對話框列,使用者可以整理對話框、在對話框之間移動,以及將對話框移至螢幕上的錨定點或從錨定點移出。
請遵循支援多視窗模式的指南,確保應用程式能以對話框形式正常運作。
Beta 2 版尚未完全啟用泡泡功能。請留意日後的 Android 17 版本。
EyeDropper API
新的系統層級 EyeDropper API 可讓應用程式要求顯示畫面中任何像素的顏色,不需取得敏感的螢幕擷取權限。
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 權限的需求。此外,使用者也可以從裝置的個人或工作資料夾中選取內容。
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 生態系統中,順暢接續先前的工作流程。重要的是,Handoff 支援原生應用程式間的轉換,以及應用程式到網頁的備用方案,提供最大彈性,並確保即使接收裝置未安裝原生應用程式,也能享有完整體驗。
進階測距 API
我們即將新增 2 項測距技術支援:
- UWB DL-TDOA:可讓應用程式使用 UWB 進行室內導航。這個 API 介面符合 FIRA (Fine Ranging Consortium) 4.0 DL-TDOA 規格,可提供保護隱私權的室內導航功能 (避免錨點追蹤裝置)。
- 附近裝置偵測:讓應用程式使用 WFA (Wi-Fi 聯盟) 採用的新測距規格。與現有的 Wi-Fi Aware 測距規格相比,這項技術的可靠性和準確度更高。
數據方案強化
為最佳化媒體品質,您的應用程式現在可以使用 getStreamingAppMaxDownlinkKbps 和 getStreamingAppMaxUplinkKbps,擷取電信業者為串流應用程式分配的最大數據傳輸速率。
核心功能、隱私權和效能
區域網路存取權
Android 17 導入 ACCESS_LOCAL_NETWORK 執行階段權限,防止未經授權的區域網路存取行為。由於這屬於現有的 NEARBY_DEVICES 權限群組,因此已授予其他 NEARBY_DEVICES 權限的使用者不會再次收到提示。只要宣告並要求這項權限,應用程式就能探索及連線至區域網路 (LAN) 上的裝置,例如智慧住宅裝置或投放接收器。這可防止惡意應用程式利用不受限制的區域網路存取權,暗中追蹤使用者及建立指紋。指定 Android 17 以上版本的應用程式,現在有兩種方式可與區域網路裝置通訊:採用系統中介、隱私權保護的裝置挑選器,略過權限提示;或在執行階段明確要求這項新權限,維持區域網路通訊。
時區偏移變更廣播
Android 現在提供可靠的廣播意圖 ACTION_TIMEZONE_OFFSET_CHANGED,會在系統時區偏移變更時觸發,例如日光節約時間轉換期間。這項功能可與現有的廣播意圖 ACTION_TIME_CHANGED 和 ACTION_TIMEZONE_CHANGED 搭配使用,這兩項意圖分別會在 Unix 時間戳記和時區 ID 變更時觸發。
NPU 管理和優先順序
如果應用程式指定 Android 17,且需要直接存取 NPU,就必須在資訊清單中宣告 FEATURE_NEURAL_PROCESSING_UNIT,以免無法存取 NPU。這包括使用 LiteRT NPU 委派、供應商專屬 SDK,以及已淘汰 NNAPI 的應用程式。
支援 ICU 78 和 Unicode 17
核心國際化程式庫已更新至 ICU 78,擴大支援新的文字、字元和表情符號區塊,並可直接設定時間物件的格式。
簡訊動態密碼防護
Android 正在擴大簡訊動態密碼保護功能,自動延遲存取含有動態密碼的簡訊。先前,這項保護措施主要著重於簡訊擷取器格式,其中包含簡訊擷取器雜湊的訊息,在大多數應用程式中會延遲三小時傳送。不過,某些應用程式 (例如預設訊息應用程式等) 和與雜湊對應的應用程式不受這項延遲限制。這項更新將防護範圍擴大至所有含動態密碼的簡訊。對大多數應用程式來說,含有動態密碼的簡訊會在延遲三小時後才可存取,以防動態密碼遭竊。系統會保留 SMS_RECEIVED_ACTION 廣播,並篩除簡訊供應商資料庫查詢。延遲時間過後,這些應用程式就能存取簡訊。
延遲存取 WebOTP 格式的簡訊
如果應用程式有權讀取簡訊,但不是動態密碼的預定接收者 (由網域驗證決定),則必須在三小時後才能存取 WebOTP 格式的簡訊。這項異動旨在提升使用者安全性,確保只有與訊息中提及網域相關聯的應用程式,才能透過程式輔助方式讀取驗證碼。無論目標 API 級別為何,所有應用程式都適用這項異動。
延遲存取含有動態密碼的標準簡訊
如果簡訊含有動態密碼,但未使用 WebOTP 或 SMS Retriever 格式,則大多數應用程式必須在三小時後才能存取動態密碼簡訊。這項異動僅適用於指定 Android 17 (API 級別 37) 以上版本的應用程式。
部分應用程式 (例如預設簡訊、小幫手應用程式,以及連結裝置隨附應用程式等) 不受這項延遲影響。
所有需要讀取簡訊來擷取動態密碼的應用程式,都應改用 SMS Retriever 或 SMS User Consent API,確保功能正常運作。
Android 17 時程
我們將從這個 Beta 版快速推進到平台穩定性里程碑,預計在 3 月達成。在這個里程碑,我們會提供最終 SDK/NDK API。屆時,您的應用程式可以指定 SDK 37,並發布至 Google Play,以便在 Android 17 正式發布前的幾個月內完成測試,並收集使用者意見回饋。
一整年的新功能
我們預計 Android 17 會持續透過一系列季度版本更新。我們只會在第 2 季推出的版本中,導入預計會破壞應用程式行為的變更。我們預計在第 4 季推出 SDK 次要版本,提供更多 API 和功能。
開始使用 Android 17
您可以註冊任何支援的 Pixel 裝置,透過無線更新取得本次和日後的 Android Beta 版更新。如果您沒有 Pixel 裝置,可以在 Android Studio 中使用 64 位元系統映像檔搭配 Android Emulator。
如果您目前已加入 Android Beta 版計畫,將會收到 Beta 版 2 的無線更新。
如果您使用 Android 26Q1 Beta 版,並想改用 26Q1 的最終穩定版本,請忽略 26Q2 Beta 2 的無線更新,並等待 26Q1 發布。
歡迎提供意見,請在意見回饋頁面回報問題及提出功能要求。越早收到您的意見回饋,我們就越能將其納入最終版本。
為了在 Android 17 上獲得最佳開發體驗,建議您使用最新預先發布版的 Android Studio (Panda)。設定完成後,請務必完成下列事項:
- 請使用新版 SDK 進行編譯、在 CI 環境中測試,並透過意見回饋頁面在追蹤工具中回報任何問題。
- 測試現有應用程式的相容性,瞭解應用程式是否受到 Android 17 異動影響,並將應用程式安裝到搭載 Android 17 的裝置或模擬器上,進行全面測試。
在 Android 17 發布週期內,我們會定期更新預先發布版/Beta 版系統映像檔和 SDK。安裝 Beta 版後,日後會自動收到更新
無線更新機制自動取得。
如要瞭解詳情,請前往 Android 17 開發人員網站。
參與討論
我們將在今年稍晚推出平台穩定版和 Android 17 正式發布,您的意見回饋仍是我們最寶貴的資產。無論您是Canary 版的早期採用者,還是在 Beta 2 測試應用程式的應用程式開發人員,都歡迎加入我們的社群並提供意見回饋。我們洗耳恭聽。
-
產品最新消息今天,我們在 Android 開發人員高峰會上宣布,將廣泛提供多項工具和 API,旨在消除日常摩擦,讓您更靈活地建構出色的 Android 應用程式。
Matthew McCullough • 閱讀時間:4 分鐘 -
產品最新消息今天,我們發布了第一組長程任務 (LHT),這些任務非常複雜,工程師需要多天甚至一週才能完成。我們也將推出代理評估功能,首先會從相應模型供應商的代理開始。
Matthew McCullough • 閱讀時間:3 分鐘 -
產品最新消息今天,我們將發布 Android 17,並在多數支援的 Pixel 裝置上推出。未來幾個月,搭載 Android 17 的新裝置將陸續上市。
Matthew McCullough • 閱讀時間:13 分鐘
每週透過電子郵件接收 Android 開發人員的最新深入分析。