Недавно обновился до 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)
```
Наконец, мне удалось воспроизвести сбой, установив сборку игрового магазина на эмулятор 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
, тогда мы можем начать оттуда.