- 개요
- 오류내용 확인
- 문제 해결방법
1. 개요
노트북을 바꾸고 나서 안드로이드 스튜디오를 받으니 새로운 SDK버전 애뮬레이터가 적용된것 같습니다.
이때문에 아래와 같은 오류가 발생하는 것 같습니다. 해결방법을 찾아보겠습니다.
안드로이드 11버전 에뮬레이터를 다운받아 실행 시 잘 나오는것을 확인했습니다.
2. 오류내용 확인
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.
타겟팅 S+(version31 이상)는 PendingIntent를 생성 시 FLAG_IMMUTABLE 또는 FLAG_MUTABLE 중 하나가 명시하는것을 요청합니다.
FLAG_IMMUTABLE를 사용하는것을 강하게 고려하시기 바랍니다. 만약 어떤 기능적으로 일부 변경이 가능한 Pendingintent에 의존하는 경우에만 FLAG_MUTABLE를 사용하시기 바랍니다. 예를들면 인라인 답장(알림창에서 바로 답장을 보내는 것)또는 버블(화면밖에 떠있는 화면)
3. 문제 해결방법
아래 오류내용를 보면 추적해야할 추측 할 수 있습니다. androidx.work.impl.. 이부분 입니다.
at android.app.PendingIntent.checkFlags(PendingIntent.java:375)
at android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:645)
at android.app.PendingIntent.getBroadcast(PendingIntent.java:632)
at androidx.work.impl.utils.ForceStopRunnable.getPendingIntent(ForceStopRunnable.java:174)
at androidx.work.impl.utils.ForceStopRunnable.isForceStopped(ForceStopRunnable.java:108)
at androidx.work.impl.utils.ForceStopRunnable.run(ForceStopRunnable.java:86)
at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:75)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:920)
최신버전에 다음 라이브러리가 적용이 되지 않아 최신 버전으로 변경해주어야 할 것 같습니다.
implementation 'androidx.work:work-runtime-ktx:2.7.1'
제 프로잭트에서 해결방법은 2가지입니다.
1. target version을 31이하로 낮추기 (저는 이방법을 사용)
31버전을 적용할 경우 대응해야할 기능이 많을 것 같아 충분한 대응 시간이 필요 할 것 같습니다.
2. androidx.work:work-runtime-ktx: 버전을 최신으로 변경하거나 사용하지 않을 경우 삭제 합니다.