Google Play预启动报告崩溃:java.lang.NoSuchMethodError。

4

我的Google Play Pre-Launch报告出现了一些非常奇怪的行为,而且这种情况只是最近才发生的,但我无法确定与我所更改的任何内容有关。 我也无法自己复现这个问题。

每个测试设备在预发布报告中都似乎失败了(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)

等一下,AndroidX爬虫怎么了?你为什么把它编辑掉了? - Alex Cohn
1
原始的堆栈跟踪来自于 Google Play 预发布报告,但是使用 retrace 和 mapping.txt 进行反混淆。我已经更新了帖子,提供了一个来自我内部测试轨道上推送的未混淆版本的堆栈跟踪。 - Mike Macpherson
3个回答

1

编辑:最初将Google Firebase BOM版本从29.0.3回滚到29.0.2可以解决我的问题,但问题又再次出现,即使排除所有Firebase组件也无法解决,因此我的原始解决方案只是一个临时措施。

我现在使用Firebase测试实验室进行运行(比推送构建到Google Play并等待一天要快得多)。Firebase测试实验室以同样的方式失败,并且速度更快(每天可以免费进行5次运行)。我现在可以看到它与R8代码混淆有关。

将minifyEnabled设置为false,它就可以正常工作;将其设置为true,它就会崩溃。

因此,它似乎与这个R8 bug相关:https://issuetracker.google.com/issues/213617215#comment22

对于我来说,我通过将以下内容添加到我的Proguard规则文件中来解决了这个问题。现在它在Firebase测试实验室中通过了测试。

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

遇到相同的问题,请重新发布工作给我! - BobTheCat

1

我按照其他答案的建议实施了Firebase BOM版本的还原,但这并没有完全解决我的问题。将另一个依赖项还原后,问题得到了解决:

崩溃版本:

implementation 'com.google.android.gms:play-services-location:19.0.1'

可运行版本:

implementation 'com.google.android.gms:play-services-location:18.0.0'

1

我不是很确定,但我认为这是Firebase测试实验室使用的机器人测试出现的问题。我还没有尝试使用他们的有仪器测试,但这是我目前能想到的唯一解释。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接