You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用google_ml_vision进行手部检测时Android应用持续崩溃

Android端使用google_ml_vision崩溃:java.lang.NoClassDefFoundError: com.google.mlkit.vision.common.internal.Detector

我在Flutter应用中使用google_ml_vision插件实现手部检测功能,但Android端启动相机并处理图像时立即崩溃,iOS暂未测试。已尝试插件最新版本^0.0.8及旧版本^0.0.7,执行过flutter clean、flutter pub get并清除缓存重启,问题依然存在。

崩溃日志

E/AndroidRuntime(14020): Process: com.synergates.dob.digital_onboarding.js, PID: 14020
E/AndroidRuntime(14020): java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/mlkit/vision/common/internal/Detector;
E/AndroidRuntime(14020):    at com.brianmtully.flutter.plugins.googlemlvision.MlVisionHandler.handleDetection(GoogleMlVisionHandler.java:71)
E/AndroidRuntime(14020):    at com.brianmtully.flutter.plugins.googlemlvision.MlVisionHandler.onMethodCall(GoogleMlVisionHandler.java:37)
E/AndroidRuntime(14020):    at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:258)
E/AndroidRuntime(14020):    at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:295)
E/AndroidRuntime(14020):    at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:322)
E/AndroidRuntime(14020):    at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12)
E/AndroidRuntime(14020):    at android.os.Handler.handleCallback(Handler.java:942)
E/AndroidRuntime(14020):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(14020):    at android.os.Looper.loopOnce(Looper.java:240)
E/AndroidRuntime(14020):    at android.os.Looper.loop(Looper.java:351)
E/AndroidRuntime(14020):    at android.app.ActivityThread.main(ActivityThread.java:8380)
E/AndroidRuntime(14020):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(14020):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
E/AndroidRuntime(14020):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
E/AndroidRuntime(14020): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.mlkit.vision.common.internal.Detector" on path: DexPathList[[zip file "/data/app/~~o2uTxdDT44Su9DZpXChTgQ==/com.synergates.dob.digital_onboarding.js-EbcLJllgqv4-YKz7ykAixA==/base.apk"],nativeLibraryDirectories=[/data/app/~~o2uTxdDT44Su9DZpXChTgQ==/com.synergates.dob.digital_onboarding.js-EbcLJllgqv4-YKz7ykAixA==/lib/arm64, /data/app/~~o2uTxdDT44Su9DZpXChTgQ==/com.synergates.dob.digital_onboarding.js-EbcLJllgqv4-YKz7ykAixA==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
E/AndroidRuntime(14020):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
E/AndroidRuntime(14020):    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
E/AndroidRuntime(14020):    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
E/AndroidRuntime(14020):    ... 14 more
I/Process (14020): Sending signal. PID: 14020 SIG: 9
Lost connection to device.

测试代码

Future<void> _captureImage() async {
    _cameraController?.setFocusMode(FocusMode.auto);
    capturedImage = await _cameraController!.takePicture();
    log('capturing');
    if (capturedImage != null) {
      final ImageLabeler imageLabeler = GoogleVision.instance.imageLabeler(const ImageLabelerOptions());
      final GoogleVisionImage visionImage =
          GoogleVisionImage.fromFile(File(capturedImage!.path));
      final List<ImageLabel> labels =
          await imageLabeler.processImage(visionImage);
      if (labels.isEmpty) {
        log('label not found');
        _captureImage();
      } else {
        log('label found');
        for (var value in labels) {
          log('labels $value');
        }
      }
    }
  }

也尝试过用GoogleMlVision.fromBytes处理图像流,依然崩溃。


解决方法

  1. 修复ML Kit依赖版本冲突
    错误源于插件依赖的ML Kit内部类缺失,可在android/app/build.gradle中强制指定兼容的ML Kit版本,确保和插件依赖匹配:

    dependencies {
        implementation 'com.google.mlkit:image-labeling:17.0.7'
        implementation 'com.google.mlkit:vision-common:17.3.0'
    }
    

    版本号可查看插件的android/build.gradle文件确认。

  2. 启用MultiDex
    应用方法数超限可能导致类打包异常,在android/app/build.gradle中配置:

    android {
        defaultConfig {
            multiDexEnabled true
        }
    }
    
    dependencies {
        implementation 'androidx.multidex:multidex:2.0.1'
    }
    

    若自定义了Application类,需继承MultiDexApplication,或在onCreate方法中调用MultiDex.install(this)。

  3. 替换为官方ML Kit插件
    google_ml_vision插件长期未更新(最新版本停留在2021年),建议替换为Flutter官方维护的插件:

    • 移除旧插件,在pubspec.yaml中添加:
      dependencies:
        google_mlkit_hand_detection: ^0.10.0
      
    • 按新插件文档修改代码,官方插件适配最新ML Kit和Flutter版本,稳定性更强。
  4. 彻底清理重建
    执行以下命令完成深度清理:

    flutter clean
    rm -rf android/.gradle
    rm -rf ~/.gradle/caches
    flutter pub get
    flutter run --clean
    

内容的提问来源于stack exchange,提问作者Areeba Jawed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 13:46:14