Android

[Android 12] Android12 대응 에러

반응형

안드로이드 12 대응하던 중 일어난 에러에 대해 작성해보겠습니다.

안드로이드 12에서 대응해야 할 점은 크게 2가지입니다.

1. Manifest에서 exported 처리 & 외부 패키지 명시

  • exported 처리는 간단합니다. Menifest에서 해당 액티비티를 호출하는 곳이 나의 앱 내부인지, 외부인지에 따라서 true, false를 적어주시면 됩니다.

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이 들어가있지 않아 빌드시 발생한 에러입니다.

 

해결방법

 

  1. 프로젝트 내 PendingIntent의 옵션을 성격에 따라 IMMUTABLE or MUTABLE로 옵션을 추가해주어야 합니다.

참고링크.

https://developer88.tistory.com/187

 

PendingIntent 의 Flag 사용할 때 주의할 점

알람을 사용하던, Receiver를 사용하던, Service를 호출하던 우리는 PendingIntent를 사용하게 됩니다. 이 때 항상 Flag를 설정해 주게 되는데요. 오늘은 이 Flag사용시 주의할 점에 대해서 정리해 보도록

developer88.tistory.com

https://developer.android.com/guide/components/intents-filters#DeclareMutabilityPendingIntent

 

인텐트 및 인텐트 필터  |  Android 개발자  |  Android Developers

An Intent is a messaging object you can use to request an action from another app component . Although intents facilitate communication between components in several ways, there are three fundamental use cases: An Activity represents a single screen in…

developer.android.com

 

 

만일, 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 

 

안드로이드 SDK31 에서 PendingIntent 관련 이슈

@yyok9407 @hwangsugeun Android 12 대응된 v1 SDK 1.30.7 버전 배포되었습니다. 제보 감사합니다

devtalk.kakao.com

 

반응형