flutterdartflutter-dependenciesgoogle-mlkit

App keeps crashing while using google_ml_vision


I am using google_ml_vision in my app where I need to detect hand but my app keeps crashing on android. I haven't tested for IOS yet. I have tried it with the latest version (google_ml_vision: ^0.0.8) and with an older version (google_ml_vision: ^0.0.7) . Following is the logs.

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.

This is my code where I am using the package:

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');
        }
      }
    }
  }

I have tried using different versions and image streaming with GoogleMlVision.fromBytes but my app still crashes as soon as the camera screen launches and it starts processing the image.

I already tried

flutter clean
flutter pub get

and invalidate cache and restart.


Solution

  • implementation 'com.google.android.gms:play-services-mlkit-vision:20.0.0'
    implementation 'com.google.android.gms:play-services-mlkit-common:20.0.0'
    implementation platform('com.google.firebase:firebase-bom:29.0.0')
    

    add these three dependencies in app build.gradle