반응형
안드로이드 12 대응하던 중 일어난 에러에 대해 작성해보겠습니다.
안드로이드 12에서 대응해야 할 점은 크게 2가지입니다.
1. Manifest에서 exported 처리 & 외부 패키지 명시
- exported 처리는 간단합니다. Menifest에서 해당 액티비티를 호출하는 곳이 나의 앱 내부인지, 외부인지에 따라서 true, false를 적어주시면 됩니다.
- 아래 링크에서 더 자세히 볼 수 있습니다.
- https://codechacha.com/ko/android-12-intent-filter-explicit-exported/
2. Pending Intent 처리
java.lang.IllegalArgumentException: com.kakao.beauty.hairshop.sandbox: 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.
위와 같은 에러를 마주하셨다면 프로젝트 내 혹은 사용하고 있는 라이브러리에서 사용하는 PendingIntent의 옵션 중 IMMUTABLE 혹은 MUTABLE이 들어가있지 않아 빌드시 발생한 에러입니다.
해결방법
- 프로젝트 내 PendingIntent의 옵션을 성격에 따라 IMMUTABLE or MUTABLE로 옵션을 추가해주어야 합니다.
참고링크.
https://developer88.tistory.com/187
https://developer.android.com/guide/components/intents-filters#DeclareMutabilityPendingIntent
만일, PendingIntent가 IMMUTED되길 원한다면
PendingIntent pendingIntent;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
pendingIntent = PendingIntent.getActivity(this,
0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
}else {
pendingIntent = PendingIntent.getActivity(this,
0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
}
MUTED가 되길 원한다면
PendingIntent pendingIntent;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
pendingIntent = PendingIntent.getActivity(this,
0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);
}else {
pendingIntent = PendingIntent.getActivity(this,
0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
}
식으로 설정할 수 있겠습니다.
2. 사용하고 있는 라이브러리가 안드로이드 12대응을 못한 경우일 수 있습니다.
예를 들어, Kakao SDK를 v1을 사용하고 있다면
버전을 1.30.7로 올리셔야 안드로이드 12에 대응된 버전을 사용할 수 있습니다.
(참고)
https://devtalk.kakao.com/t/sdk31-pendingintent/120017/12?u=goodday904
반응형