功能與 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() 中使用 fullFastnormalFast 頻率。

文字轉換 API

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

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

透過新的文字轉換 API,日本使用者只要輸入平假名,就能立即看到漢字的搜尋結果,略過步驟 2 和 3。

改善非拉丁語係指令碼的行高

Android 13 會根據每種語言自動調整行高,改善非拉丁語系文字的顯示方式,例如泰米爾文、緬甸文、泰盧固文和藏文。新的行高不僅能防止遭到裁剪,還能改善字元的位置。只要應用程式指定 Android 13,就能善用這些改善功能。使用新的行距時,請務必測試應用程式,因為這類變更可能會影響非拉丁語系語言的使用者介面。

在 Android 12 (上述) 中裁剪的行高度,現在在 Android 13 (下方) 中可以更妥善定位,並且不會遭到裁剪。

改善日文自動換行功能

從 Android 13 開始,TextView 可藉由 Bunsetsu (聲音最小的自然字詞單位) 或詞組 (而非字元) 將文字換行,提供更精美、更易讀的日文應用程式。您可以將 android:lineBreakWordStyle="phrase" 與 TextView 搭配使用,利用這個包裝方式。

啟用詞組樣式 (詳見下方) 和不使用詞組樣式的日文換行功能 (如上)。

萬國碼 (Unicode) 程式庫更新

Android 13 新增了 Unicode ICU 70Unicode CLDR 40Unicode 14.0 包含的最新改善、修正和變更。

以下是兩項重要變更:

  • 英文 (加拿大) en‑CA 和英文 (菲律賓共和國) en‑PH 都使用英文 (美國) en 翻譯資源,如果沒有翻譯資源可用,而不是英文 (英國) en‑GB
  • 西班牙文 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。此外,只要應用程式不透過 Wi-Fi API 取得實際位置資訊,以 Android 13 以上版本為目標時就不需宣告 ACCESS_FINE_LOCATION 權限。

進一步瞭解附近的 Wi-Fi 裝置權限

新增使用精確鬧鐘的權限

如果應用程式指定 Android 13 以上版本為目標,您可以使用自動授予應用程式的 USE_EXACT_ALARM 權限。不過,為了讓應用程式能使用這項權限,應用程式至少必須符合下列其中一項條件:

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

如果應用程式設定了精確鬧鐘,但不符合上表中顯示的任一情況,請繼續宣告 SCHEDULE_EXACT_ALARM 權限,並準備好在使用者拒絕存取應用程式的情況下做好準備。

開發人員可降級的權限

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

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

APK 簽署配置 3.1 版

Android 13 開始支援 APK 簽署配置 3.1 版,可以改善現有 APK 簽署配置 v3。這個配置解決 APK Signature Scheme v3 與旋轉相關的部分已知問題。特別是 v3.1 簽章配置支援 SDK 版本指定功能,這可讓旋轉功能鎖定較新的平台版本。

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

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

如果尚未輪替簽署金鑰的應用程式,則不需要採取其他行動。每當這些應用程式選擇旋轉時,系統預設會套用 3.1 版簽章配置。

如果應用程式已輪替但想要在 v3.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 中新增了例外狀況類別階層,納入包含 Keystore/KeyMint 錯誤代碼的 Android 特定例外狀況,以及該錯誤是否可重試。您也可以修改產生金鑰及使用 (簽署、加密) 的方法,擲回新的例外狀況。改善錯誤回報功能並不限於產生金鑰,現在應該能提供重試金鑰產生作業所需的知識。

支援平板電腦和大螢幕

Android 13 是以 Android 12 中導入的平板電腦最佳化和 12L 功能推送為基礎,其中包括系統 UI 的最佳化、更完善的多工處理功能和更完善的相容性模式。進行測試時,請確保您的應用程式在平板電腦和其他大螢幕裝置上呈現最佳效果。

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

顯示卡

可程式著色器

根據這個 GLSL 著色器調整的 AGSL 動畫著色器。

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

Choreographer 改良功能

Android 13 在 ChoreographerASurfaceControl 中推出了公用 API 方法,為應用程式提供更多有關可能影格時間軸的資訊,並為 SurfaceFlinger 加入影格生命週期的更多背景資訊。與先前類似,應用程式可以為 Choreographer 發布回呼,並接收影格時間軸資訊。在 Android 13 (API 級別 33) 中,Choreographer 會傳回多個可能的顯示時間及對應的影格期限。應用程式可以選擇顯示時間,並通知 SurfaceFlingerSurfaceFlinger 則不會嘗試在所需的顯示時間之前套用交易或閂鎖緩衝區。

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

相機

HDR 影片擷取

自 Android 13 起,Camera2 API 支援高動態範圍 (HDR) 影片擷取功能,讓您能使用相機預覽及錄製 HDR 影片內容。與標準動態範圍 (SDR) 相比,HDR 提供色彩更廣的色彩範圍,且亮度元件的動態範圍 (從目前的 100 cd/m2 到 1000 的 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 版本保持一致。Android 13 中導入的核心程式庫變更也會透過 ART Mainline 模組的 Google Play 系統更新,提供給 Android 12 裝置。

Android 13 對核心程式庫進行了下列變更:

  • 支援使用本機變數和做為參數 lambda 的 var 關鍵字。
  • String 類別中的新方法:

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

  • 支援在 java.util 類別 OptionalOptionalDoubleOptionalIntOptionalLong 中使用 ifPresentOrElse()isEmpty()orElseThrow()stream()

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

  • NullReaderNullWriterInputStreamOutputStreamtransferTo() Reader 功能,可將讀取字元轉移至 Writer

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

  • FileReaderFileWriterPrintStreamPrintWriterCharset 功能。

  • ByteArrayInputOutputStream 以及 InputOutputStream 新增 transferTo()readNBytes()readAllBytes()writeBytes() 函式。

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

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

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