일모도원(日暮途遠) 개발자

[Android 오류수정] Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent. 본문

안드로이드 개발/오류수정

[Android 오류수정] Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.

달님개발자 2023. 2. 11. 15:37

타겟을 버전 31로 올리고 구글 플레이에 올리니 아래와 같은 에러가 나왔다.

Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.

 

기존에는 work-runtime버전이 2.1.0인데 

implementation "androidx.work:work-runtime:2.1.0"

이걸 2.7.0으로 업그레이드하니 해결되었다. 되었는줄 알았다

// 자바를 쓰는 경우
implementation 'androidx.work:work-runtime:2.7.0' 

// 코틀린을 쓰는 경우
implementation 'androidx.work:work-runtime-ktx:2.7.0'

구글 설명서를 보면 아래처럼 2.7.0으로 업그레이드 하라는 말이 나온다.

참고:  WorkManager 버전 2.6.0은 Android 12(S)를 타겟팅하는 앱과 호환되지 않습니다. 대신 버전 2.7.0을 사용해야 합니다.
참고:  Android 12(S)를 타겟팅하는 앱에는 WorkManager 버전 2.7.0이 필요합니다.

앱을 출시하고 나서 세팅뷰를 열어보니 크래쉬 되어서 디버그 해보니 같은 에러메시지다. (될수있는한 FLAG_IMMUTABLE를 사용하라고 한다)

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.

 

기존 코드에 PendingIntent를 사용하는 부분이 있었는데, 아무 처리도 안해두었던 것이다.

 

기존 코드

return PendingIntent.getBroadcast(context, requestCode, intent, 0);

 

수정한 코드

return PendingIntent.getBroadcast(context, requestCode, intent, PendingIntent.FLAG_IMMUTABLE);