Android 15 Targeting App
23 -> 24
Android 15로 업그레이드 해도, targetSdkVersion이 24 미만의 앱들도 모두 설치된 상태로 유지가 되긴한다.
앱 업데이트 정책 변경을 대비하여, 앱 최소 사항 공지를 미리 해줘야한다.
dataSync 6시간 제한 추가앱의 dataSync에 시간 제한 동작이 도입되었다.
시스템은 앱의 dataSync 서비스가 24시간중 총 6시간 동안 실행되도록 허용한다. 24시간이 지나면 시스템은 실행중인 서비스의 Service.onTimeout(int, int) 메서드를 호출한다. 이때 서비스는 Service.stopSelf()를 호출할 수 있는 몇초의 시간이 주어진다. Service.onTimeout()이 호출되면 서비스는 더 이상 포그라운드 서비스로 간주되지 않는다. 이때 서비스가 Service.stopSelf()를 호출하지 않으면 시스템에서 아래와 같은 내부 예외가 발생된다.
Fatal Exception: android.app.RemoteServiceException: "A foreground service of
type dataSync did not stop within its timeout: [component name]"
6시간 제한은 앱의 모든 dataSync 포그라운드 서비스에서 공유되기 때문에, 4시간 실행했으면 다음엔 2시간밖에 사용하지 못한다. 하지만 사용하자가 앱을 포그라운드로 가져오면 타이머가 재설정되고, 사용할 수 있는 시간이 다시 6시간으로 늘어난다.
이미 6시간을 모두 소진한 상태에서 다른 dataSync 포그라운드 서비스를 시작하려고 하면 오류메세지와 함께 ForegroundServiceStartNotAllowedException를 발생시킨다.
mediaProcessing해당 유형은 미디어 앱에서 오디오 파일을 다운도르한 후 재생하기전 다른 형식으로 변환해야하는 미디어 파일 트랜스코딩과 같은 작업에 적합하다.
이것도 dataSync와 동일하게 24시간중 6시간 동안만 실행할 수 있고, 호출되는 동작도 동일하다.
BOOT_COMPLETED Broadcast Receiver 제한 추가아래 포그라운드 서비스를 실행할 수 없음
위 같은 유형의 포그라운드 서비스를 실행하려고 하면 시스템에서 ForegroundServiceStartNotAllowedException를 발생시킨다.
이전엔 앱이 SYSTEM_ALERT_WINDOW 권한을 보유한 경우 앱이 현재 백그라운드에 있더라도 포그라운드 서비스를 실행할 수 있었는데, Android 15를 타겟팅하게되면 제한이 추가된다.
이제 SYSTEM_ALERT_WINDOW 권한을 가진채로 포그라운드 서비스를 시작한기 전에 TYPE_APPLICATION_OVERLAY 창을 먼저 실행하여 표시되는 오버레이 창을 만든 후 실행해야한다.
이것도 요구사항을 충족하지 않고 실행하려 하면 ForegroundServiceStartNotAllowedException이 발생한다.
View.getWindowVisibility()를 호출하여 오버레이 창이 현재 표시되는지 확인하거나 View.onWindowVisibilityChanged()를 재정의하여 가시성이 변경될 때마다 알림을 받을 수 있다.
더 이상 사용자 설정을 수정하거나 DND모드를 사용 중지하여 기기의 전역 상태 또는 방해금지 정책을 변경할 수 없다.
대신 앱은 AutomaticZenRule를 제공해야한다. 이전 전역 상태에 영향을 미쳤던 기존 API를 호출하면 암시적 AutomaticZenRule가 생성되거나 업데이트되며, API 호출 주기에 따라 켜지거나 꺼진다.
Android 15를 실행하는 기기에서 앱은 기본적으로 전체 화면으로 표시된다.
만약 전체화면이 아닌 경우 앱의 일부가 가려질 수 있으며, 이 경우 인셋을 처리해야한다.
버전별 화면이 제대로 나오는지 확인이 필요하다.
setNavigationBarColor 및 R.attr#navigationBarColor는 지원 중단되었다.setNavigationBarContrastEnforced 및 R.attr#navigationBarContrashEnforced는 더이상 동작하지 않는다.setNavigationBarColor 및 R.attr#navigationBarColor는 기본적으로 창 배경과 일치하도록 설정된다. 이 기본값이 적용되려면 창 배경이 Color Drawable이어야 한다. 이 API는 지원 중단되었지만 계속 영향을 미친다.setNavigationBarContrastEnforced 및 R.attr#navigationBarContrastEnforced는 기본적으로 true이며, 3버튼 탐색에 80% 불투명 배경을 추가한다.setStatusBarColor 및 R.attr#statusBarColor는 지원 중단되었고, Android 15에는 영향을 미치지 않는다.setStatusBarContrashEnforced 및 R.attr#statusBarContrashEnforced는 지원이 중단되긴 했지만, Android 15에 여전히 영향을 미친다.오디오 포커스를 요청하려면 최상위 앱이거나 포그라운드 서비스를 실행 중인 앱이어야 한다. 앱이 이러한 요구사항을 충족하지 않고 포커스를 요청하면 AUDIOFOCUS_REQUEST_FAILED를 반환한다.
Android 12에 처음 추가된 Spatializer 클래스를 사용하면 앱이 기기에서 사운드 공가화의 기능과 동작을 쿼리할 수 있다.
AndroidX media ExoPlayer 1.0은 기기에서 지원하는 경우 멀티채널 오디오에 기본적으로 공간 오디오를 사용 설정한다.
WebSQL을 지원하기 위한 설정인 WebSettings의 setDatabaseEnabled 및 getDatabaseEnabled 메서드는 지원 중단된다.
Android 15의 새로운 기능으로, 유저가 디바이스에 그들만의 민감한 앱들을 저장할 수 있는 분리된 공간을 만들 수 있다. 해당 앱들은 보이지 않고 추가적인 과정을 걸쳐야 접근할 수 있다.
유저가 개인 공간을 잠그면, 해당 공간에 있는 모든 앱들은 멈추고, 포그라운드나 백그라운드 활동 및 알림도 모두 제한된다.
이런 동작들은 사적 공간에 설치된 의료 앱들에 치명적이다.
따라서 위 기능들이 필요한 앱들이 해당 공간에 설치되지 않도록 사용자에게 적절한 안내를 포함해야한다.