產品最新消息

Android 17 的第二個 Beta 版

閱讀時間:6 分鐘
查看 Matthew McCullough 的個人資料
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 生態系統中,順暢接續先前的工作流程。重要的是,Handoff 支援原生應用程式間的轉換,以及應用程式到網頁的備用方案,提供最大彈性,並確保即使接收裝置未安裝原生應用程式,也能享有完整體驗。

進階測距 API

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

  1. UWB DL-TDOA:可讓應用程式使用 UWB 進行室內導航。這個 API 介面符合 FIRA (Fine Ranging Consortium) 4.0 DL-TDOA 規格,可提供保護隱私權的室內導航功能  (避免錨點追蹤裝置)。
  2. 附近裝置偵測:讓應用程式使用 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 Release Timeline.png

一整年的新功能

我們預計 Android 17 會持續透過一系列季度版本更新。我們只會在第 2 季推出的版本中,導入預計會破壞應用程式行為的變更。我們預計在第 4 季推出 SDK 次要版本,提供更多 API 和功能。

Android Release Timeline_2.png

開始使用 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 測試應用程式的應用程式開發人員,都歡迎加入我們的社群並提供意見回饋。我們洗耳恭聽。

作者:
繼續閱讀