Сбой Admob при инициализации с «VerifyError» после обновления до AGP 8

Недавно обновился до AGP 8. Я протестировал сборку релиза на всех своих тестовых устройствах перед выпуском в магазин игр. После выпуска там я получаю отчеты о том, что у многих пользователей происходит сбой при запуске приложения из-за MobileAds.initialize() из-за VerifierError. Я не могу воспроизвести этот сбой на своей стороне с моими тестовыми устройствами, использующими сборку игрового магазина. Я подозреваю, что это как-то связано с полным режимом R8.

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)
    ```
0
0
130
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Наконец, мне удалось воспроизвести сбой, установив сборку игрового магазина на эмулятор Android. У меня есть обходной путь, который, по-видимому, устраняет сбой, сохраняя определенные классы в правилах proguard.

В proguard-rules.pro добавил

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

Приятно слышать, что вы нашли обходной путь. Однако, как вы упомянули, это похоже на проблему R8. Можете ли вы зарегистрировать проблему на issuetracker.google.com/issues/new?component=326788 с некоторой информацией об используемой вами версии рекламного SDK. Если возможно, также поделитесь APK с кодом, вызывающим VerificationError, тогда мы можем начать оттуда.

sgjesse 21.04.2023 09:59

Другие вопросы по теме