与之前的版本一样,Android 17 包含一些可能会影响应用的行为变更。以下行为变更仅影响以 Android 17 或更高版本为目标平台的应用。如果您的应用以 Android 17 或更高版本为目标平台,则应根据情况修改应用,以支持这些行为。
无论应用的 targetSdkVersion 为何,都请务必查看对 Android 17 上运行的所有应用都有影响的行为变更列表。
核心功能
Android 17 包含以下变更,这些变更会修改或扩展 Android 系统的各种核心功能。
MessageQueue 的新无锁实现
从 Android 17 开始,以 Android 17 或更高版本为目标平台的应用会收到 android.os.MessageQueue 的新无锁实现。新实现可提升性能并减少丢帧,但可能会破坏依赖于 MessageQueue 私有字段和方法的客户端。
如需了解详情(包括缓解策略),请参阅 MessageQueue 行为变更指南。
无障碍
Android 17 进行了以下变更,以改进无障碍功能。
复杂 IME 实体键盘输入的无障碍支持
此功能引入了新的 AccessibilityEvent 和 TextAttribute API,以增强屏幕阅读器针对 CJKV 语言输入的语音反馈。CJKV IME 应用现在可以指示在文本撰写期间是否已选择文本转换候选对象。具有编辑字段的应用可以在发送文本更改无障碍事件时指定文本更改类型。例如,应用可以指定在文本撰写期间发生了文本更改,或者文本更改是由提交导致的。这样做可让屏幕阅读器等无障碍服务根据文本修改的性质提供更精确的反馈。
应用采用量
IME 应用:在编辑字段中设置正在撰写的文本时,IME 可以使用
TextAttribute.Builder.setTextSuggestionSelected()来指明是否选择了特定的转换候选字词。具有“编辑字段”权限的应用:维护自定义
InputConnection的应用可以通过调用TextAttribute.isTextSuggestionSelected()来检索候选选择数据。然后,这些应用在调度TYPE_VIEW_TEXT_CHANGED事件时应调用AccessibilityEvent.setTextChangeTypes()。以 Android 17 为目标平台且使用标准TextView的应用默认会启用此功能。(也就是说,TextView将负责从 IME 检索数据,并在向无障碍服务发送事件时设置文本更改类型)。无障碍服务:处理
TYPE_VIEW_TEXT_CHANGED事件的无障碍服务可以调用AccessibilityEvent.getTextChangeTypes()来识别修改的性质,并相应地调整其反馈策略。
安全
Android 17 对设备和应用安全性进行了以下改进。
活动安全性
In Android 17, the platform continues its shift toward a "secure-by-default" architecture, introducing a suite of enhancements designed to mitigate high-severity exploits such as phishing, interaction hijacking, and confused deputy attacks. This update requires developers to explicitly opt in to new security standards to maintain app compatibility and user protection.
Key impacts for developers include:
- BAL hardening & improved opt-in: We are refining Background Activity
Launch (BAL) restrictions by extending protections to
IntentSender. Developers must migrate away from the legacyMODE_BACKGROUND_ACTIVITY_START_ALLOWEDconstant. Instead, you should adopt granular controls likeMODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE, which restricts activity starts to scenarios where the calling app is visible, significantly reducing the attack surface. - Adoption tools: Developers should utilize strict mode and updated lint checks to identify legacy patterns and ensure readiness for future target SDK requirements.
本地主机保护
To improve platform security and user privacy, Android 17
introduces a new install-time permission, USE_LOOPBACK_INTERFACE. This change
restricts cross-app and cross-profile communication over the loopback interface
(for example, 127.0.0.1 or ::1), which was previously implicitly allowed
with the INTERNET permission. For apps targeting
Android 17 or higher, the following rules apply:
- Mutual consent required: cross-app and cross-profile communication is
now blocked by default. For a connection to succeed, both the sending app
and the receiving app must explicitly declare the
USE_LOOPBACK_INTERFACEpermission in their manifests. - Intra-app traffic exempt: Loopback communication within the same app (intra-app communication) remains unaffected and does not require this new permission.
- Target SDK behavior:
- App targets Android 17 or higher: The permission
must be explicitly requested. If it is missing, socket operations (such
as TCP connect or UDP send) fail, typically returning an
EPERM(operation not permitted) error. - App targets API level 36 or lower: The permission is
treated as a split permission on
INTERNET. Apps targeting lower API levels are auto-granted this permission if they holdINTERNET.
- App targets Android 17 or higher: The permission
must be explicitly requested. If it is missing, socket operations (such
as TCP connect or UDP send) fail, typically returning an
- Compatibility warning: If a receiving app updates its target to Android 17 but fails to request this permission, incoming connections from other apps are be rejected, even if the sending app targets a lower API level.
默认启用 CT
如果应用以 Android 17 或更高版本为目标平台,则默认启用证书透明度 (CT)。(在 Android 16 上,CT 可用,但应用必须选择启用。)
更安全的原生 DCL - C
If your app targets Android 17 or higher, the Safer Dynamic Code Loading (DCL) protection introduced in Android 14 for DEX and JAR files now extends to native libraries.
All native files loaded using System.load() must be marked as read-only.
Otherwise, the system throws UnsatisfiedLinkError.
We recommend that apps avoid dynamically loading code whenever possible, as doing so greatly increases the risk that an app can be compromised by code injection or code tampering.
设备规格
Android 17 包含以下变更,可改善各种尺寸和外形规格的设备上的用户体验。
平台 API 变更,用于忽略大屏设备 (sw>=600dp) 上的屏幕方向、尺寸调整能力和宽高比限制
We introduced Platform API changes in Android 16 to ignore orientation, aspect ratio, and resizability restrictions on large screens (sw >= 600dp) for apps targeting API level 36 or higher. Developers have the option to opt out of these changes with SDK 36, but this opt-out will no longer be available for apps that target Android 17 or higher.
For more information, see Restrictions on orientation and resizability are ignored.