La plataforma de Android 17 incluye cambios de comportamiento que podrían afectar tu app.
Los siguientes cambios de comportamiento se aplican a todas las apps cuando se ejecutan en Android 17,
independientemente de targetSdkVersion. Debes probar tu app y, luego, modificarla según corresponda para admitir estos cambios.
Asegúrate también de revisar la lista de cambios de comportamiento que solo afectan a las apps orientadas a Android 17.
Seguridad
Android 17 incluye las siguientes mejoras en la seguridad de los dispositivos y las apps.
Plan de baja de usesClearTraffic
我们计划在未来的版本中弃用 usesCleartextTraffic 元素。需要建立未加密 (HTTP) 连接的应用应迁移为使用网络安全配置文件,该文件可让您指定应用需要与哪些网域建立明文连接。
请注意,网络安全配置文件仅在 API 级别 24 及更高版本上受支持。如果应用的最低 API 级别低于 24,您应执行以下两项操作:
- 将
usesCleartextTraffic属性设置为true - 使用网络配置文件
如果应用的最低 API 级别为 24 或更高,您可以使用网络配置文件,而无需设置 usesCleartextTraffic。
Restringe los otorgamientos implícitos de URI
目前,如果应用启动的 intent 包含具有操作 Send、SendMultiple 或 ImageCapture 的 URI,系统会自动向目标应用授予读取和写入 URI 权限。我们计划在 Android 18 中更改此行为。因此,我们建议应用明确授予相关的 URI 权限,而不是依赖系统来授予这些权限。
Límites del almacén de claves por app
应用应避免在 Android 密钥库中创建过多的密钥,因为它是设备上所有应用的共享资源。从 Android 17 开始,系统会强制限制应用可拥有的密钥数量。对于以 Android 17 或更高版本为目标平台的非系统应用,此限制为 50,000 个键;对于所有其他应用,此限制为 200,000 个键。无论系统应用以哪个 API 级别为目标,其密钥数量上限均为 20 万个。
如果应用尝试创建超出限制的密钥,则创建会失败并显示 KeyStoreException。异常的消息字符串包含有关密钥限制的信息。如果应用针对异常调用 getNumericErrorCode(),则返回值取决于应用的目标 API 级别:
- 以 Android 17 或更高版本为目标平台的应用:
getNumericErrorCode()会返回新的ERROR_TOO_MANY_KEYS值。 - 所有其他应用:
getNumericErrorCode()返回ERROR_INCORRECT_USAGE。
Experiencia del usuario y la IU del sistema
Android 17 incluye los siguientes cambios que tienen como objetivo crear una experiencia del usuario más coherente e intuitiva.
Restablece la visibilidad predeterminada del IME después de la rotación
从 Android 17 开始,当设备的配置发生变化(例如,通过旋转)且应用本身未处理此变化时,系统不会恢复之前的 IME 可见性。
如果应用经历了它无法处理的配置更改,并且应用需要在更改后显示键盘,您必须明确请求此行为。您可以通过以下方式之一提出此要求:
- 将
android:windowSoftInputMode属性设置为stateAlwaysVisible。 - 在 activity 的
onCreate()方法中以编程方式请求显示软键盘,或添加onConfigurationChanged()方法。
Intervención humana
Android 17 incluye los siguientes cambios que afectan la forma en que las apps interactúan con dispositivos de entrada humanos, como teclados y trackpads.
Los touchpads entregan eventos relativos de forma predeterminada durante la captura del puntero
A partir de Android 17, si una app solicita la captura del puntero con View.requestPointerCapture() y el usuario usa un panel táctil, el sistema reconoce los movimientos del puntero y los gestos de desplazamiento de los toques del usuario, y los informa a la app de la misma manera que los movimientos del puntero y la rueda de desplazamiento de un mouse capturado. En la mayoría de los casos, esto elimina la necesidad de que las apps que admiten ratones capturados agreguen lógica de control especial para los trackpads. Para obtener más detalles, consulta la documentación de View.POINTER_CAPTURE_MODE_RELATIVE.
Anteriormente, el sistema no intentaba reconocer los gestos del panel táctil y, en cambio, proporcionaba las ubicaciones absolutas sin procesar de los dedos a la app en un formato similar al de los toques en la pantalla táctil. Si una app aún requiere estos datos absolutos, debe llamar al nuevo método View.requestPointerCapture(int) con View.POINTER_CAPTURE_MODE_ABSOLUTE en su lugar.
Contenido multimedia
Android 17 incluye los siguientes cambios en el comportamiento de los medios.
Protección del audio en segundo plano
从 Android 17 开始,音频框架对后台音频互动(包括音频播放、音频焦点请求和音量更改 API)强制执行限制,以确保这些更改是由用户有意启动的。
如果应用尝试在应用处于无效生命周期时调用音频 API,则音频播放和音量更改 API 会静默失败,而不会抛出异常或提供失败消息。音频焦点 API 失败,结果代码为 AUDIOFOCUS_REQUEST_FAILED。
如需了解详情(包括缓解策略),请参阅后台音频强化。