由于缺少方法(在com.google.android.apps.mtaas.crawler-1/base.apk中),导致预启动报告失败。

16

最近我的应用开始在预启动报告中包含奇怪的错误消息(在上传到Play商店后自动生成)。

这些报告包含以下异常:

Exception java.lang.NoSuchMethodError: No interface method a(Landroid/arch/lifecycle/e;Landroid/arch/lifecycle/b$a;)V in class Landroid/arch/lifecycle/GenericLifecycleObserver; or its super classes (declaration of 'android.arch.lifecycle.GenericLifecycleObserver' appears in /data/app/com.google.android.apps.mtaas.crawler-1/base.apk)
android.arch.lifecycle.f$a.a (f.java:326)
android.arch.lifecycle.f.a (f.java:159)
com.firebase.ui.database.FirebaseRecyclerAdapter.<init> (FirebaseRecyclerAdapter.java:40)

并且:

Exception java.lang.NoSuchMethodError: No static method a(Landroid/app/Activity;)V in class Landroid/arch/lifecycle/ReportFragment; or its super classes (declaration of 'android.arch.lifecycle.ReportFragment' appears in /data/app/com.google.android.apps.mtaas.crawler-1/base.apk)
android.arch.lifecycle.LifecycleDispatcher$DispatcherActivityCallback.onActivityCreated (LifecycleDispatcher.java:77)
android.app.Application.dispatchActivityCreated (Application.java:219)
android.app.Activity.onCreate (Activity.java:1040)
android.support.v4.app.SupportActivity.onCreate (SupportActivity.java:66)
android.support.v4.app.FragmentActivity.onCreate (FragmentActivity.java:285)
android.support.v7.app.AppCompatActivity.onCreate (AppCompatActivity.java:84)

并且:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.arch.core.internal.SafeIterableMap.size()' on a null object reference
    at android.arch.lifecycle.LifecycleRegistry.getObserverCount(LifecycleRegistry.java:204)
    at android.arch.lifecycle.ProcessLifecycleOwner.b(ProcessLifecycleOwner.java:154)
    at android.arch.lifecycle.ProcessLifecycleOwner.a(ProcessLifecycleOwner.java:100)
    at android.arch.lifecycle.LifecycleRuntimeTrojanProvider.onCreate(LifecycleRuntimeTrojanProvider.java:36)
    at android.content.ContentProvider.attachInfo(ContentProvider.java:1751)
    at android.content.ContentProvider.attachInfo(ContentProvider.java:1726)
    at android.app.ActivityThread.installProvider(ActivityThread.java:6031)
    ... 10 more

奇怪的是,我的已发布应用在真实设备上似乎运行良好(异常仅出现在预启动测试期间)。

我尝试还原自上次构建以来执行的所有(重要)更改:从API 26回退到API 27,使用旧版本的支持库,去除D8等,但迄今为止没有成功:在进行的9个测试中只有1个或2个成功,其余的都是这种类型的错误。

我可以做些什么来解决这个问题?


4
可以确认。我在发布到测试渠道时遇到了同样的问题。 - Michał Tajchert
@MichałTajchert 这些问题是在你这边做了什么更改后出现的吗?如果是,你做了哪些更改呢? - Peter
当我启动新的测试版时,我看到了同样的事情。 - Bernd Kampl
1
这些都是小问题,构建之间没有改变 Firebase/Google Play 服务的版本或其他任何内容。 - Michał Tajchert
2个回答

7

刚刚从Google Play开发者支持获得了答复,他们正在研究这个问题。

在解决问题之前,您可以通过选择退出新发布的版本来返回到爬虫的以前版本,作为一种解决方法。

以下是如何选择退出:

  • 登入Play控制台。
  • 选择一个应用程序。
  • 选择发布管理>预发行报告>设置。在“预发行报告版本”部分,将Opt-out切换向右移动,直到它变为蓝色。

之后,启动报告将再次正确显示。

PS-这将禁用Google Play进行的默认测试,并且您可能会错过其他原因导致的任何错误。因此,请确保在发布到生产环境之前实施自己的测试。


@SaswatAnand 很不幸,“使用新的爬虫重新签名”应用程序仍然无法正常工作。 今天我遇到了同样的错误,由爬虫注入的重复类引起:“在/data/app/com.google.android.apps.mtaas.crawler-1/base.apk和/data/app/org.andstatus.app-1/base.apk中检查oat文件时发现重复类'Ljunit/framework/Assert;'” 已经发送报告。 - yvolk
@yvolk 感谢您的报告。是的,爬虫似乎确实存在一个错误。然而,这个错误与最初在此帖子中报告的问题不同。我会尽快调查它。 - Saswat Anand
1
@SaswatAnand 我现在使用gson遇到了这个问题: 07-24 12:14:08.434: W/zygote64(8922): Found duplicated class when checking oat files: 'Lcom/google/gson/a;' in /data/app/com.google.android.apps.mtaas.crawler-1A7hyrp7jxNTXABLVGobWw==/base.apk and /data/app/com.nomorobo-Uda3trOXwtXakvbS0uwG2Q==/base.apk 导致异常:java.lang.IllegalAccessError: Illegal class access但奇怪的是,这只会在Pixel上的Android 8.0上发生。 - bladerunner
1
@SaswatAnand 当我在Pre-launch爬虫上运行测试时,Gson库中出现了ClassCastException和NoSuchMethodError。在真实设备上运行正常。在8/9个虚拟设备上崩溃。 - Charlie
我也从gson中得到了一些奇怪的NoSuchMethod错误。结果发现这些在我的情况中是虚假报告。我在Firebase TestLab上测试了我的应用程序在许多设备上,所有测试都通过了,但我仍然从这些设备得到崩溃报告。 - WPMed
显示剩余2条评论

0

Gson 错误是由于回归引起的。该问题已得到修复。在未来一两天内发布修复程序后,应该能按预期工作。


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