功能與 API 總覽

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

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

國際化

個別應用程式語言偏好

Android 14 進一步延伸 Android 13 (API 級別 33) 所推出的個別應用程式語言功能,並新增多項功能:

  • 自動產生應用程式的 localeConfig:自 Android Studio Giraffe Canary 7 和 AGP 8.1.0-alpha07 起,您可以將應用程式設為自動支援個別應用程式語言偏好設定。Android Gradle 外掛程式會根據您的專案資源產生 LocaleConfig 檔案,並在最終資訊清單檔案中為該檔案新增參照,為您省去手動建立或更新檔案的需求。AGP 會使用應用程式模組 res 資料夾中的資源和任何程式庫模組依附元件,以決定要納入 LocaleConfig 檔案的語言代碼。

  • 應用程式 localeConfig 的動態更新:請使用 法LocaleManager 中的 setOverrideLocaleConfig()getOverrideLocaleConfig() 方法,以動態方式更新應用程式在裝置的系統設定中的支援語言清單。如果應用程式使用伺服器端推送進行本地化,則可利用此彈性自訂各區域的支援語言清單、執行 A/B 實驗,或提供更新的語言代碼清單。

  • 輸入法編輯器 (IME) 的應用程式語言瀏覽權限:輸入法編輯器可透過 getApplicationLocales() 方法檢查當前應用程式的語言,並和輸入法編輯器的語言進行比對。

文法轉變 API

有 30 亿人在使用区分性别的语言,此类语言的语法类别(例如名词、动词、形容词和介词)会根据您交谈所涉及的人或物的性别而变化。传统上,许多区分性别的语言使用阳性语法性别作为默认或通用性别。

以错误的语法性别来称呼用户,例如以阳性语法性别来称呼女性,可能会对她们的表现和态度产生负面影响。相比之下,界面语言如果能正确反映用户的语法性别,就可以提高用户互动度,并提供更个性化、更自然的用户体验。

为帮助您针对区分性别的语言构建以用户为中心的界面,Android 14 引入了 Grammatical Inflection API,让您无需重构应用便能添加对语法性别的支持。

地區偏好設定

地區偏好設定可讓使用者自訂溫度單位,這是第一項 包括星期幾和編號系統住在美國的歐洲人 最好將溫度單位設定為攝氏,而非華氏, 應用程式,將星期一視為一週的起始日,而非美國的預設設定。 週日。

全新 Android 設定選單是針對這些偏好設定設計,可讓使用者透過集中的管理位置自行探索,並視需要變更應用程式的偏好設定。即使裝置經過備份與還原,這些偏好設定也不會改變。有幾個 API 和 意圖 (例如 getTemperatureUnit敬上 和 getFirstDayOfWeek: 授予應用程式讀取使用者偏好設定的權限,以便應用程式調整其運作方式 顯示資訊。您也可以註冊 BroadcastReceiver已開啟 ACTION_LOCALE_CHANGED 處理地區偏好設定變更時的地區設定變更。

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

Android 系統設定中的地區偏好設定畫面。
Android 系統中地區偏好設定的溫度選項 可以管理叢集設定,像是節點 資源調度、安全性和其他預先設定項目

無障礙設定

非線性字型縮放至 200%

自 Android 14 起,系統將支援高達 200% 的字型縮放功能,為低視能使用者提供符合無障礙網頁內容規範 (WCAG)的額外無障礙選項。

為避免畫面上的大型文字元素縮放過大,系統會套用非線性縮放曲線。套用此縮放策略後,大型文字的縮放比例會和小型文字的縮放比例有所區別。非線性字型縮放有助於保留不同大小元素之間的比例階層,同時減少高度線性文字縮放的問題 (例如文字遭到截斷,或因顯示大小過大而難以閱讀的文字)。

使用非線性字型縮放測試應用程式

請在裝置的無障礙設定中啟用字型大小上限,以便測試您的應用程式。

如果您已使用縮放像素 (sp) 單位來定義文字大小,這些額外選項和縮放改善功能會自動套用至應用程式中的文字。不過,您仍應執行 UI 測試,並將字型大小上限設為啟用 (200%),以確保應用程式能正確套用字型大小,而且能在不影響可用性的情況下容納較大的字型大小。

如要啟用 200% 的字型大小,請按照下列步驟進行:

  1. 開啟「設定」應用程式,然後依序前往「無障礙中心」>「顯示大小與文字」
  2. 在「字型大小」選項中,輕觸加號 (+) 圖示,直到達字型大小上限為止,如本節隨附的圖片所示。

使用經過調整像素 (sp) 的單位處理文字大小

請記得一律以 sp 單位指定文字大小。如果您的應用程式使用 sp 單位,Android 可套用使用者偏好的文字大小,並適當縮放。

請勿使用 sp 單位做為邊框間距,或是假定檢視畫面高度,並假設有隱性邊框間距:使用非線性字型縮放 sp 尺寸可能不是比例,因此 4sp + 20sp 不一定會等於 24sp。

轉換經過調整像素 (sp) 的單位

使用 TypedValue.applyDimension() 將 sp 單位轉換為像素,並使用 TypedValue.deriveDimension() 將像素轉換為 sp。這些方法會自動套用適當的非線性縮放曲線。

避免使用硬式編碼方程式使用 Configuration.fontScaleDisplayMetrics.scaledDensity。由於字型縮放功能為非線性方式,因此 scaledDensity 欄位已變得不準確。fontScale 欄位應僅用於提供資訊,因為字型不再需要以單一純量值縮放字型。

使用 sp 單位做為 lineHeight

請一律使用 sp 單位 (而非 dp) 定義 android:lineHeight,讓行高會隨著文字縮放。否則,如果文字是 sp,但 lineHeight 是以 dp 或 px 為單位,則無法縮放,看起來會遭到破壞。TextView 會自動修正 lineHeight,以便保留預期的比例,但前提是 textSizelineHeight 都已在 sp 單位中定義。

相機和媒體

圖片的 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.

相機擴充功能中的縮放、聚焦、後視等功能

Android 14 upgrades and improves camera extensions, allowing apps to handle longer processing times, which enables improved images using compute-intensive algorithms like low-light photography on supported devices. These features give users an even more robust experience when using camera extension capabilities. Examples of these improvements include:

感應器內縮放

CameraCharacteristics 中的 REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE 包含 SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW 時,應用程式可以使用進階感應器功能,透過 CaptureRequest 和 RAW 目標 (其串流用途已設為 CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW),為經裁剪的 RAW 串流提供與全景視野相同的像素。透過實作要求覆寫控制項,更新後的相機可在其他相機控制項準備就緒前,提供縮放控制選項。

無損 USB 音訊

Android 14 支援無損音訊格式,可透過 USB 有線耳機提供頂級音響體驗。您可以查詢 USB 裝置的偏好混合器屬性、註冊偏好混合器屬性變更的事件監聽器,以及使用 AudioMixerAttributes 類別設定混合器屬性。這個類別代表音訊調音器的格式,例如通道遮罩、取樣率和行為。這個類別可讓您直接傳送音訊,不必進行混合、音量調整或處理效果。

開發人員工作效率和工具

Credential Manager

Android 14 将 Credential Manager 添加为平台 API,并通过使用 Google Play 服务的 Jetpack 库,向后额外支持 Android 4.4(API 级别 19)设备。Credential Manager 旨在通过 API 使用用户配置的凭据提供程序检索和存储凭据,让用户更轻松地登录。Credential Manager 在单个 API 中支持多种登录方法,包括用户名和密码、通行密钥和联合登录解决方案(如“使用 Google 账号登录”)。

通行密钥具有许多优势。例如,通行密钥是基于业界标准构建的,可在各种不同的操作系统和浏览器生态系统中使用,并且可用于网站和应用。

如需了解详情,请参阅 Credential Manager 和通行密钥文档以及介绍 Credential Manager 和通行密钥的博文

Health Connect

Health Connect 是裝置端的使用者健康與健身資料存放區。這項功能可讓使用者在喜愛的應用程式之間分享資料,並透過單一介面控管要與這些應用程式分享的資料。

在 Android 14 以下版本的裝置上,Health Connect 可透過 Google Play 商店下載為應用程式。自 Android 14 起,Health Connect 將成為平台的一部分,並透過 Google Play 系統更新接收更新,無須另外下載。如此一來,Health Connect 就能經常更新,您的應用程式也可以在搭載 Android 14 以上版本的裝置上使用 Health Connect。使用者可以透過裝置的「設定」存取 Health Connect,系統設定中已整合隱私權控制選項。

使用者可以在搭載 Android 14 以上版本的裝置上開始使用 Health Connect,無須另外下載應用程式。
使用者可透過系統設定控管哪些應用程式可存取其健康與健身資料。

Health Connect 在 Android 14 中提供多項新功能,例如運動路線,可讓使用者分享健身路線,並在地圖上顯示。路線的定義是指在一段時間內儲存的地點清單,應用程式可將路線插入運動時段,將路線連結在一起。為確保使用者能完全控管這類私密資料,使用者必須允許與其他應用程式共用個別路線。

詳情請參閱 Health Connect 說明文件和「Android 健康資料新功能」一文。

OpenJDK 17 更新

Android 14 将继续更新 Android 的核心库,以与最新 OpenJDK LTS 版本中的功能保持一致,包括适合应用和平台开发者的库更新和 Java 17 语言支持。

其中包含以下功能和改进:

  • 将大约 300 个 java.base 类更新为支持 Java 17。
  • 文本块 - 为 Java 编程语言引入了多行字符串字面量。
  • instanceof 模式匹配:可让对象在 instanceof 中被视为具有特定类型,而无需任何额外的变量。
  • 密封类:允许您限制哪些类和接口可以扩展或实现它们。

得益于 Google Play 系统更新 (Project Mainline),6 亿多台设备能够接收包含这些更改的最新 Android 运行时 (ART) 更新。我们致力于为应用提供更加一致、安全的跨设备环境,并为用户提供独立于平台版本的新功能。

Java 和 OpenJDK 是 Oracle 及/或其关联公司的商标或注册商标。

應用程式商店改善項目

Android 14 引進幾個 PackageInstaller API,可讓應用程式商店改善使用者體驗。

在下載之前要求安裝核准

安裝或更新應用程式可能需要使用者核准。例如:當使用 REQUEST_INSTALL_PACKAGES 權限的安裝程式試著要安裝新的應用程式時。在先前的 Android 版本中,應用程式商店只能夠在 APK 寫入安裝工作階段,且該工作階段已履行之後,才可要求使用者核准。

自 Android 14 起,requestUserPreapproval() 方法可讓安裝程式在履行安裝工作階段之前要求使用者核准。這項改善項目讓應用程式商店將下載任何 APK 的時間延後,直到使用者核准安裝為止。此外,在使用者核准安裝後,應用程式商店可以在背景下載並安裝應用程式,避免對使用者造成困擾。

聲明日後更新的責任

setRequestUpdateOwnership() 方法可讓安裝程式向系統表示,日後為應用程式安裝的更新皆由其負責處理。這項功能可啟用更新擁有權強制執行機制,也就是只有更新擁有者才能安裝應用程式的自動更新。強制更新擁有權有助於確保使用者一律從預期的應用程式商店收到更新。

任何其他安裝程式 (包括使用 INSTALL_PACKAGES 權限的安裝程式) 都必須明確獲得使用者核准,才能安裝更新。如果使用者決定繼續執行其他來源的更新,則將失去更新擁有權。

在較不受干擾的情況下更新應用程式

一般來說,應用程式商店會希望避免更新正在使用中的應用程式,以免導致應用程式正在執行的程序終止,進而中斷使用者正在執行的操作。

自 Android 14 起,InstallConstraints API 可讓安裝程式確保應用程式更新作業能在適當時機執行。舉例來說,應用程式商店可呼叫 commitSessionAfterInstallConstraintsAreMet() 方法,以確保只有在使用者不再與應用程式互動時才會執行更新。

順利安裝選用分割項目

使用分割 APK 時,應用程式的功能可透過個別 APK 檔案提供,而不是以單體 APK 為單位提供。分割 APK 可讓應用程式商店以最佳方式提供不同的應用程式元件。例如,應用程式商店可能會根據目標裝置的屬性進行最佳化。自 API 級別 22 推出以來,PackageInstaller API 已支援分割。

在 Android 14 中,setDontKillApp() 方法可讓安裝程式指出在安裝新的分割項目時,不應導致應用程式執行中的處理程序終止。應用程式商店可在使用者使用應用程式時,透過此功能順利安裝應用程式的新功能。

應用程式中繼資料套件

從 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 上使用 LLM 技術支援的 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 长期以来一直支持使用自定义着色绘制三角网格,但输入网格格式仅限于一些预定义的属性组合。Android 14 增加了对自定义网格的支持,可将其定义为三角形三角形条,并且可以选择是否编入索引。这些网格是使用自定义属性、顶点步长、可变以及使用 AGSL 编写的顶点着色器和片段着色器指定的。

顶点着色器定义了位置和颜色等变量,而片段着色器可以选择为像素定义颜色,通常是使用顶点着色器创建的变量。如果片段着色器提供颜色,则系统会使用绘制网格时选择的混合模式将其与当前 Paint 颜色混合。Uniform 可以传递到片段着色器和顶点着色器,以提高灵活性。

Canvas 的硬體緩衝區轉譯器

為協助使用 Android 的 Canvas API 以硬體加速繪製至 HardwareBuffer,Android 14 推出了 HardwareBufferRenderer。如果您的用途涉及透過 SurfaceControl 與系統合成器通訊,以便繪製低延遲畫面,這個 API 就特別實用。