Android 13 为开发者引入了许多出色的新功能和 API。以下部分可帮助您了解应用功能并开始使用相关 API。
有关新增、修改和移除的 API 的详细列表,请阅读API 差异报告。有关新 API 的详细信息,请访问 Android API 参考 — 新 API 会突出显示以方便查看。此外,要了解平台更改可能影响您的应用的领域,请务必查看 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() 中使用 fullFast 或 normalFast 频率。
文本转换 API
说日语和中文等语言的用户使用拼音输入法,这通常会减慢搜索和自动完成等功能的速度。在 Android 13 中,应用可以调用新的文本转换 API,以便用户更快、更轻松地找到他们正在寻找的内容。以前,例如,搜索需要日本用户执行以下步骤:
- 输入平假名作为搜索词的拼音发音(例如地名或应用名称)
- 使用键盘将平假名字符转换为汉字
- 使用汉字重新搜索
- 最终获得搜索结果
使用新的文本转换 API,日本用户可以输入平假名并立即实时查看汉字搜索结果,从而跳过第 2 步和第 3 步。
非拉丁文字行高改进
Android 13 通过使用针对每种语言调整的行高来改进非拉丁文字(如泰米尔语、缅甸语、泰卢固语和藏语)的显示。新的行高可防止剪裁并改善字符定位。您的应用只需以 Android 13 为目标平台即可利用这些改进。请确保在使用新行距时测试您的应用,因为这些更改可能会影响您的非拉丁语 UI。
改进的日语文本换行
从 Android 13 开始,TextView 可以按文节(听起来自然的最小词语单位)或短语而不是按字符换行,以实现更精美、更易读的日语应用。您可以通过在 TextView 中使用 android:lineBreakWordStyle="phrase" 来利用此换行功能。
Unicode 库更新
Android 13 添加了 Unicode ICU 70、Unicode CLDR 40 和 Unicode 14.0 中包含的最新改进、修复和更改。
以下是一些值得注意的更改:
- 英语(加拿大)
en‑CA和英语(菲律宾共和国)en‑PH在没有可用的翻译资源时都使用英语(美国)en翻译资源,而不是英语(英国)en‑GB。 - 已为西班牙语
es、意大利语it、葡萄牙语pt和葡萄牙语(葡萄牙)pt‑PT引入了many复数类别。与 CLDR v38 中引入的法语类似,这用于表示大数字。
彩色矢量字体
从 Android 13 开始,系统包含对 COLR 版本 1 (COLRv1) 字体的渲染支持,并将系统表情符号更新为 COLRv1 格式。COLRv1 是一种高度紧凑的字体格式,可以快速、清晰地以任何尺寸渲染。
对于大多数应用,系统会处理所有事情,COLRv1 只是正常工作。但是,如果您的应用实现自己的文本渲染并使用系统字体,我们建议测试表情符号渲染。
要了解有关 COLRv1 的更多信息,请参阅以下资源:
快速设置放置 API
通知栏中的快速设置是用户在不离开应用上下文的情况下更改设置或执行快速操作的便捷方式。对于提供自定义图块的应用,我们让用户更容易发现并将您的图块添加到快速设置。使用新的图块放置 API,您的应用现在可以提示用户直接将您的自定义图块添加到活动的快速设置图块集中。一个新的系统对话框允许用户一步添加图块,无需离开您的应用,而无需转到快速设置添加图块。

剪贴板预览
从 Android 13 开始,当内容添加到剪贴板时,系统会显示标准视觉确认。新的确认执行以下操作:
- 确认内容已成功复制。
- 提供复制内容的预览。
此功能标准化了应用复制后显示的各种通知,并为用户提供了对其剪贴板的更多控制。有关更多信息,请访问复制和粘贴功能页面。
预测性返回手势
Android 13 为 Android 设备(如手机、大屏幕和可折叠设备)引入了预测性返回手势。支持此功能需要您更新您的应用。
要查看详细文档,请参阅更新您的应用以支持预测性返回手势。您还可以尝试我们的 Codelab。
蓝牙低功耗音频 (LE Audio)
低功耗 (LE) 音频是一种无线音频,旨在取代经典蓝牙并启用某些用例和连接拓扑。它允许用户与朋友和家人共享和广播他们的音频,或订阅公共广播以获取信息、娱乐或无障碍功能。它旨在确保用户可以接收高保真音频而不会牺牲电池寿命,并且可以在经典蓝牙无法实现的不同用例之间无缝切换。从 Android 13 开始,系统内置支持 LE 音频,因此开发者可以在兼容设备上免费获得这些功能。
MIDI 2.0
从 Android 13 开始,系统内置支持 MIDI 2.0 标准,包括通过 USB 连接 MIDI 2.0 硬件的功能。该标准提供了控制器分辨率增加、对非西方音调的更好支持以及使用逐音符控制器实现更富有表现力的演奏等功能。
启动画面效率改进
Android 13 改进了启动画面 API 中动画启动画面的效率:
系统直接从
AnimatedVectorDrawable推断动画持续时间。在 Android 13 之前,需要直接设置windowSplashScreenAnimationDuration。使用新的
windowSplashScreenBehavior属性可以更好地控制您的应用是否始终在 Android 13 及更高版本的启动画面上显示图标。
要查看详细文档,请参阅启动画面。
ART 优化
在 Android 13 (API 级别 33) 及更高版本中,ART 使原生代码之间的切换速度大大加快,JNI 调用速度现在提高了 2.5 倍。运行时引用处理也经过重新设计,使其大部分是非阻塞的,这进一步减少了卡顿。此外,您可以使用 Reference.refersTo() 公共 API 更早地回收不可达对象,并且由于优化的类和方法查找,您会注意到解释器现在更快。ART 还在安装时执行更多字节码验证,避免了运行时验证的开销,并保持应用启动时间快速。
隐私和安全
更安全地导出上下文注册的接收器
为了帮助使运行时接收器更安全,Android 13 引入了您的应用可以指定注册广播接收器是否应该导出并对设备上的其他应用可见的功能。在早期版本的 Android 上,设备上的任何应用都可以向动态注册的接收器发送不受保护的广播,除非该接收器受到签名权限的保护。
此导出配置适用于至少执行以下一项操作的应用:
- 使用 AndroidX Core 库 1.9.0 或更高版本的
ContextCompat类。 - 以 Android 13 或更高版本为目标平台。
照片选择器
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 签名方案 v3.1
Android 13 增加了对 APK 签名方案 v3.1 的支持,该方案改进了现有 APK 签名方案 v3。此方案解决了 APK 签名方案 v3 中有关轮换的一些已知问题。特别是,v3.1 签名方案支持 SDK 版本目标定位,允许轮换以平台更高版本为目标。
v3.1 签名方案使用在 12L 或更低版本上无法识别的块 ID。因此,平台会应用以下签名者行为:
- 运行 Android 13 或更高版本的设备使用 v3.1 块中的轮换签名者。
- 运行旧版本 Android 的设备会忽略轮换签名者,而是使用 v3.0 块中的原始签名者。
尚未轮换其签名密钥的应用不需要任何额外操作。只要这些应用选择轮换,系统默认会应用 v3.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 下添加了一个异常类层次结构,其中包含特定于 Android 的异常,包括 Keystore/KeyMint 错误代码,以及错误是否可重试。您还可以修改密钥生成和使用(签名、加密)的方法以抛出新异常。改进的错误报告不限于密钥生成,现在应该能为您提供重新尝试密钥生成所需的一切。
平板电脑和大屏幕支持
Android 13 在 Android 12 和 12L 功能发布中引入的平板电脑优化基础上进行了改进,包括系统 UI 优化、更好的多任务处理和改进的兼容性模式。作为测试的一部分,请确保您的应用在平板电脑和其他大屏幕设备上显示效果最佳。
有关新功能和要测试的内容的更多信息,请参阅平板电脑和大屏幕支持页面。
图形
可编程着色器
从 Android 13 开始,系统支持可编程 RuntimeShader 对象,其行为使用 Android 图形着色语言 (AGSL) 定义。AGSL 与 GLSL 共享大部分语法,但它在 Android 渲染引擎中工作,以自定义 Android 画布内的绘制以及 View 内容的过滤。Android 内部使用这些着色器来实现波纹效果、模糊和拉伸滚动。Android 13 及更高版本允许您为您的应用创建类似的进阶效果。
Choreographer 改进
Android 13 引入了 Choreographer 和 ASurfaceControl 的公共 API 方法,这些方法为应用提供有关可能帧时间线的更多信息,并为 SurfaceFlinger 添加有关帧生命周期的更多上下文。与以前类似,应用可以向 Choreographer 发布回调并接收帧时间线信息。在 Android 13 (API 级别 33) 中,Choreographer 返回多个可能的呈现时间及其对应的帧截止时间。应用可以选择呈现时间,然后通知 SurfaceFlinger 这一选择。SurfaceFlinger 然后不会尝试在所需的呈现时间之前应用事务或锁定缓冲区。
相机
HDR 视频捕获
从 Android 13 开始,Camera2 API 支持高动态范围 (HDR) 视频捕获,使您能够使用相机预览和录制 HDR 视频内容。与标准动态范围 (SDR) 相比,HDR 提供更宽的色彩范围并增加亮度分量的动态范围(从当前的 100 cd/m2 到数千 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 版本保持一致,并为应用和平台开发者提供库更新和 Java 11 语言支持。Android 13 中引入的核心库更改也将通过 Google Play 系统更新到 ART 主线模块提供给 Android 12 设备。
Android 13 包含对核心库的以下更改:
- 支持用于局部变量和作为参数 lambda 的
var关键字。 String 类中的新方法:
isBlank()lines()repeat()strip()stripLeading()stripTrailing()
支持
Collection.toArray(IntFunction),以便更轻松地将集合调整为数组。支持
java.util类Optional、OptionalDouble、OptionalInt和OptionalLong中的ifPresentOrElse()、isEmpty()、orElseThrow()和stream()。扩展支持
SocketOptions,包括套接字重用。NullReader、NullWriter、InputStream、OutputStream和transferTo()Reader功能,用于将读取的字符传输到Writer。添加了使用
Charsets进行 URL 编码和解码的功能。FileReader、FileWriter、PrintStream和PrintWriter的Charset功能。ByteArrayInput或OutputStream以及Input或OutputStream的新transferTo()、readNBytes()、readAllBytes()和writeBytes()函数。运行时和编译器支持
java.lang.invoke.VarHandle。更新
java.util.concurrent以使用内部VarHandle的 OpenJDK 11 API。
Java 和 OpenJDK 是 Oracle 和/或其关联公司的商标或注册商标。