Google Play发布前崩溃报告:java.lang.NoSuchMethodError

2022-09-22 00:00:00 android google-play exoplayer androidx

在我的Google Play发布前报告中出现了一些非常奇怪的行为,这才刚刚开始发生,但我不能将其归因于我更改了什么。我自己也无法复制该问题。

在发布前的报告中,每个测试设备似乎都失败了(6/6的设备都以同样的方式失败)。无论如何在真实的设备上重复相同构建的步骤,我永远不能重新创建它。堆栈跟踪如下:

FATAL EXCEPTION: Thread-8
Process: uk.myapp.test, PID: 25312
java.lang.NoSuchMethodError: No static method createWithResource(Landroid/content/res/Resources;Ljava/lang/String;I)Landroidx/core/graphics/drawable/IconCompat; in class Landroidx/core/graphics/drawable/IconCompat; or its super classes (declaration of 'androidx.core.graphics.drawable.IconCompat' appears in base.apk)
    at androidx.core.app.NotificationCompat$Action.<init>(NotificationCompat.java:4572)
    at com.google.android.exoplayer2.ui.PlayerNotificationManager.createPlaybackActions(PlayerNotificationManager.java:1439)
    at com.google.android.exoplayer2.ui.PlayerNotificationManager.<init>(PlayerNotificationManager.java:757)
    at com.google.android.exoplayer2.ui.PlayerNotificationManager$Builder.build(PlayerNotificationManager.java:564)
    at uk.myapp.test.AudioPlayerService.onCreate(AudioPlayerService.java:96)
    at android.app.ActivityThread.handleCreateService(ActivityThread.java:3570)
    at android.app.ActivityThread.access$1300(ActivityThread.java:200)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1672)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at androidx.test.espresso.base.Interrogator.loopAndInterrogate(Interrogator.java:10)
    at androidx.test.espresso.base.UiControllerImpl.loopUntil(UiControllerImpl.java:7)
    at androidx.test.espresso.base.UiControllerImpl.loopUntil(UiControllerImpl.java:1)
    at androidx.test.espresso.base.UiControllerImpl.injectMotionEvent(UiControllerImpl.java:5)
    at androidx.test.espresso.action.MotionEvents.sendUp(MotionEvents.java:6)
    at androidx.test.espresso.action.MotionEvents.sendUp(MotionEvents.java:1)
    at androidx.test.espresso.action.Tap.sendSingleTap(Tap.java:5)
    at androidx.test.espresso.action.Tap.-$$Nest$smsendSingleTap(Unknown Source:0)
    at androidx.test.espresso.action.Tap$1.sendTap(Tap.java:1)
    at androidx.test.espresso.action.GeneralClickAction.perform(GeneralClickAction.java:4)
    at androidx.test.espresso.ViewInteraction$SingleExecutionViewAction.perform(ViewInteraction.java:2)
    at androidx.test.espresso.ViewInteraction.doPerform(ViewInteraction.java:21)
    at androidx.test.espresso.ViewInteraction.-$$Nest$mdoPerform(Unknown Source:0)
    at androidx.test.espresso.ViewInteraction$1.call(ViewInteraction.java:2)
    at androidx.test.espresso.ViewInteraction$1.call(ViewInteraction.java:1)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6718)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

解决方案

编辑:最初恢复到29.0.2版本的Google Firebase BOM(从29.0.3)为我修复了这个问题,但问题再次出现,排除所有Firebase组件并不能修复它,所以我最初的修复只是一个石膏。

我现在正在使用Firebase测试实验室进行运行(这比将版本推送到Google Play,并每次都要增加数量并等待一天)要快得多。FireBase测试实验室以同样的方式失败,而且速度更快(你每天可以免费运行5次)。我现在可以看到这与R8代码混淆有关。

将minifyEnabled设置为False,如果将其设置为True,则每次都会崩溃。

因此它似乎与R8错误有关:https://issuetracker.google.com/issues/213617215#comment22

对我来说,我已经解决了这个问题,将其添加到我的ProGuard规则文件中。它现在通过Firebase测试实验室。

-keep class androidx.core.graphics.drawable.** { *; }

相关文章