동작 변경사항: 모든 앱

Android 17 플랫폼에는 앱에 영향을 줄 수 있는 동작 변경사항이 있습니다. targetSdkVersion과 관계없이 Android 17에서 실행되는 모든 앱에 적용되는 동작 변경사항은 다음과 같습니다. 이러한 변경사항을 적절히 지원해야 하는 경우 앱을 테스트한 후 필요에 따라 수정해야 합니다.

또한 Android 17을 타겟팅하는 앱에만 영향을 주는 동작 변경사항 목록을 검토해야 합니다.

보안

Android 17에는 기기 및 앱 보안이 다음과 같이 개선되었습니다.

usesClearTraffic 지원 중단 계획

我们计划在未来的版本中弃用 usesCleartextTraffic 元素。需要建立未加密 (HTTP) 连接的应用应迁移为使用网络安全配置文件,该文件可让您指定应用需要与哪些网域建立明文连接。

请注意,网络安全配置文件仅在 API 级别 24 及更高版本上受支持。如果应用的最低 API 级别低于 24,您应执行以下两项操作:

  • usesCleartextTraffic 属性设置为 true
  • 使用网络配置文件

如果应用的最低 API 级别为 24 或更高,您可以使用网络配置文件,而无需设置 usesCleartextTraffic

암시적 URI 부여 제한

目前,如果应用启动的 intent 包含具有操作 SendSendMultipleImageCapture 的 URI,系统会自动向目标应用授予读取和写入 URI 权限。我们计划在 Android 18 中更改此行为。因此,我们建议应用明确授予相关的 URI 权限,而不是依赖系统来授予这些权限。

앱별 키 저장소 제한

Android 키 저장소는 기기의 모든 앱을 위한 공유 리소스이므로 앱은 Android 키 저장소에 과도한 수의 키를 만들지 않아야 합니다. Android 17부터 시스템은 앱이 소유할 수 있는 키 수에 제한을 적용합니다. 제한은 Android 17 (API 수준 37) 이상을 타겟팅하는 비시스템 앱의 경우 50,000개의 키이고 다른 모든 앱의 경우 200,000개의 키입니다. 시스템 앱은 타겟팅하는 API 수준과 관계없이 200,000개의 키로 제한됩니다.

앱이 제한을 초과하는 키를 만들려고 하면 생성에 실패합니다. KeyStoreException 예외의 메시지 문자열에는 키 제한에 관한 정보가 포함되어 있습니다. 앱이 예외에서 getNumericErrorCode()를 호출하면 반환 값은 앱이 타겟팅하는 API 수준에 따라 달라집니다.

  • Android 17 (API 수준 37) 이상을 타겟팅하는 앱: getNumericErrorCode()는 새 ERROR_TOO_MANY_KEYS 값을 반환합니다.
  • 다른 모든 앱: getNumericErrorCode()ERROR_INCORRECT_USAGE를 반환합니다.

사용자 환경 및 시스템 UI

Android 17에는 더 일관되고 직관적인 사용자 환경을 만들기 위한 다음 변경사항이 포함되어 있습니다.

회전 후 기본 IME 공개 상태 복원

Beginning with Android 17, when the device's configuration changes (for example, through rotation), and this is not handled by the app itself, the previous IME visibility is not restored.

If your app undergoes a configuration change that it does not handle, and the app needs the keyboard to be visible after the change, you must explicitly request this. You can make this request in one of the following ways:

  • Set the android:windowSoftInputMode attribute to stateAlwaysVisible.
  • Programmatically request the soft keyboard in your activity's onCreate() method, or add the onConfigurationChanged() method.

사람의 입력

Android 17에는 앱이 키보드, 터치패드와 같은 사람 입력 기기와 상호작용하는 방식에 영향을 미치는 다음과 같은 변경사항이 포함되어 있습니다.

터치패드는 포인터 캡처 중에 기본적으로 상대 이벤트를 제공합니다.

从 Android 17 开始,如果应用使用 View.requestPointerCapture() 请求捕获指针,并且用户使用触控板,系统会识别用户触摸操作产生的指针移动和滚动手势,并以与捕获的鼠标产生的指针和滚轮移动相同的方式将这些信息报告给应用。在大多数情况下,这使得支持捕获鼠标的应用无需为触控板添加特殊的处理逻辑。如需了解详情,请参阅 View.POINTER_CAPTURE_MODE_RELATIVE 的文档。

以前,系统不会尝试识别触控板的手势,而是以类似于触摸屏触摸的格式将原始的绝对手指位置传递给应用。如果应用仍需要此绝对数据,则应改为使用 View.POINTER_CAPTURE_MODE_ABSOLUTE 调用新的 View.requestPointerCapture(int) 方法。

미디어

Android 17에는 미디어 동작이 다음과 같이 변경되었습니다.

백그라운드 오디오 강화

Android 17부터 오디오 프레임워크는 오디오 재생, 오디오 포커스 요청, 볼륨 변경 API를 비롯한 백그라운드 오디오 상호작용에 관한 제한사항을 적용하여 이러한 변경사항이 사용자에 의해 의도적으로 시작되도록 합니다.

앱이 유효한 수명 주기에 있지 않은 동안 오디오 API를 호출하려고 하면 예외를 발생시키거나 실패 메시지를 제공하지 않고 오디오 재생 및 볼륨 변경 API가 자동으로 실패합니다. 오디오 포커스 API가 결과 코드 AUDIOFOCUS_REQUEST_FAILED로 실패합니다.

완화 전략을 비롯한 자세한 내용은 백그라운드 오디오 강화를 참고하세요.