我的应用程序在启动后立即崩溃,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
将所有依赖项更新为最新的主要版本。
什么可能导致错误? 这让我头痛了好几个星期..
您可以检查的几点
谷歌服务.json。您是否添加了发布密钥的 sha256。请去玩商店选择应用完整性。复制登录(不上传)证书的 sha256 并将其添加到 firebase。下载一份新的 Google services.json 并将其添加到项目中并构建
请检查谷歌登录的实现
删除 firebase_analytics 解决了问题。
在 android/build.gradle 添加这一行
subprojects {
project.evaluationDependsOn(':app')
}
通过自定义混淆器配置,我设法让我的 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'
}
}