구글 AdMob관련 에러
AdMob 라이브러리를 포함한 상태로 컴파일 후 앱 실행 시 런타임 에러가 발생하는 경우가 있습니다.
이와 관련한 증상 및 해결방법 입니다.
AdMob 라이브러리를 추가 후 Target Version을 SDK 31 이상으로 설정 후 앱을 런타임 실행하면 아래와 같은 에러로그를 볼 수 있습니다.
이에 대한 내용은 PendingIntent FLAG로 `FLAG_IMMUTABLE` 또는 `FLAG_MUTABLE`을 지정해줘야 한다는 내용인데,
AdMob 20.4.0 버전 릴리즈를 보면 이와 관련한 버그 픽스 방법이 기재되어있습니다.
https://developers.google.com/admob/android/rel-notes
This release and all previous versions require an explicit dependency on androidx.work:work-runtime:2.7.0 to fix a bug causing app crashes on Android S with the following stack trace:
Fatal Exception: java.lang.IllegalArgumentException:
com.mycompany.myapp: Targeting S+ (version 10000 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.
at android.app.PendingIntent.checkFlags(PendingIntent.java:386)
at android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:657)
at android.app.PendingIntent.getBroadcast(PendingIntent.java:644)
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)
Gradle에 종속선 선언 시
com.google.android.gms:play-services-ads
해당 라이브러리에 Constraints on transitive dependencies(전이적 종속성에 대한 제약)을 추가하여, 올바른 종속성을 가질 수 있도록 해주어야 합니다.
Kotlin-DSL 기준으로 설명된 글이 잘 없기에 함께 첨부합니다.
Gradle(Groovy)
dependencies {
implementation 'com.google.android.gms:play-services-ads:20.4.0'
// For apps targeting Android 12, add WorkManager dependency.
constraints {
implementation('androidx.work:work-runtime:2.7.0') {
because '''androidx.work:work-runtime:2.1.0 pulled from
play-services-ads has a bug using PendingIntent without
FLAG_IMMUTABLE or FLAG_MUTABLE and will fail in Apps
targeting S+.'''
}
}
}
Gradle(Kotlin-DSL)
implementation("com.google.android.gms:play-services-ads:20.4.0")
constraints{
implementation("androidx.work:work-runtime:2.7.0") {
because("""androidx.work:work-runtime:2.1.0 pulled from
play-services-ads has a bug using PendingIntent without
FLAG_IMMUTABLE or FLAG_MUTABLE and will fail in Apps
targeting S+.""")
}
}
ⓒ 굿햄 2022. daryeou@gmail.com all rights reserved.
'Android > Error Report' 카테고리의 다른 글
[Gradle] Kotlin Java toolchains(툴체인) 관련 오류 해결 방법, with AGP 8.1 (4) | 2023.04.06 |
---|---|
[Android] Kotlin android extensions에서 View binding으로 전환 (1) | 2023.03.08 |
[Gradle] AGP 8.0에서 BuildConfig 사용 시 에러 (2) | 2023.03.07 |
Gradle 의존성 관련 에러 해결방법 (0) | 2022.05.16 |
댓글