Flutter Error : VM snapshot invalid and could not be inferred from settings

Viewed 3071

added flutter to my existing project as a module and getting this crash. by following this link.

2019-06-24 11:08:24.366 30834-30834/com.alarmnet.tc2 E/flutter: [ERROR:flutter/runtime/dart_vm_data.cc(19)] VM snapshot invalid and could not be inferred from settings.
2019-06-24 11:08:24.366 30834-30834/com.alarmnet.tc2 E/flutter: [ERROR:flutter/runtime/dart_vm.cc(241)] Could not setup VM data to bootstrap the VM from.
2019-06-24 11:08:24.366 30834-30834/com.alarmnet.tc2 E/flutter: [ERROR:flutter/runtime/dart_vm_lifecycle.cc(89)] Could not create Dart VM instance.
2019-06-24 11:08:24.366 30834-30834/com.alarmnet.tc2 A/flutter: [FATAL:flutter/shell/common/shell.cc(218)] Check failed: vm. Must be able to initialize the VM.
2019-06-24 11:08:24.368 30834-30834/com.alarmnet.tc2 A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 30834 (om.alarmnet.tc2)
2 Answers

Find a fix for it :

If you trying to add a flutter to your existing project as per this link

Open your Flutter SDK : FlutterSdk/flutter/packages/flutter_tools/gradle/flutter.gradle

  • open flutter.gradle in any of the editors and do the following changes

from :

   // We know that the flutter app is a subproject in another Android app when these tasks exist.
Task packageAssets = project.tasks.findByPath(":flutter:package${variant.name.capitalize()}Assets")
Task cleanPackageAssets = project.tasks.findByPath(":flutter:cleanPackage${variant.name.capitalize()}Assets")
Task copyFlutterAssetsTask = project.tasks.create(name: "copyFlutterAssets${variant.name.capitalize()}", type: Copy) {
dependsOn flutterTasks
if (packageAssets && cleanPackageAssets) {
dependsOn packageAssets
dependsOn cleanPackageAssets
into packageAssets.outputDir
} else {
dependsOn variant.mergeAssets
dependsOn "clean${variant.mergeAssets.name.capitalize()}"
into variant.mergeAssets.outputDir
}
flutterTasks.each { flutterTask ->
with flutterTask.assets
// Include the snapshots in the assets directory.
if (flutterBuildMode != 'release' || targetPlatformValue != 'android-arm-all') {
with flutterTask.snapshots
}
}
}
  if (packageAssets) {
      String mainModuleName = "app"
     try {
               String tmpModuleName = project.rootProject.ext.mainModuleName
               if (tmpModuleName != null && !tmpModuleName.empty) {
            mainModuleName = tmpModuleName
     }
   } catch (Exception e) {
   }
 Only include configurations that exist in parent project.
 Task mergeAssets = project.tasks.findByPath(":${mainModuleName}:merge${variant.name.capitalize()}Assets")
      if (mergeAssets) {
        mergeAssets.dependsOn(copyFlutterAssetsTask)
  }
} else {
  def processResources = variant.outputs.first().processResources
  processResources.dependsOn(copyFlutterAssetsTask)
 }

To :

    // We know that the flutter app is a subproject in another Android app when these tasks exist.
Task packageAssets = project.tasks.findByPath(":flutter:package${variant.name.capitalize()}Assets")
Task cleanPackageAssets = project.tasks.findByPath(":flutter:cleanPackage${variant.name.capitalize()}Assets")
Task copyFlutterAssetsTask = project.tasks.create(name: "copyFlutterAssets${variant.name.capitalize()}", type: Copy) {
dependsOn flutterTasks
if (packageAssets && cleanPackageAssets) {
dependsOn packageAssets
dependsOn cleanPackageAssets
into packageAssets.outputDir
} else {
dependsOn variant.mergeAssets
dependsOn "clean${variant.mergeAssets.name.capitalize()}"
into variant.mergeAssets.outputDir
}
flutterTasks.each { flutterTask ->
with flutterTask.assets
// Include the snapshots in the assets directory.
if (flutterBuildMode != 'release' || targetPlatformValue != 'android-arm-all') {
with flutterTask.snapshots
}
}
}
//  if (packageAssets) {
//      String mainModuleName = "app"
//      try {
//               String tmpModuleName = project.rootProject.ext.mainModuleName
//               if (tmpModuleName != null && !tmpModuleName.empty) {
//             mainModuleName = tmpModuleName
//     }
//   } catch (Exception e) {
//   }
// Only include configurations that exist in parent project.
// Task mergeAssets = project.tasks.findByPath(":${mainModuleName}:merge${variant.name.capitalize()}Assets")
//      if (mergeAssets) {
//        mergeAssets.dependsOn(copyFlutterAssetsTask)
//  }
//} else {
//  def processResources = variant.outputs.first().processResources
//  processResources.dependsOn(copyFlutterAssetsTask)
// }
def processResources = variant.outputs.first().processResources
processResources.dependsOn(copyFlutterAssetsTask)

save and follow this link

if you are added flutter in the existing app go to flutter module --> .android --> build.gradle. classpath must be same as of Android

dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2'
    }
Related