功能與 API 總覽

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

如需新增、修改及移除 API 的詳細清單,請參閱 API 差異比較表。如要進一步瞭解已新增的 API,請參閱 Android API 參考資料;如果是 Android 14,請尋找 API 級別 34 中新增的 API。如要瞭解平台異動可能對應用程式造成的影響,請務必查看適用於指定 Android 14 為目標版本的應用程式所有應用程式的 Android 14 行為變更。

國際化

個別應用程式語言偏好

Android 14 expands on the per-app language features that were introduced in Android 13 (API level 33) with these additional capabilities:

  • Automatically generate an app's localeConfig: Starting with Android Studio Giraffe Canary 7 and AGP 8.1.0-alpha07, you can configure your app to support per-app language preferences automatically. Based on your project resources, the Android Gradle plugin generates the LocaleConfig file and adds a reference to it in the final manifest file, so you no longer have to create or update the file manually. AGP uses the resources in the res folders of your app modules and any library module dependencies to determine the locales to include in the LocaleConfig file.

  • Dynamic updates for an app's localeConfig: Use the setOverrideLocaleConfig() and getOverrideLocaleConfig() methods in LocaleManager to dynamically update your app's list of supported languages in the device's system settings. Use this flexibility to customize the list of supported languages per region, run A/B experiments, or provide an updated list of locales if your app utilizes server-side pushes for localization.

  • App language visibility for input method editors (IMEs): IMEs can utilize the getApplicationLocales() method to check the language of the current app and match the IME language to that language.

文法轉變 API

30 億人使用性別化語言:即名詞、動詞、形容詞和介系詞會隨著交談或談論對象或目標的性別,而有不同變化形式的文法類別語言。一般來說,許多性別化語言都會使用陽性文法性別做為預設或通用性別。

若以錯誤的文法性別稱呼使用者,例如以陽性文法性別稱呼女性,可能會對其表現及態度產生負面影響。相較之下,如果使用者介面的用語正確反映了使用者的文法性別,便可提高使用者參與度,同時提供更個人化且更自然親切的使用者體驗。

為了協助你針對使用文法性別的語言,建構以使用者為中心的使用者介面,Android 14 採用了文法轉變 API,可讓你新增對文法性別的支援,而不必重構應用程式。

地區偏好設定

地區偏好設定可讓使用者自訂溫度單位、一週中的第一天,以及編號系統。生活在美國的歐洲使用者所慣用溫度單位可能是攝氏,而非華氏,在應用程式方面,一週開始的第一天應為星期一,而不是美國預設設定的星期日。

全新 Android 設定選單是針對這些偏好設定設計,可讓使用者透過集中的管理位置自行探索,並視需要變更應用程式的偏好設定。即使裝置經過備份與還原,這些偏好設定也不會改變。部分 API 和意圖 (例如 getTemperatureUnitgetFirstDayOfWeek) 會授予應用程式讀取使用者偏好設定的存取權限,以便應用程式調整資訊的顯示方式。您也可以在 ACTION_LOCALE_CHANGED 上註冊 BroadcastReceiver,以便在地區偏好設定變更時,處理語言代碼設定的變更。

如要找到這些設定,請開啟「設定」應用程式,並依序前往 [系統] > [語言與輸入設定] > [地區偏好設定]

Android 系統設定中的地區偏好設定畫面。
Android 系統設定中的地區偏好設定溫度選項。

無障礙功能

非線性字型縮放至 200%

Starting in Android 14, the system supports font scaling up to 200%, providing low-vision users with additional accessibility options that align with Web Content Accessibility Guidelines (WCAG).

To prevent large text elements on screen from scaling too large, the system applies a nonlinear scaling curve. This scaling strategy means that large text doesn't scale at the same rate as smaller text. Nonlinear font scaling helps preserve the proportional hierarchy between elements of different sizes while mitigating issues with linear text scaling at high degrees (such as text being cut off or text that becomes harder to read due to an extremely large display sizes).

Test your app with nonlinear font scaling

Enable the maximum font size in a device's accessibility settings to test your app.

If you already use scaled pixels (sp) units to define text sizing, then these additional options and scaling improvements are applied automatically to the text in your app. However, you should still perform UI testing with the maximum font size enabled (200%) to ensure that your app applies the font sizes correctly and can accommodate larger font sizes without impacting usability.

To enable 200% font size, follow these steps:

  1. Open the Settings app and navigate to Accessibility > Display size and text.
  2. For the Font size option, tap the plus (+) icon until the maximum font size setting is enabled, as shown in the image that accompanies this section.

Use scaled pixel (sp) units for text-sizes

Remember to always specify text sizes in sp units. When your app uses sp units, Android can apply the user's preferred text size and scale it appropriately.

Don't use sp units for padding or define view heights assuming implicit padding: with nonlinear font scaling sp dimensions might not be proportional, so 4sp + 20sp might not equal 24sp.

Convert scaled pixel (sp) units

Use TypedValue.applyDimension() to convert from sp units to pixels, and use TypedValue.deriveDimension() to convert pixels to sp. These methods apply the appropriate nonlinear scaling curve automatically.

Avoid hardcoding equations using Configuration.fontScale or DisplayMetrics.scaledDensity. Because font scaling is nonlinear, the scaledDensity field is no longer accurate. The fontScale field should be used for informational purposes only because fonts are no longer scaled with a single scalar value.

Use sp units for lineHeight

Always define android:lineHeight using sp units instead of dp, so the line height scales along with your text. Otherwise, if your text is sp but your lineHeight is in dp or px, it doesn't scale and looks cramped. TextView automatically corrects the lineHeight so that your intended proportions are preserved, but only if both textSize and lineHeight are defined in sp units.

相機與媒體

使用 Ultra HDR 格式的圖片

An illustration of Standard Dynamic Range (SDR) versus High Dynamic Range (HDR) image quality.

Android 14 adds support for High Dynamic Range (HDR) images that retain more of the information from the sensor when taking a photo, which enables vibrant colors and greater contrast. Android uses the Ultra HDR format, which is fully backward compatible with JPEG images, allowing apps to seamlessly interoperate with HDR images, displaying them in Standard Dynamic Range (SDR) as needed.

Rendering these images in the UI in HDR is done automatically by the framework when your app opts in to using HDR UI for its Activity Window, either through a manifest entry or at runtime by calling Window.setColorMode(). You can also capture compressed Ultra HDR still images on supported devices. With more colors recovered from the sensor, editing in post can be more flexible. The Gainmap associated with Ultra HDR images can be used to render them using OpenGL or Vulkan.

Zoom、Focus、Postview 和其他相機擴充功能

Android 14 升級並改善相機擴充功能,可讓應用程式處理較長的處理時間,進而在支援的裝置上運用會耗用大量運算資源的演算法 (例如低光源攝影),改善圖像的品質。這些功能可在使用相機擴充功能時,為使用者提供更穩固的使用體驗。以下列舉一些改善措施:

感應器縮放

CameraCharacteristics 中的 REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE 包含 SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW 時,應用程式可以利用進階感應器功能,透過 CaptureRequest 並將串流用途設為 CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW 的 RAW 目標,為裁剪的 RAW 串流提供與視野相同的像素。導入要求覆寫控制項後,更新後的相機就算其他相機控制項準備就緒,使用者也能進行縮放控制項。

無損 USB 音訊

透過 USB 有線耳機,Android 14 可支援無失真音訊格式,打造具有卓越音質的體驗。您可以查詢 USB 裝置來取得其偏好的混合器屬性、註冊事件監聽器以變更偏好的混合器屬性,並使用 AudioMixerAttributes 類別設定混合器屬性。這個類別代表格式,例如聲道遮罩、取樣率及混音器的行為。這個類別可讓音訊直接傳送,而不會混合、音量調整或處理效果。

開發人員的工作效率與工具

Credential Manager

Android 14 adds Credential Manager as a platform API, with additional support back to Android 4.4 (API level 19) devices through a Jetpack Library using Google Play services. Credential Manager aims to make sign-in easier for users with APIs that retrieve and store credentials with user-configured credential providers. Credential Manager supports multiple sign-in methods, including username and password, passkeys, and federated sign-in solutions (such as Sign-in with Google) in a single API.

Passkeys provide many advantages. For example, passkeys are built on industry standards, can work across different operating systems and browser ecosystems, and can be used with both websites and apps.

For more information, see the Credential Manager and passkeys documentation and the blogpost about Credential Manager and passkeys.

Health Connect

Health Connect is an on-device repository for user health and fitness data. It allows users to share data between their favorite apps, with a single place to control what data they want to share with these apps.

On devices running Android versions prior to Android 14, Health Connect is available to download as an app on the Google Play store. Starting with Android 14, Health Connect is part of the platform and receives updates through Google Play system updates without requiring a separate download. With this, Health Connect can be updated frequently, and your apps can rely on Health Connect being available on devices running Android 14 or higher. Users can access Health Connect from the Settings in their device, with privacy controls integrated into the system settings.

Users can get started using Health Connect without a separate app download on devices running Android 14 or higher.
Users can control which apps have access to their health and fitness data through system settings.

Health Connect includes several new features in Android 14, such as exercise routes, allowing users to share a route of their workout which can be visualized on a map. A route is defined as a list of locations saved within a window of time, and your app can insert routes into exercise sessions, tying them together. To ensure that users have complete control over this sensitive data, users must allow sharing individual routes with other apps.

For more information, see the Health Connection documentation and the blogpost on What's new in Android Health.

OpenJDK 17 更新

Android 14 持續更新 Android 核心程式庫,以便與最新版 OpenJDK LTS 中的功能保持一致,其中包括程式庫更新以及應用程式與平台開發人員的 Java 17 語言支援。

新功能和改善項目如下:

  • 已將約 300 個 java.base 類別更新至可支援 Java 17。
  • 文字模塊已針對 Java 程式設計語言推出多行字串常值。
  • instanceof 的模式比對可讓您在 instanceof 中,不需要使用其他變數,即可將物件視為具有特定類型處理。
  • 密封類別可讓您限制可進行擴充或實作的類別與介面。

進行 Google Play 系統更新 (Mainline 計畫) 之後,超過 6 億部裝置將可收到包含這些變更的最新 Android 執行階段 (ART) 更新。 這是我們承諾的一部分,讓應用程式在各種裝置上都能夠擁有更一致、安全的環境,同時為各平台版本的使用者提供新的功能與能力。

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

應用程式商店改善項目

Android 14 introduces several PackageInstaller APIs that allow app stores to improve their user experience.

Request install approval before downloading

Installing or updating an app might require user approval. For example, when an installer making use of the REQUEST_INSTALL_PACKAGES permission attempts to install a new app. In prior Android versions, app stores can only request user approval after APKs are written to the install session and the session is committed.

Starting with Android 14, the requestUserPreapproval() method lets installers request user approval before committing the install session. This improvement lets an app store defer downloading any APKs until after the installation has been approved by the user. Furthermore, once a user has approved installation, the app store can download and install the app in the background without interrupting the user.

Claim responsibility for future updates

The setRequestUpdateOwnership() method allows an installer to indicate to the system that it intends to be responsible for future updates to an app it is installing. This capability enables update ownership enforcement, meaning that only the update owner is permitted to install automatic updates to the app. Update ownership enforcement helps to ensure that users receive updates only from the expected app store.

Any other installer, including those making use of the INSTALL_PACKAGES permission, must receive explicit user approval in order to install an update. If a user decides to proceed with an update from another source, update ownership is lost.

Update apps at less-disruptive times

App stores typically want to avoid updating an app that is actively in use because this leads to the app's running processes being killed, which potentially interrupts what the user was doing.

Starting with Android 14, the InstallConstraints API gives installers a way to ensure that their app updates happen at an opportune moment. For example, an app store can call the commitSessionAfterInstallConstraintsAreMet() method to make sure that an update is only committed when the user is no longer interacting with the app in question.

Seamlessly install optional splits

With split APKs, features of an app can be delivered in separate APK files, rather than as a monolithic APK. Split APKs allow app stores to optimize the delivery of different app components. For example, app stores might optimize based on the properties of the target device. The PackageInstaller API has supported splits since its introduction in API level 22.

In Android 14, the setDontKillApp() method allows an installer to indicate that the app's running processes shouldn't be killed when new splits are installed. App stores can use this feature to seamlessly install new features of an app while the user is using the app.

應用程式中繼資料套件

從 Android 14 開始,Android 套件安裝程式可讓您指定應用程式中繼資料 (例如資料安全性做法),以加入 Google Play 等應用程式商店頁面。

在使用者擷取裝置螢幕畫面時偵測

為建立更標準化的螢幕截圖偵測體驗,Android 14 推出了具隱私保護功能的螢幕截圖偵測 API。此 API 可讓應用程式依個別活動登錄回呼。當使用者在具備瀏覽權限的活動中拍攝螢幕截圖時,系統會叫用這些回呼,並傳送通知給使用者。

使用者體驗

Sharesheet 自訂動作與改善排名

Android 14 updates the system sharesheet to support custom app actions and more informative preview results for users.

Add custom actions

With Android 14, your app can add custom actions to the system sharesheet it invokes.

Screenshot of custom actions on the sharesheet.

Improve ranking of Direct Share targets

Android 14 uses more signals from apps to determine the ranking of the direct share targets to provide more helpful results for the user. To provide the most useful signal for ranking, follow the guidance for improving rankings of your Direct Share targets. Communication apps can also report shortcut usage for outgoing and incoming messages.

Direct Share row in the sharesheet, as shown by 1

支援預測返回功能的內建和自訂動畫

影片:預測返回動畫

Android 13 推出了在開發人員選項背後顯示「預測返回主畫面」動畫的功能。只要使用支援的應用程式,並啟用開發人員選項,當您執行滑動返回的操作時,系統就會顯示動畫,指出返回手勢可讓應用程式結束並返回主畫面。

Android 14 內含多項改善項目,並提供有關預測返回手勢的全新指南:

在這個 Android 14 預先發布版本中,所有預測返回相關功能都保留在開發人員選項後方。請參閱開發人員指南,瞭解如何讓應用程式改用預測返回功能,以及如何建立自訂的應用程式內轉場效果

大螢幕裝置製造商個別應用程式覆寫值

個別應用程式覆寫值可讓裝置製造商變更應用程式在大螢幕裝置上的行為。舉例來說,即使應用程式資訊清單中已設定 resizeableActivity="false"FORCE_RESIZE_APP 覆寫值仍會指示系統根據顯示尺寸調整應用程式大小 (避開大小相容性模式)。

覆寫功能旨在改善大螢幕的使用者體驗。

新版資訊清單屬性可讓您停用應用程式的部分裝置製造商覆寫值。

大螢幕使用者個別應用程式覆寫值

個別應用程式覆寫值會變更應用程式在大螢幕裝置上的行為。舉例來說,無論應用程式設定為何,OVERRIDE_MIN_ASPECT_RATIO_LARGE 裝置製造商覆寫值都會將應用程式顯示比例設為 16:9。

Android 14 QPR1 可讓使用者在大螢幕裝置上透過新設定選單套用個別應用程式覆寫值。

分享應用程式畫面

應用程式分享螢幕畫面功能可讓使用者在錄製螢幕畫面時,分享應用程式視窗,而非整個裝置螢幕畫面。

應用程式分享螢幕畫面時,狀態列、導覽列、通知和其他系統 UI 元素都不會在共用螢幕上排除。系統只會分享所選應用程式的內容。

應用程式分享螢幕畫面功能可讓使用者執行多個應用程式,但只分享單一應用程式的內容,藉此提高工作效率和隱私權。

Pixel 8 Pro 搭載 Gboard 的 Gboard 智慧回覆功能

On Pixel 8 Pro devices with the December Feature Drop, developers can try out higher-quality smart replies in Gboard powered by on-device Large Language Models (LLMs) running on Google Tensor.

This feature is available as a limited preview for US English in WhatsApp, Line, and KakaoTalk. It requires using a Pixel 8 Pro device with Gboard as your keyboard.

To try it out, first enable the feature in Settings > Developer Options > AiCore Settings > Enable Aicore Persistent.

Next, open a conversation in a supported app to see LLM-powered Smart Reply in Gboard's suggestion strip in response to incoming messages.

Gboard utilizes on-device LLMs to provide higher-quality smart replies.

顯示卡

路徑可查詢及內插

Android 的 Path API 是一項強大且靈活的機制,可用於建立及轉譯向量圖形,包括筆劃或填滿路徑、從線段、二次曲線或立方曲線建構路徑、執行布林運算以取得更複雜的形狀,或同時執行上述所有功能。但有一個限制,就是無法找出路徑物件中的實際情況;該物件的內部部分在建立後,無法明確顯示於呼叫端。

如要建立 Path,您必須呼叫 moveTo()lineTo()cubicTo() 等方法,以便新增路徑區隔。不過,您無法向該路徑詢問區隔為何,因此必須在建立時保留該資訊。

自 Android 14 起,您便可查詢路徑,找出其中的內容。首先,您需要使用 Path.getPathIterator API 取得 PathIterator 物件:

Kotlin

val path = Path().apply {
    moveTo(1.0f, 1.0f)
    lineTo(2.0f, 2.0f)
    close()
}
val pathIterator = path.pathIterator

Java

Path path = new Path();
path.moveTo(1.0F, 1.0F);
path.lineTo(2.0F, 2.0F);
path.close();
PathIterator pathIterator = path.getPathIterator();

接下來,您可以呼叫 PathIterator 逐一疊代區隔,並擷取每個區隔的所有必要資料。本範例使用封裝資料的 PathIterator.Segment 物件:

Kotlin

for (segment in pathIterator) {
    println("segment: ${segment.verb}, ${segment.points}")
}

Java

while (pathIterator.hasNext()) {
    PathIterator.Segment segment = pathIterator.next();
    Log.i(LOG_TAG, "segment: " + segment.getVerb() + ", " + segment.getPoints());
}

PathIterator 也提供 next() 的非分配版本,可供您傳入緩衝區,以便保留單點資料。

內插類型是查詢 Path 資料的重要用途之一。例如,您可能想要在兩個不同路徑之間建立動畫 (或 變形)。為進一步簡化該使用情境,Android 14 也在 Path 上也加入了 interpolate() 方法。假設兩個路徑具有相同的內部結構,interpolate() 方法會使用該內插結果建立新的 Path。這個範例會傳回形狀在 pathotherPath 之間,形狀為半數 (0 .5 的線性內插) 的路徑:

Kotlin

val interpolatedResult = Path()
if (path.isInterpolatable(otherPath)) {
    path.interpolate(otherPath, .5f, interpolatedResult)
}

Java

Path interpolatedResult = new Path();
if (path.isInterpolatable(otherPath)) {
    path.interpolate(otherPath, 0.5F, interpolatedResult);
}

Jetpack graphics-path 程式庫也支援舊版 Android 類似的 API。

使用頂點和片段著色器的自訂網格

Android has long supported drawing triangle meshes with custom shading, but the input mesh format has been limited to a few predefined attribute combinations. Android 14 adds support for custom meshes, which can be defined as triangles or triangle strips, and can, optionally, be indexed. These meshes are specified with custom attributes, vertex strides, varying, and vertex and fragment shaders written in AGSL.

The vertex shader defines the varyings, such as position and color, while the fragment shader can optionally define the color for the pixel, typically by using the varyings created by the vertex shader. If color is provided by the fragment shader, it is then blended with the current Paint color using the blend mode selected when drawing the mesh. Uniforms can be passed into the fragment and vertex shaders for additional flexibility.

Canvas 的硬體緩衝區轉譯器

為了協助使用 Android 的 Canvas API 使用硬體加速功能在 HardwareBuffer 中繪圖,Android 14 導入了 HardwareBufferRenderer。如果您的用途涉及低延遲繪圖,透過 SurfaceControl 與系統合成器通訊,這個 API 特別實用。