Android应用出现FirebaseMLHandler致命异常,求解决方案
Firebase ML条码检测NoSuchFieldError异常修复方案
问题描述
运行Android应用时,Logcat重复抛出以下致命异常:
FATAL EXCEPTION: FirebaseMLHandler Process: fr.myluckyday.myverimed, PID: 15453 java.lang.NoSuchFieldError: No field zzbis of type I in class Lcom/google/firebase/ml/vision/barcode/internal/BarcodeDetectorOptionsParcel; or its superclasses (declaration of 'com.google.firebase.ml.vision.barcode.internal.BarcodeDetectorOptionsParcel' appears in /data/app/~~_BRWdWVND46UrTRPIi-iYg==/fr.myluckyday.myverimed-BB5LdJZh5-UCx0k9n3ASNw==/base.apk) at com.google.firebase.ml.vision.barcode.zzb.(com.google.firebase:firebase-ml-vision-barcode-model@@16.0.1:3) at com.google.firebase.ml.vision.barcode.BarcodeDetectorCreator.newBarcodeDetector(com.google.firebase:firebase-ml-vision-barcode-model@@16.0.1:2) at com.google.firebase.ml.vision.barcode.internal.zza.zzps(com.google.firebase:firebase-ml-vision@@24.0.1:29) at com.google.firebase.ml.vision.barcode.internal.zza.zznu(com.google.firebase:firebase-ml-vision@@24.0.1:10) at com.google.android.gms.internal.firebase_ml.zzpz.zzf(com.google.firebase:firebase-ml-common@@22.0.1:53) at com.google.android.gms.internal.firebase_ml.zzpz$zza.zznx(com.google.firebase:firebase-ml-common@@22.0.1:7) at com.google.android.gms.internal.firebase_ml.zzpz$zza.call(com.google.firebase:firebase-ml-common@@22.0.1:24) at com.google.android.gms.internal.firebase_ml.zzpf.zza(com.google.firebase:firebase-ml-common@@22.0.1:32) at com.google.android.gms.internal.firebase_ml.zzpe.run(Unknown Source:4) at android.os.Handler.handleCallback(Handler.java:958) at android.os.Handler.dispatchMessage(Handler.java:99) at com.google.android.gms.internal.firebase_ml.zze.dispatchMessage(com.google.firebase:firebase-ml-common@@22.0.1:6) at android.os.Looper.loopOnce(Looper.java:205) at android.os.Looper.loop(Looper.java:294) at android.os.HandlerThread.run(HandlerThread.java:67)
(注:Logcat中重复出现上述异常,仅PID不同,错误堆栈一致)
问题原因
该异常由Firebase ML组件版本不兼容导致:当前使用的firebase-ml-vision-barcode-model(16.0.1)与firebase-ml-vision(24.0.1)、firebase-ml-common(22.0.1)版本不匹配。旧版条码模型库尝试访问新版核心库中已移除/重命名的zzbis字段,引发反射失败。
另外,Firebase ML Vision已被官方标记为废弃,推荐迁移至ML Kit独立条码扫描库。
修复步骤
方案1:统一Firebase ML组件版本(临时方案)
若暂时不想切换库,需确保所有Firebase ML相关依赖版本匹配:
- 打开Module级别的
build.gradle文件 - 将
firebase-ml-vision-barcode-model版本升级至与firebase-ml-vision兼容的版本,示例:
implementation 'com.google.firebase:firebase-ml-vision:24.0.1' implementation 'com.google.firebase:firebase-ml-vision-barcode-model:24.0.1' implementation 'com.google.firebase:firebase-ml-common:22.0.1'
- 执行
Clean Project→Rebuild Project,清理旧构建缓存
方案2:迁移至ML Kit条码扫描(推荐)
ML Kit提供更轻量、维护更活跃的条码扫描方案,步骤如下:
- 移除旧Firebase ML Vision依赖:
// 删除以下行 implementation 'com.google.firebase:firebase-ml-vision:24.0.1' implementation 'com.google.firebase:firebase-ml-vision-barcode-model:16.0.1' implementation 'com.google.firebase:firebase-ml-common:22.0.1'
- 添加ML Kit条码扫描依赖:
implementation 'com.google.mlkit:barcode-scanning:17.2.0'
- 替换原有条码检测代码:
旧代码(Firebase ML Vision):
FirebaseVisionBarcodeDetector detector = FirebaseVision.getInstance() .getVisionBarcodeDetector(options);
新代码(ML Kit):
BarcodeScannerOptions options = new BarcodeScannerOptions.Builder() .setBarcodeFormats(Barcode.FORMAT_ALL_FORMATS) .build(); BarcodeScanner scanner = BarcodeScanning.getClient(options);
- 重新构建项目并测试功能
额外排查点
- 执行
./gradlew app:dependencies查看依赖树,排查第三方依赖是否间接引入旧版Firebase ML组件,如有则排除冲突版本 - 清理设备上的应用缓存后重新安装
内容的提问来源于stack exchange,提问作者Rasaratnam Dinesh
相关产品推荐
相关产品推荐

