功能與 API 總覽

Android 13 為開發人員推出了強大的新功能和 API。以下各節可協助您瞭解應用程式功能,並開始使用相關的 API。

如需新增、修改及移除 API 的詳細清單,請參閱 API 差異比較表。如要進一步瞭解新的 API,請參閱 Android API 參考資料 - 新的 API 會醒目顯示,以利於查看。此外,如要瞭解平台變更可能對應用程式造成的影響,請務必查看指定 Android 13 的應用程式和所有應用程式的 Android 13 行為變更。

開發人員工作效率和工具

主題色應用程式圖示

使用者選擇使用主題色應用程式圖示
在 Android 13 上啟用主題色應用程式圖示

從 Android 13 開始,您可以選擇啟用主題色應用程式圖示。這項功能可讓支援的 Android 啟動器沿用使用者所選桌布和其他主題的顏色,調整應用程式圖示的色調。

如要支援這項功能,應用程式必須提供自動調整圖示和單色應用程式圖示,並從資訊清單的 <adaptive-icon> 元素指向單色應用程式圖示。如果使用者已啟用主題色應用程式圖示 (也就是在系統設定中開啟「圖示套用主題色」切換鈕),且啟動器支援這項功能,系統就會根據使用者所選桌布和主題的配色,調整單色應用程式圖示的色調。

在下列任一情況下,主畫面「不會」顯示主題色應用程式圖示,而是顯示自動調整或標準應用程式圖示:

  • 如果使用者未啟用主題色應用程式圖示
  • 如果應用程式未提供單色應用程式圖示
  • 如果啟動器不支援主題色應用程式圖示

如需更多詳細資料和操作說明,請參閱「自動調整圖示」。

個別應用程式語言偏好

系統設定中的個別應用程式語言

在許多情況下,多語言使用者會將系統語言設為某種語言 (例如英文),卻想在特定應用程式中選擇使用其他語言,例如荷蘭文、中文或北印度文。為了讓這類使用者在應用程式中享有更優質的體驗,Android 13 針對支援多種語言的應用程式推出下列功能:

  • 系統設定:提供集中管理各項設定的頁面,使用者可在此為各應用程式選取偏好的語言。

    應用程式必須在應用程式資訊清單中宣告 android:localeConfig 屬性,讓系統瞭解應用程式支援多種語言。詳情請參閱這份操作說明,瞭解如何建立資源檔案,並在應用程式的資訊清單檔案中進行宣告。

  • 其他 API:利用這類公用 API (例如 LocaleManager 中的 setApplicationLocales() 和 getApplicationLocales() 方法),應用程式可在執行階段設定與系統語言不同的語言。

    這些 API 會自動與系統設定保持同步;因此,使用這些 API 建立自訂應用程式內語言選單的應用程式,無論使用者選擇的語言偏好設定為何,都能為使用者提供一致的使用者體驗。此外,公用 API 也有助於減少樣板程式碼的數量,可支援分割 APK,並支援應用程式自動備份功能來儲存應用程式層級的使用者語言設定。

    為了提供與 Android 舊版本的回溯相容性,AndroidX 中也提供同等的 API。建議使用 Appcompat 1.6.0-beta01 以上版本新增的 API。

不支援多種語言的應用程式不會受到這些變更影響。

改善文字和語言支援

Android 13 包含多項文字和語言改善功能,可協助您提供更優質的體驗,詳情請參閱下列各節:

更快速的連字功能

連字可讓換行的文字更容易閱讀,並讓 UI 更具適應性。從 Android 13 開始,連字效能最多可提升 200%,因此您可以在 TextView 中啟用連字功能,幾乎不會影響算繪效能。如要啟用更快的連字功能,請在 setHyphenationFrequency() 中使用 fullFast 或 normalFast 頻率。

文字轉換 API

日文和中文等語言的使用者會用拼音輸入法,這通常會降低搜尋和自動完成等功能的執行速度。在 Android 13 中,應用程式可以呼叫新的文字轉換 API,讓使用者更輕鬆快速地搜尋內容。舉例來說,日本使用者先前必須執行下列步驟才能搜尋:

  1. 輸入搜尋字詞的平假名發音 (例如地點或應用程式名稱)
  2. 使用鍵盤將平假名轉換為漢字
  3. 使用漢字重新搜尋
  4. 最後取得搜尋結果

有了新的文字轉換 API,日文使用者只要輸入平假名,就能立即看到漢字的搜尋結果,不必再進行步驟 2 和步驟 3。

改善非拉丁語系文字的行高

Android 13 會配合每個語言調整行高,以改善非拉丁語系文字的呈現方式,例如泰米爾文、緬甸文、泰盧固文和藏文。新的行高設定不僅可避免字元遭裁切,還能改善字元的排版位置。 只要應用程式指定 Android 13,就能使用這些改善功能。 這些變更可能會影響非拉丁語言的使用者介面,因此如果您使用新的行距設定,請務必測試應用程式。

Android 12 中遭到裁剪的行高 (上圖),現在 Android 13 已妥善調整位置,不會遭到裁剪 (下圖)。

改善日文文字換行

從 Android 13 開始,TextViews 可以根據文節 (最小的文字組成單位,讀起來自然而且有意義) 或片語換行,而不是根據字元換行,讓您改善日文應用程式的閱讀體驗。如要運用這個換行功能,只要在 TextView 中使用 android:lineBreakWordStyle="phrase" 即可。

啟用片語樣式時的日文文字換行 (下方),以及未啟用時的日文文字換行 (上方)。

Unicode 程式庫更新

Android 13 新增了 Unicode ICU 70、Unicode CLDR 40 和 Unicode 14.0 的最新改善項目、修正內容和異動。

以下是幾項重大異動:

  • 如果沒有英文 (英國) en‑GB 的翻譯資源,英文 (加拿大) en‑CA 和英文 (菲律賓共和國) en‑PH 都會改用英文 (美國) en 的翻譯資源。
  • 我們為西班牙文 es、義大利文 it、葡萄牙文 pt 和葡萄牙文 (葡萄牙) pt‑PT 導入了 many 複數類別。與 CLDR v38 中導入的法文類似,這項功能適用於大數字。

彩色向量字型

COLRv1 向量表情符號 (左) 和點陣圖表情符號 (右)

從 Android 13 開始,系統支援算繪 COLR 第 1 版 (COLRv1) 字型,並將系統表情符號更新為 COLRv1 格式。COLRv1 是一種極為簡易的字型格式,任何大小都能輕鬆快速算繪。

系統會自行處理一切,因此大多數的應用程式都能使用 COLRv1。不過,如果應用程式採用自己的文字算繪功能並使用系統字型,建議您測試表情符號算繪。

如要進一步瞭解 COLRv1,請參閱下列資源:

快速設定放置 API

使用者可透過通知欄中的「快速設定」輕鬆變更設定或執行快速動作,不必離開應用程式。對於提供自訂設定方塊的應用程式,我們將讓使用者更容易探索及新增方塊至「快速設定」。現在,應用程式可以使用新的設定方塊放置 API,提示使用者直接將自訂方塊新增至一組有效的快速設定方塊。使用者現在只要透過新的系統對話方塊,就能直接在應用程式中新增設定方塊,不必再前往「快速設定」新增。

對話方塊詢問使用者是否要在快速設定中新增設定方塊。

剪貼簿預覽

從 Android 13 開始,系統會在內容新增至剪貼簿時,以視覺形式顯示標準的確認內容。新的確認功能會執行以下作業:

  • 確認已成功複製內容。
  • 提供複製內容的預覽畫面。

這項功能可標準化應用程式複製後顯示的各種通知,讓使用者能進一步控管自己的剪貼簿。如需其他資訊,請參閱「複製及貼上」功能頁面。

複製/貼上小工具
內容進入剪貼簿時顯示的新 UI。

預測返回手勢

Android 13 在多種 Android 裝置上推出了預測返回手勢,包括手機、大螢幕裝置和折疊式裝置。如要支援這項功能,請更新應用程式。

如需詳細說明文件,請參閱「更新應用程式以支援預測返回手勢」。您也可以試用程式碼實驗室。

藍牙 LE Audio

低功耗 (LE) 音訊技術是無線音訊技術,開發目的在於取代傳統藍牙技術,以及實現特定用途和連線拓撲。透過這項技術,使用者可以與親朋好友分享音訊、播放聲音內容,也可以訂閱資訊、娛樂或無障礙用途的公共廣播內容。這項新技術不必耗費大量電力,就可以讓使用者接收高傳真音訊,同時也能在不同用途間流暢切換,這是傳統藍牙技術無法辦到的事。從 Android 13 開始,系統內建支援 LE Audio,因此開發人員可在相容裝置上免費取得這些功能。

MIDI 2.0

從 Android 13 開始,系統支援 MIDI 2.0 標準,也能夠透過 USB 連接 MIDI 2.0 硬體。這項標準有多項特點,例如提升控制器精度、改善非西方律式的支援程度,以及提高使用單一音符控制器時的表現。

提升啟動畫面效率

Android 13 改善了 Splash Screen API 中動畫啟動畫面的效率:

  • 系統會直接從 AnimatedVectorDrawable 推斷動畫時間長度。在 Android 13 之前,必須直接設定 windowSplashScreenAnimationDuration。

  • 使用新的 windowSplashScreenBehavior 屬性,進一步控管應用程式是否一律在 Android 13 以上版本的啟動畫面上顯示圖示。

如要查看詳細說明文件,請參閱「啟動畫面」。

ART 最佳化

在 Android 13 (API 級別 33) 以上版本中,ART 可大幅加快與原生程式碼的來回切換速度,JNI 呼叫速度現在最多可提升 2.5 倍。此外,我們也重新設計了執行階段參照處理程序,使其大部分為非阻斷作業,進一步減少卡頓情形。此外,您可以使用 Reference.refersTo() 公開 API 更快回收無法存取的物件,而且由於類別和方法查詢經過最佳化,您會發現解譯器現在速度更快。ART 也會在安裝時執行更多位元碼驗證,避免在執行階段驗證,並維持快速的應用程式啟動時間。

隱私權和安全性

為已註冊使用情境的接收端提供更安全的匯出服務

為確保執行階段接收器安全無虞,Android 13 推出新功能,可讓應用程式指定是否要匯出已註冊的廣播接收器,並向裝置上的其他應用程式顯示。在舊版 Android 中,除非接收器受到簽章權限保護,否則裝置上的任何應用程式都可以將未受保護的廣播傳送至動態註冊的接收器。

如果應用程式符合下列至少一項條件,即可使用這項匯出設定:

相片挑選工具

Android 13 (API 級別 33) 以上版本提供相片挑選工具體驗。應用程式啟動相片挑選工具時,使用者可以選擇分享特定圖片和影片 (例如個人資料相片),不必授予應用程式整個媒體庫的存取權。建議您採用這種方式存取使用者的相片和影片。

相片挑選工具可為使用者提供更完善的隱私權保障,因為您的應用程式不需要宣告任何執行階段權限。此外,相片挑選工具還提供應用程式專用的內建標準化 UI,可打造更一致的使用者體驗。

鄰近 Wi-Fi 裝置的新執行階段權限

Android 13 (API 級別 33) 在 NEARBY_DEVICES 權限群組中導入新的執行階段權限,適用於管理裝置與附近存取點 Wi-Fi 連線的應用程式。這些應用程式必須在呼叫多個不同的 Wi-Fi API 時,宣告新的權限 NEARBY_WIFI_DEVICES。此外,指定 Android 13 以上版本時,只要應用程式不從 Wi-Fi API 推算實體位置,就不需要聲明 ACCESS_FINE_LOCATION 權限。

進一步瞭解鄰近 Wi-Fi 裝置權限。

新權限:使用精確鬧鐘

如果應用程式指定 Android 13 以上版本,可以使用 USE_EXACT_ALARM 權限,系統會自動授予這項權限。不過,應用程式必須符合下列至少一項條件,才能使用這項權限:

  • 應用程式是鬧鐘或計時器應用程式。
  • 應用程式是日曆應用程式,而且會顯示近期活動的通知。

如果應用程式會設定精確鬧鐘,但未符合以上清單的任一情況,請繼續聲明 SCHEDULE_EXACT_ALARM 權限,並做好使用者拒絕應用程式存取的備案。

開發人員可降級權限

從 Android 13 開始,應用程式可以撤銷對未使用執行階段權限的存取權。這個 API 可讓應用程式執行下列隱私權強化工作:

  • 移除未使用的權限。
  • 遵循權限最佳做法,提升使用者信任度。建議您向使用者顯示對話方塊,說明您主動撤銷的權限。

APK 簽署配置 v3.1

Android 13 新增對 APK 簽署配置 v3.1 的支援,可改善現有的 APK 簽署配置 v3。這個配置解決了 APK 簽署配置 v3 的部分已知問題,與輪換相關。具體來說,v3.1 簽署配置支援 SDK 版本指定,因此輪換作業可以指定平台後續版本。

v3.1 簽署配置使用的區塊 ID 在 12L 以下版本無法辨識。因此,平台會套用下列簽署者行為:

  • 搭載 Android 13 以上版本的裝置會使用 v3.1 區塊中的輪換簽署者。
  • 搭載舊版 Android 的裝置會忽略輪換簽署者,改為使用 v3.0 區塊中的原始簽署者。

如果應用程式尚未輪換簽署金鑰,則不需要採取任何額外行動。這些應用程式選擇輪換時,系統預設會套用 v3.1 簽署配置。

如果應用程式已輪換,且想繼續在 3.0 版簽署區塊中使用輪換後的簽署金鑰,則必須更新 apksigner 叫用:

apksigner sign --ks keystore.jks |
  --key key.pk8 --cert cert.x509.pem
  --rotation-min-sdk-version API_LEVEL
  [signer_options] app-name.apk

...其中 API_LEVEL 為 32 以下。

改善 KeyStore 和 KeyMint 中的錯誤報告

對於會產生金鑰的應用程式,KeyStore 和 KeyMint 現在會提供更詳細且準確的錯誤指標。我們在 java.security.ProviderException 下方新增了例外狀況類別階層,其中包含 Android 專屬例外狀況,例如 Keystore/KeyMint 錯誤代碼,以及錯誤是否可重試。您也可以修改金鑰產生和使用 (簽署、加密) 的方法,以擲回新的例外狀況。改良後的錯誤回報功能不只適用於金鑰產生作業,且現在應能提供重試金鑰產生時所需的資訊。

支援平板電腦和大螢幕

Android 13 延續了 Android 12 和 12L 功能推送的平板電腦最佳化功能,包括系統 UI 最佳化、更完善的多工處理功能,以及改良的相容模式。測試時,請務必確認應用程式在平板電腦和其他大螢幕裝置上呈現最佳狀態。

如要進一步瞭解新功能和測試內容,請參閱「支援平板電腦和大螢幕」頁面。

圖形

可程式化著色器

AGSL 動畫著色器,改編自這個 GLSL 著色器。

從 Android 13 開始,系統支援可程式化的 RuntimeShader 物件,並使用 Android 圖形著色語言 (AGSL) 定義行為。AGSL 的語法大部分與 GLSL 相同,但 AGSL 是在 Android 算繪引擎中運作,可自訂 Android 畫布內的繪製方式,以及篩選 View 內容。Android 會在內部使用這些著色器,實作漣漪效果、模糊和延展過度捲動。Android 13 以上版本可讓您為應用程式建立類似的進階效果。

編舞家改善項目

Android 13 推出公開 API 方法,可為 Choreographer 和 ASurfaceControl 提供更多可能的影格時間軸資訊,並為 SurfaceFlinger 新增影格生命週期相關背景資訊。與先前類似,應用程式可以發布回呼至 Choreographer,並接收影格時間軸資訊。在 Android 13 (API 級別 33) 中,Choreographer 會傳回多個可能的顯示時間和對應的影格期限。應用程式可以選擇顯示時間,並隨後通知 SurfaceFlinger 所選時間。SurfaceFlinger 就不會嘗試在所需顯示時間前套用交易或鎖定緩衝區。

如果應用程式使用新的 Choreographer 和 SurfaceControl 方法,您可以在 Perfetto 追蹤記錄中查看應用程式的影格生命週期。

相機

HDR 影片拍攝

自 Android 13 起,Camera2 API 支援高動態範圍 (HDR) 影片拍攝功能,讓您使用相機預覽及錄製 HDR 影片內容。相較於標準動態範圍 (SDR),HDR 提供更廣泛的色彩範圍,並增加亮度元素的動態範圍 (從目前的 100 cd/m2 提高至 1000s cd/m2)。這項技術可呈現更豐富的色彩、更明亮的亮部和更深沉的陰影,讓影片畫質更貼近現實。

如要進一步瞭解 HDR 影片拍攝功能,請參閱「HDR 影片拍攝」說明文件。

媒體

空間音訊

空間音訊能帶來身歷其境的聽覺饗宴,讓媒體內容更加逼真。如要瞭解如何整合這項功能,請參閱空間音訊說明文件。

預期性音訊路由

為協助媒體應用程式判斷音訊的路由方式,Android 13 在 AudioManager 類別中導入音訊路由 API。您可以使用 getAudioDevicesForAttributes() API 擷取可用於播放指定音訊的裝置清單,並透過 getDirectProfilesForAttributes() API 瞭解音訊串流是否可直接播放。使用這些 API 判斷最適合音軌的 AudioFormat。

無障礙設定

口述影像

Android 13 (API 級別 33) 推出全新的系統層級無障礙偏好設定,讓使用者在所有應用程式中啟用口述影像。口述影像是一段額外的旁白音軌,由旁白工具在音訊自然暫停時,描述畫面呈現的內容。應用程式可以用 isAudioDescriptionRequested() 查詢使用者對口述影像音軌的偏好設定,如下列程式碼片段所示:

Kotlin

private lateinit var accessibilityManager: AccessibilityManager

// In onCreate():
accessibilityManager = getSystemService(AccessibilityManager::class.java)

// Where your media player is initialized
if (accessibilityManager.isAudioDescriptionRequested) {
    // User has requested to enable audio descriptions
}

Java

private AccessibilityManager accessibilityManager;

// In onCreate():
accessibilityManager = getSystemService(AccessibilityManager.class);

// Where your media player is initialized
if(accessibilityManager.isAudioDescriptionRequested()) {
    // User has requested to enable audio descriptions
}

應用程式可以將事件監聽器新增至 AccessbilityManager,監控使用者的偏好設定變更:

Kotlin

private val listener =
    AccessibilityManager.AudioDescriptionRequestedChangeListener { enabled ->
        // Preference changed; reflect its state in your media player
    }

override fun onStart() {
    super.onStart()

    accessibilityManager.addAudioDescriptionRequestedChangeListener(mainExecutor, listener)
}

override fun onStop() {
    super.onStop()

    accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener)
}

Java

private AccessibilityManager.AudioDescriptionRequestedChangeListener listener = enabled -> {
    // Preference changed; reflect its state in your media player
};

@Override
protected void onStart() {
    super.onStart();

    accessibilityManager.addAudioDescriptionRequestedChangeListener(getMainExecutor(), listener);
}

@Override
protected void onStop() {
    super.onStop();

    accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener);
}

核心功能

OpenJDK 11 更新

Android 13 開始更新 Android 核心程式庫,以便與 OpenJDK 11 LTS 版本保持一致,包括程式庫更新,以及應用程式與平台開發人員的 Java 11 語言支援。Android 13 推出的核心程式庫變更,也會透過包含 ART Mainline 模組的 Google Play 系統更新,提供給 Android 12 裝置。

Android 13 包含下列核心程式庫變更:

  • 支援本機變數的 var 關鍵字,以及 lambda 的參數。
  • String 類別中的新方法:

    • isBlank()
    • lines()
    • repeat()
    • strip()
    • stripLeading()
    • stripTrailing()
  • 支援 Collection.toArray(IntFunction),方便將集合調整為陣列。

  • 支援 java.util 類別中的 ifPresentOrElse()、isEmpty()、orElseThrow() 和 stream(),適用於 Optional、OptionalDouble、OptionalInt 和 OptionalLong。

  • 擴充支援 SocketOptions,包括重複使用通訊端。

  • NullReader、NullWriter、InputStream、OutputStream 和 transferTo() Reader 功能,可將讀取的字元轉移至 Writer。

  • 新增使用 Charsets 進行網址編碼和解碼的功能。

  • Charset 功能,適用於 FileReader、FileWriter、PrintStream 和 PrintWriter。

  • 適用於 ByteArrayInput 或 OutputStream 和 Input 或 OutputStream 的新 transferTo()、readNBytes()、readAllBytes() 和 writeBytes() 函式。

  • 對 java.lang.invoke.VarHandle 提供執行階段和編譯器支援。

  • 使用 VarHandle 在內部將 java.util.concurrent 更新至 OpenJDK 11 API。

Java 和 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。