Strongly consider using FLAG_IMMUTABLE
중간 빌드 테스트 도중 테스트용 단말기(Galaxy S21, SDK 31)에서 앱이 강제로 종료되는 현상을 겪었다.
앱 첫 진입 시 권한에 대한 동의를 진행했는데도 앱이 강제로 종료되어서 로그캣을 확인하니 다음과 같은 에러가 나왔다.
Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent. Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
android studio logcat
원인은 백그라운드, 포그라운드 만보기(Pedometer) 서비스 구현에 사용한 PendingIntent의 Flag인자가 문제였다.
해결방법은 생각보다 간단하다. 에러에서 요청하는 것처럼 PendingIntent가 사용되는 부분의 Flag인자를 FLAG_IMMUTABLE로 전달하면 된다. 나의 경우엔 Flag인자를 단순하게 0으로 사용했는데 이게 SDK 31 환경인 Galaxy S21에서 문제가 되었다.
당연히 SDK 31 이상의 테스트 환경인 동료분의 단말기에서도 문제가 생겼다.
안드로이드 작업할 때마다 느끼는 거지만 SDK 버전별로 대응하는 부분의 중요성을 느낀다.
나에게는 효과가 없었지만 의존성 업데이트와 exported 설정으로도 문제를 해결한 사례가 있다고 하니 Reference 항목을 확인하면 좋을 것 같다.