功能和 API 概覽
Android 13 面向開發(fā)者引入了一些出色的新功能和 API。以下幾部分內(nèi)容可幫助您了解適用于您的應(yīng)用的功能并開始使用相關(guān) API。
有關(guān)新增、修改和移除的 API 的詳細(xì)列表,請參閱 API 差異報(bào)告。如需詳細(xì)了解新的 API,請?jiān)L問 Android API 參考文檔 - 新 API 會突出顯示以方便查看。此外,如需了解平臺變更可能會在哪些方面影響您的應(yīng)用,請務(wù)必查看會影響以 Android 13 為目標(biāo)平臺的應(yīng)用和所有應(yīng)用的 Android 13 行為變更。
開發(fā)者工作效率
帶主題的應(yīng)用圖標(biāo)
用戶正在選擇啟用帶主題的應(yīng)用圖標(biāo)
從 Android 13 起,用戶可以選擇啟用帶主題的應(yīng)用圖標(biāo)。借助此功能,用戶可以調(diào)節(jié)受支持的 Android 啟動器中應(yīng)用圖標(biāo)的色調(diào),以繼承所選壁紙和其他主題的配色。
如需支持此功能,您的應(yīng)用必須提供單色應(yīng)用圖標(biāo),并通過清單中的 <adaptive-icon> 元素指向該圖標(biāo)。如果用戶在其設(shè)備上啟用了帶主題的圖標(biāo)切換開關(guān),系統(tǒng)會使用用戶所選壁紙和主題的配色來確定色調(diào)顏色,然后該顏色將用于單色應(yīng)用圖標(biāo)。
如果您的應(yīng)用未提供單色圖標(biāo),但用戶啟用了帶主題的圖標(biāo)切換開關(guān),主屏幕上將會顯示應(yīng)用圖標(biāo)的標(biāo)準(zhǔn)版本。
規(guī)格
您的單色應(yīng)用圖標(biāo)應(yīng)符合以下規(guī)范:
它應(yīng)該是 VectorDrawable。
我們建議該徽標(biāo)適合 90x90 dp 容器中的 36x36 dp 的區(qū)域內(nèi)。如果需要更大尺寸的徽標(biāo),最大可以為 60x60 dp。
我們建議您使用平面徽標(biāo);如果您的徽標(biāo)是三維的,那么您可以使用 Alpha 漸變。
大多數(shù)應(yīng)用都可以重復(fù)使用用于通知的矢量可繪制對象。
實(shí)現(xiàn)帶主題的應(yīng)用圖標(biāo)
將 monochrome android:drawable 屬性添加到 <adaptive-icon> 元素中。例如,在 res/mipmap-anydpi-v26/ic_launcher.xml 中:
<adaptive-icon >
<background android:drawable="..." />
<foreground android:drawable="..." />
<monochrome android:drawable="@drawable/myicon" />
</adaptive-icon>
在您的清單文件中,使用 android:icon 定義圖標(biāo):
<application
…
android:icon="@mipmap/ic_launcher"
…>
</application>
注意:如果清單中同時(shí)包含 android:roundIcon 和 android:icon,您必須移除對 android:roundIcon 的引用,或者在由 android:roundIcon 屬性定義的可繪制對象中提供單色圖標(biāo)。
Quick Settings Placement API
通過通知欄中的“快捷設(shè)置”,用戶可無需離開應(yīng)用上下文就能方便地更改設(shè)置或執(zhí)行快速操作。對于提供自定義圖塊的應(yīng)用,用戶可以更輕松地發(fā)現(xiàn)圖塊并將其添加到“快捷設(shè)置”。借助新的圖塊放置 API,您的應(yīng)用現(xiàn)在可以提示用戶直接將自定義圖塊添加到一組有效的快捷設(shè)置圖塊中。借助新的系統(tǒng)對話框,用戶只需一步即可不離開應(yīng)用就添加圖塊,而不必轉(zhuǎn)到“快捷設(shè)置”來添加圖塊。
為多語言用戶提供更好的支持
Android 13 引入了幾項(xiàng)功能來改進(jìn)多語言用戶的應(yīng)用體驗(yàn),具體介紹請參閱以下幾部分:
按應(yīng)用設(shè)定的語言偏好設(shè)置
在許多情況下,多語言用戶會將其系統(tǒng)語言設(shè)置為某一種語言(例如英語),但又想為特定應(yīng)用選擇其他語言(例如荷蘭語、中文或印地語)。為了幫助應(yīng)用為這些用戶提供更好的體驗(yàn),Android 13 針對支持多種語言的應(yīng)用引入了以下新功能:
-
使應(yīng)用可在運(yùn)行時(shí)設(shè)置在界面中使用其他語言的 API
使用自定義應(yīng)用內(nèi)語言選擇器的應(yīng)用應(yīng)當(dāng)使用這些新 API,以確保無論用戶通過何種方式選擇其語言偏好設(shè)置,都能獲得一致的用戶體驗(yàn)。這些新的 API 還有助于減少樣板代碼的編寫。
為了向后兼容以前的 Android 版本,我們還會從 Appcompat 1.6.0-alpha01 開始在 AndroidX 中提供這些 API。
允許用戶為每個應(yīng)用選擇首選語言的系統(tǒng)設(shè)置
不支持多種語言的應(yīng)用不受這些變更的影響。
如需了解詳情,請參閱按應(yīng)用設(shè)定的語言偏好設(shè)置。
改進(jìn)了日語文本換行
現(xiàn)在,TextView 可以按 Bunsetsu(最小自然語素單元)或短語而非字符進(jìn)行文本換行,從而使日語應(yīng)用的界面更加美觀、易讀。可以通過將 android:lineBreakWordStyle="phrase" 與 TextView 結(jié)合使用來利用此換行方式。
改進(jìn)了非拉丁字母的行高
Android 13 通過使用適合每種語言的行高,改進(jìn)了非拉丁文字(例如泰米爾語、緬甸語、泰盧固語和藏語)的顯示。新的行高可防止字符被裁剪并改進(jìn)了字符的放置。您的應(yīng)用只需要以 Android 13 為目標(biāo)平臺就可以利用這些改進(jìn)。請確保在采用新的行間距后對應(yīng)用進(jìn)行測試,因?yàn)檫@些更改可能會影響非拉丁語的界面。
文本轉(zhuǎn)換 API
使用日語和中文等語言的用戶會使用拼音輸入法,這通常會導(dǎo)致搜索以及自動填充等功能的執(zhí)行速度變慢。在 Android 13 中,應(yīng)用可以調(diào)用新的文本轉(zhuǎn)換 API,以便用戶更快、更輕松地找到所需內(nèi)容。例如,以前日語用戶在進(jìn)行搜索時(shí)需要執(zhí)行以下步驟:
- 輸入平假名作為其搜索字詞(例如地點(diǎn)或應(yīng)用名稱)的發(fā)音
- 使用鍵盤將平假名字符轉(zhuǎn)換為日語漢字
- 使用日語漢字字符重新進(jìn)行搜索
- 最后獲得搜索結(jié)果
使用新的文本轉(zhuǎn)換 API 時(shí),日語用戶可以輸入平假名,然后不經(jīng)過第 2 步和第 3 步就立即看到實(shí)時(shí)的日語漢字搜索結(jié)果。
Unicode 庫更新
Android 13 添加了一些最新改進(jìn)、修復(fù)和變更,均包含在 Unicode ICU 70、Unicode CLDR 40 和 Unicode 14.0 中。
以下是兩項(xiàng)顯著變更:
- 英語(加拿大)en?CA 和英語(菲律賓)en?PH 在無可用的翻譯資源時(shí)均使用英語(美國)en 翻譯資源,而非英語(英國)en?GB 翻譯資源。
- 針對西班牙語 es、意大利語 it、葡萄牙語 pt 和葡萄牙語(葡萄牙)pt?PT 引入了 many 復(fù)數(shù)類別。與 CLDR v38 中引入的法語類似,此類別適用于大數(shù)目。
更快斷字
斷字讓分行的文本更易于閱讀,并且有助于使界面更具自適應(yīng)性。在 Android 13 中,我們將斷字性能優(yōu)化了多達(dá) 200%,因此您現(xiàn)在可以在 TextView 中啟用斷字功能,這幾乎不影響渲染性能。如需啟用更快斷字功能,請?jiān)?setHyphenationFrequency() 中使用新的 fullFast 或 normalFast 頻率。
彩色矢量字體
COLRv1 矢量表情符號(左側(cè))和位圖表情符號(右側(cè))
Android 13 可支持呈現(xiàn) COLR 版本 1 (COLRv1) 字體,并將系統(tǒng)表情符號更新成了 COLRv1 格式。COLRv1 是一種高度緊湊的新字體格式,該字體在任意大小下都可以快速清晰地呈現(xiàn)。
對于大多數(shù)應(yīng)用,系統(tǒng)會處理所有工作,COLRv1 可以正常使用。不過,如果您的應(yīng)用使用系統(tǒng)字體來實(shí)現(xiàn)自己的文本呈現(xiàn),建議您對表情符號呈現(xiàn)進(jìn)行測試。
藍(lán)牙 LE 音頻
低功耗 (LE) 音頻是新一代無線音頻,旨在取代傳統(tǒng)藍(lán)牙并支持新的使用情形和連接拓?fù)洹Mㄟ^該技術(shù),用戶能夠與朋友和家人分享音頻內(nèi)容以及播放音頻給他們聽,也可以訂閱信息、娛樂或無障礙用途的公共廣播內(nèi)容。這項(xiàng)新技術(shù)可以確保用戶接收到高保真度的音頻,而不必犧牲電池續(xù)航時(shí)間,并且還可以在不同使用情形之間無縫切換,這是傳統(tǒng)藍(lán)牙技術(shù)無法實(shí)現(xiàn)的。Android 13 內(nèi)置對 LE 音頻的支持,因此,開發(fā)者應(yīng)該能夠在兼容設(shè)備上免費(fèi)獲取相關(guān)的新功能。
MIDI 2.0
Android 13 可支持新的 MIDI 2.0 標(biāo)準(zhǔn),包括能夠通過 USB 連接 MIDI 2.0 硬件。此新版標(biāo)準(zhǔn)有諸多優(yōu)點(diǎn),如提升控制器精度、改善對非西方地區(qū)語調(diào)的支持,以及提高使用單一音符控制器時(shí)的表現(xiàn)力。
隱私權(quán)和安全
照片選擇器
Android 13 提供了全新的照片選擇器體驗(yàn)。應(yīng)用啟動照片選擇器時(shí),用戶可選擇與應(yīng)用分享特定圖片和視頻(如個人資料照片),而不是授予應(yīng)用查看整個媒體庫的權(quán)限。
照片選擇器可為用戶提供更好的隱私保護(hù),因?yàn)槟膽?yīng)用無需聲明任何運(yùn)行時(shí)權(quán)限。此外,照片選擇器還為應(yīng)用提供內(nèi)置標(biāo)準(zhǔn)化界面,從而打造更一致的用戶體驗(yàn)。
注意:現(xiàn)在,我們推薦使用照片選擇器來訪問用戶的照片和視頻。
針對附近 Wi-Fi 設(shè)備的新運(yùn)行時(shí)權(quán)限
Android 13 在 NEARBY_DEVICES 權(quán)限組中引入了一項(xiàng)新的運(yùn)行時(shí)權(quán)限,它適用于會管理設(shè)備與附近 Wi-Fi 接入點(diǎn)連接情況的應(yīng)用。這些應(yīng)用在調(diào)用多個不同的 Wi-Fi API 時(shí)必須聲明新的權(quán)限 NEARBY_WIFI_DEVICES。此外,只要應(yīng)用不會通過 Wi-Fi API 推導(dǎo)物理位置,那么在以 Android 13 或更高版本為目標(biāo)平臺時(shí),就無需聲明 ACCESS_FINE_LOCATION 權(quán)限。
詳細(xì)了解附近的 Wi-Fi 設(shè)備權(quán)限。
可由開發(fā)者降級的權(quán)限
從 Android 13 開始,應(yīng)用可以撤消先前由系統(tǒng)或用戶授予的運(yùn)行時(shí)權(quán)限。此 API 可以幫助應(yīng)用保護(hù)用戶的隱私。
如需撤消特定運(yùn)行時(shí)權(quán)限,請將該權(quán)限的名稱傳入 revokeOwnPermissionOnKill()。如需同時(shí)撤消一組運(yùn)行時(shí)權(quán)限,請將這組權(quán)限的名稱傳入 revokeOwnPermissionsOnKill()。撤消是異步發(fā)生的,會終止與應(yīng)用的 UID 相關(guān)聯(lián)的所有進(jìn)程。
系統(tǒng)只有在安全的情況下才會觸發(fā)撤消操作。具體而言,當(dāng)有應(yīng)用組件仍在前臺運(yùn)行,或者有另一個應(yīng)用正在訪問您應(yīng)用的組件(如 content provider)時(shí),不會發(fā)生撤消。如果您想立即撤消權(quán)限,可以調(diào)用 exit()。但是,對 exit() 進(jìn)行此類調(diào)用可能會導(dǎo)致當(dāng)前正在訪問您應(yīng)用的其他應(yīng)用出現(xiàn)未定義的行為或崩潰。
注意:為了讓系統(tǒng)設(shè)置表明您的應(yīng)用不會訪問特定權(quán)限組中的數(shù)據(jù),您必須撤消該權(quán)限組中的所有權(quán)限。在這種情況下,調(diào)用 revokeOwnPermissionsOnKill() 會很有幫助。
APK 簽名方案 v3.1
Android 13 可支持 APK 簽名方案 v3.1,此方案在現(xiàn)有的 APK 簽名方案 v3 的基礎(chǔ)上進(jìn)行了改進(jìn),解決了 APK 簽名方案 v3 的一些已知問題。具體而言,v3.1 簽名方案允許應(yīng)用在單個 APK 中同時(shí)支持原始簽名者和輪替簽名者。此外,該方案還支持 SDK 版本定位功能,這會允許輪替定位到更高版本的平臺。
v3.1 簽名方案使用在 12L 或更低版本中無法識別的新分塊 ID。因此,平臺會應(yīng)用以下簽名者行為:
- 搭載 Android 13 的設(shè)備會使用 v3.1 分塊中的輪替簽名者。
- 搭載舊版 Android 的設(shè)備會忽略輪替簽名者,而使用 v3.0 分塊中的原始簽名者。
尚未輪替其簽名密鑰的應(yīng)用無需執(zhí)行任何其他操作。每當(dāng)這些應(yīng)用選擇輪替時(shí),系統(tǒng)都會默認(rèn)應(yīng)用新的 v3.1 簽名方案。
已經(jīng)輪替并希望繼續(xù)使用 v3.0 簽名分塊中的輪替簽名密鑰的應(yīng)用需要更新其 apksigner 調(diào)用:
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 或更低的值。
圖形
可編程的著色器
改寫自此 GLSL 著色器的 AGSL 動畫著色器。
Android 13 添加了對可編程 RuntimeShader 對象的支持,其行為是使用 Android 圖形著色語言 (AGSL) 定義的。AGSL 與 GLSL 共用大部分語法,但可用于 Android 渲染引擎中以自定義 Android 畫布中的繪制行為以及過濾 View 內(nèi)容。Android 在內(nèi)部使用這些著色器來實(shí)現(xiàn)漣漪效果、模糊以及拉伸滾動,并且 Android 13 讓您能為應(yīng)用制作類似的高級效果。
核心功能
OpenJDK 11 更新
Android 13 開始刷新 Android 的核心庫,以與 OpenJDK 11 LTS 版本保持一致,并增添了適合應(yīng)用和平臺開發(fā)者的庫更新和 Java 11 語言支持。Android 13 中引入的核心庫變更還可以通過 Google Play 系統(tǒng)更新到 ART Mainline 模塊,供 Android 12 設(shè)備使用。
Android 13 包含對核心庫的以下更改:
支持將 var 關(guān)鍵字用于局部變量,以及用作參數(shù) lambda。
-
String 類中的新方法:
- isBlank()
- lines()
- repeat()
- strip()
- stripLeading()
- stripTrailing()
支持 Collection.toArray(IntFunction),以便更輕松地使集合適應(yīng)數(shù)組。
支持 java.util 類 Optional、OptionalDouble、OptionalInt 和 OptionalLong 中的 ifPresentOrElse()、isEmpty()、orElseThrow() 和 stream()。
擴(kuò)展了對 SocketOptions 的支持,包括重復(fù)使用套接字。
NullReader、NullWriter、InputStream、OutputStream 和 transferTo()Reader 功能,用于將讀取的字符傳輸給 Writer。
添加了使用 Charsets 進(jìn)行網(wǎng)址編碼和解碼的功能。
適用于 FileReader、FileWriter、PrintStream 和 PrintWriter 的 Charset 功能。
為 ByteArrayInput 或 OutputStream 以及 Input 或 OutputStream 新增了 transferTo()、readNBytes()、readAllBytes() 和 writeBytes() 函數(shù)。
對 java.lang.invoke.VarHandle 的運(yùn)行時(shí)和編譯器支持。
在內(nèi)部使用 VarHandle 將 java.util.concurrent 更新到 OpenJDK 11 API。
Java 和 OpenJDK 是 Oracle 及/或其關(guān)聯(lián)公司的商標(biāo)或注冊商標(biāo)。