(Flutter) 由 java.lang.NoSuchMethodException (Crashlytics) 引起

问题描述 投票:0回答:4

我的应用程序在启动后立即崩溃,Crashlytics 显示了这个堆栈:

Fatal Exception: java.lang.ExceptionInInitializerError

keyboard_arrow_up
com.google.android.gms.measurement.internal.zzij.<init> (zzij.java:34)
com.google.android.gms.measurement.internal.zzge.<init> (zzge.java:3)
com.google.android.gms.measurement.internal.zzge.zzp (zzge.java:4)
com.google.android.gms.measurement.internal.AppMeasurementDynamiteService.initialize (AppMeasurementDynamiteService.java:2)
com.google.android.gms.internal.measurement.zzcx.zza (zzcx.java:4)
com.google.android.gms.internal.measurement.zzdt.run (zzdt.java:12)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
java.lang.Thread.run (Thread.java:923)

Caused by java.lang.RuntimeException
java.lang.NoSuchMethodException: com.google.android.gms.measurement.internal.i.values []

keyboard_arrow_up
java.lang.Enum.enumValues (Enum.java:270)
java.lang.Enum.access$000 (Enum.java:61)
java.lang.Enum$1.create (Enum.java:277)
java.lang.Enum$1.create (Enum.java:275)
libcore.util.BasicLruCache.get (BasicLruCache.java:63)
java.lang.Enum.getSharedConstants (Enum.java:289)
java.lang.Class.getEnumConstantsShared (Class.java:2428)
java.util.EnumMap.getKeyUniverse (EnumMap.java:755)
java.util.EnumMap.<init> (EnumMap.java:138)
com.google.android.gms.measurement.internal.zzai.<init> (zzai.java:7)
com.google.android.gms.measurement.internal.zzai.<clinit> (zzai.java:3)
com.google.android.gms.measurement.internal.zzij.<init> (zzij.java:34)
com.google.android.gms.measurement.internal.zzge.<init> (zzge.java:3)
com.google.android.gms.measurement.internal.zzge.zzp (zzge.java:4)
com.google.android.gms.measurement.internal.AppMeasurementDynamiteService.initialize (AppMeasurementDynamiteService.java:2)
com.google.android.gms.internal.measurement.zzcx.zza (zzcx.java:4)
com.google.android.gms.internal.measurement.zzdt.run (zzdt.java:12)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
java.lang.Thread.run (Thread.java:923)

Caused by java.lang.NoSuchMethodException
com.google.android.gms.measurement.internal.i.values []

keyboard_arrow_up
arrow_right
java.lang.Class.getMethod (Class.java:2072)
java.lang.Class.getDeclaredMethod (Class.java:2050)
java.lang.Enum.enumValues (Enum.java:267)
java.lang.Enum.access$000 (Enum.java:61)
java.lang.Enum$1.create (Enum.java:277)
java.lang.Enum$1.create (Enum.java:275)
libcore.util.BasicLruCache.get (BasicLruCache.java:63)
java.lang.Enum.getSharedConstants (Enum.java:289)
java.lang.Class.getEnumConstantsShared (Class.java:2428)
java.util.EnumMap.getKeyUniverse (EnumMap.java:755)
java.util.EnumMap.<init> (EnumMap.java:138)
com.google.android.gms.measurement.internal.zzai.<init> (zzai.java:7)
com.google.android.gms.measurement.internal.zzai.<clinit> (zzai.java:3)
com.google.android.gms.measurement.internal.zzij.<init> (zzij.java:34)
com.google.android.gms.measurement.internal.zzge.<init> (zzge.java:3)
com.google.android.gms.measurement.internal.zzge.zzp (zzge.java:4)
com.google.android.gms.measurement.internal.AppMeasurementDynamiteService.initialize (AppMeasurementDynamiteService.java:2)
com.google.android.gms.internal.measurement.zzcx.zza (zzcx.java:4)
com.google.android.gms.internal.measurement.zzdt.run (zzdt.java:12)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
java.lang.Thread.run (Thread.java:923)

flutter run
不会发生,但是当我从Google Play安装时,这种情况毫无例外地发生。

我的 pubspec.yaml:

environment:
  sdk: ">=2.17.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  flutter_staggered_grid_view: ^0.6.2
  firebase_core: ^1.21.1
  firebase_analytics: ^9.3.3
  firebase_auth: ^3.7.0
  cloud_firestore: ^3.4.6
  firebase_storage: ^10.3.7
  google_sign_in: ^5.1.0
  sign_in_with_apple: ^4.1.0
  crypto: ^3.0.1
  url_launcher: ^6.0.12
  image_picker: ^0.8.4
  cached_network_image: ^3.2.0
  pull_to_refresh: ^2.0.0
  intl: ^0.17.0
  flutter_image_compress: ^1.1.0
  flutter_launcher_icons: ^0.10.0
  transparent_image: ^2.0.0
  cupertino_icons: ^1.0.2
  zoom_widget: ^0.2.1
  advance_pdf_viewer: ^2.0.0
  permission_handler: ^10.0.0
  flutter_colorpicker: ^1.0.3
  dotted_border: ^2.0.0+2
  screenshot: ^1.2.3
  image: ^3.2.0
  pdf: ^3.8.1
  printing: ^5.9.1
  share_plus: ^4.0.10
  path_provider: ^2.0.11
  file_picker: ^5.0.1
  pdf_render: ^1.1.0
  webview_flutter: ^3.0.4
  google_mobile_ads: ^2.0.1
  firebase_crashlytics: ^2.8.9

dev_dependencies:
  flutter_test:
    sdk: flutter

  flutter_lints: ^2.0.1

将所有依赖项更新为最新的主要版本。

什么可能导致错误? 这让我头痛了好几个星期..

java flutter crashlytics
4个回答
1
投票

您可以检查的几点

  1. 谷歌服务.json。您是否添加了发布密钥的 sha256。请去玩商店选择应用完整性。复制登录(不上传)证书的 sha256 并将其添加到 firebase。下载一份新的 Google services.json 并将其添加到项目中并构建

  2. 请检查谷歌登录的实现


0
投票

删除 firebase_analytics 解决了问题。


0
投票

在 android/build.gradle 添加这一行

subprojects {
    project.evaluationDependsOn(':app')
}

0
投票

通过自定义混淆器配置,我设法让我的 flutter 项目再次运行,同时仍然依赖于 firebase_analytics。

为此,将“proguard-rules.pro”文件添加到“android/app”目录并添加以下规则

-保持类 com.google.android.gms.measurement.internal.** { *; }

然后通过将以下行添加到“android.buildTypes.release”下的“android/app/build.gradle”来配置 gradle 以使用您的自定义 proguard 文件

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

更多背景信息:

buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.