[Unity][Android][RuntimeError] Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
[사용엔진] Unity 2020.3.37f1
-------------------------------------------------------------------------------------------
[추가]
Push 관련해서 같은 에러가 나서 확인해보니 아래 링크와 같은 처리를 요구하고 있다.
1. Android 12 이상에 대해서 PendingIntent 를 PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE 추가
2. AndroidManifest.xml SCHEDULE_EXACT_ALARM 퍼미션 추가
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
>> 1.2. 둘다 처리가 필요할 듯 하다.
[참조] https://github.com/radishmedia/react-native-push-notification/pull/19
-------------------------------------------------------------------------------------------
구글에서 API 31을 쓰라고 해서 Target API를 31로 올리고 빌드 했는데,
실행은 되지만 최신 폰(좀 안좋은 폰은 정상)에서 실행 중 아래와 같은 에러메시지를 띄우면서 크래시가 남.
----
AndroidJavaException: java.lang.IllegalArgumentException: com.xxx.xxx.xxx: 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.
java.lang.IllegalArgumentException: com.xxx.xxx.xxx: 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.
----
이리저리 찾아보니 크게 2가지 처리를 하는 것 같다.
1. AndroidManifest.xml에 exported 명시적으로 설정
2. gradle의 dependencies {}에 androidx.work:work-runtime:2.7.0 라이브러리 추가(for Java)
- 2.7.0부터 Android 12(API31)대응을 해서 2.7.0이상을 추가하면 되는 듯
- Unity는 mainTemplate.gradle의 dependencies {...}에 추가
- 라이브러리 선택 사항
= [Java] implementation 'androidx.work:work-runtime:2.7.0' // for Unity
= [Kotlin] implementation 'androidx.work:work-runtime-ktx:2.7.0
내 경우는 exported 관련은 이미 돼 있어서 아래와 같이 androidx.work:work-runtime:2.7.1(현재 기준 공식 최신버전)을 추가하고 해결 했다.
mainTemplete.gradle
dependencies{
....
implementation 'androidx.work:work-runtime:2.7.1' // for Java
....
}
[참조] https://bacassf.tistory.com/166