Search code examples
androidadmobandroid-r8android-gradle-plugin-8.0

Admob crash on initialization with "VerifyError" after upgrading to AGP 8


Updated to AGP 8 recently. I tested a release build on all my test devices prior to releasing to play store. Once released there, I am getting reports that a lot of users are crashing on app launch due in MobileAds.initialize() due to a VerifierError. I am unable to reproduce this crash on my end with my test devices using the play store build. I suspect this has something to do with R8 fullmode.

Caused by java.lang.VerifyError: Verifier rejected class com.google.android.gms.internal.ads.n5: void com.google.android.gms.internal.ads.n5.run() failed to verify: void com.google.android.gms.internal.ads.n5.run(): [0x1CC] register v0 has type Reference: org.json.JSONException but expected Reference: java.lang.RuntimeException (declaration of 'com.google.android.gms.internal.ads.n5' appears in /data/app/~~-HTkGgTIIyFu3bol3jx5Kg==/com.ggstudios.lolcatalyst-2tQJ9j60maqX7qzcVkkobg==/base.apk)
       at com.google.android.gms.internal.ads.zzfus.<clinit>(com.google.android.gms:play-services-ads@@22.0.0)
       at com.google.android.gms.internal.ads.zzfvj.<init>(com.google.android.gms:play-services-ads@@22.0.0:2)
       at com.google.android.gms.internal.ads.zzfvj.zzf(zzfvj.java:1)
       at com.google.android.gms.internal.ads.zzftc.newTaskFor(com.google.android.gms:play-services-ads@@22.0.0:1)
       at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:117)
       at com.google.android.gms.internal.ads.zzftc.zza(com.google.android.gms:play-services-ads@@22.0.0)
       at com.google.android.gms.ads.internal.util.zzj.zzr(com.google.android.gms:play-services-ads@@22.0.0:4)
       at com.google.android.gms.internal.ads.zzbyj.zzs(com.google.android.gms:play-services-ads@@22.0.0:3)
       at com.google.android.gms.internal.ads.zzcgd.zzC(com.google.android.gms:play-services-ads@@22.0.0:9)
       at com.google.android.gms.internal.ads.zzcgd.zza(com.google.android.gms:play-services-ads@@22.0.0:1)
       at com.google.android.gms.ads.internal.ClientApi.zzg(com.google.android.gms:play-services-ads@@22.0.0:2)
       at com.google.android.gms.ads.internal.client.zzaq.zzb(com.google.android.gms:play-services-ads-lite@@22.0.0:2)
       at com.google.android.gms.ads.internal.client.zzax.zze(com.google.android.gms:play-services-ads-lite@@22.0.0:1)
       at com.google.android.gms.ads.internal.client.zzax.zzd(com.google.android.gms:play-services-ads-lite@@22.0.0:9)
       at com.google.android.gms.ads.internal.client.zzej.zzz(com.google.android.gms:play-services-ads-lite@@22.0.0:3)
       at com.google.android.gms.ads.internal.client.zzej.zzm(zzej.java:8)
       at com.google.android.gms.ads.MobileAds.initialize(com.google.android.gms:play-services-ads-lite@@22.0.0:3)
       at com.ggstudios.lolcatalyst.MainApplication.onCreate(MainApplication.kt:142)
       at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1192)
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6712)
       at android.app.ActivityThread.access$1300(ActivityThread.java:237)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:223)
       at android.app.ActivityThread.main(ActivityThread.java:7656)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
    ```

Solution

  • I was able to reproduce the crash finally by installing the play store build onto an Android emulator. I have a workaround which appears to fix the crash by keeping certain classes in the proguard rules.

    In proguard-rules.pro I added

    ### Work around admob crash. Only reproduced on release APK on emulator or certain devices
    -keep class com.google.android.gms.internal.ads.** { *; }
    ### End workaround