功能與 API 總覽

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

如需新增、修改及移除 API 的詳細清單,請參閱 API 差異比較表。如要進一步瞭解新的 API,請參閱 Android API 參考資料 - 新的 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 採用了文法轉變 API,可讓你新增對文法性別的支援,而不必重構應用程式。

地區偏好設定

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

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

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

Android 系統設定中的地區偏好設定畫面

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

無障礙設定

非線性字型縮放至 200%

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

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

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

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

如果您已使用縮放像素 (sp) 單位來定義文字大小,這些額外選項和縮放改善功能會自動套用至應用程式中的文字。然而,我們仍建議您啟用最大字型大小 (200%) 執行使用者介面測試,以確保應用程式能在不影響可用性的情況下正確套用字型大小,同時也能適應更大的字型大小。

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

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

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

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

請勿使用 sp 單位做為邊框間距或檢視畫面高度:使用非線性字型縮放 sp 維度可能會導致比例失衡,因此 4sp + 20sp 不一定會等於 24sp。

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

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

避免使用硬式編碼方程式 使用 Configuration.fontScaleDisplayMetrics.scaledDensity。 由於字型縮放功能現在不是線性方式,因此這些欄位不再具備準確性。

使用者體驗

Sharesheet 自訂動作與改善排名

Android 14 會更新系統 Sharesheet,以支援自訂應用程式動作,使用者也能取得更豐富的預覽結果。

新增自訂動作

在 Android 14 中,應用程式可將自訂動作新增至其叫用的系統 Sharesheet。如要使用 Sharesheet 自訂動作,請使用 ChooserAction.Builder 建立自訂 ChooserAction,並指定 ChooserActions 清單做為使用 Intent.createChooser 建立的 IntentIntent.EXTRA_CHOOSER_CUSTOM_ACTIONS

此圖片為應用程式上顯示的 Sharesheet,是使用者分享他人圖片的結果。Sharesheet 會顯示多個圖示,代表可與其分享該圖片的聯絡人和應用程式。

改善直接分享目標的排名

Android 14 會使用更多應用程式信號來判斷直接分享目標的排名,以便為使用者提供更實用的結果。如要為排名提供最實用的信號,當使用者傳送訊息給聯絡人時,請呼叫具備相應捷徑的 pushDynamicShortcut,以便回報該捷徑的使用率,並透過呼叫 ShortcutInfoCompat.Builder#addCapabilityBinding("actions.intent.SEND_MESSAGE"),將相應的「actions.intent.SEND_MESSAGE」能力附加至該捷徑中。

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

影片:預測返回動畫

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

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

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

應用程式商店改善項目

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 推出了具隱私保護功能的螢幕截圖偵測 API。. 此 API 可讓應用程式依個別活動登錄回呼。當使用者在具備瀏覽權限的活動中拍攝螢幕截圖時,系統會叫用這些回呼,並傳送通知給使用者。

圖像

路徑現在已可查詢及內插

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 程式庫現已推出 Alpha 版本,以便舊版 Android 也能啟用類似的 API。

核心功能

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 和/或其關係企業的商標或註冊商標。