赞
踩
背景,Flutter作为module与Android项目混合,调试debug时一切正常,但是打出来的release包已启动就报错:
错误一:[ERROR:flutter/runtime/dart_vm_data.cc(18)] VM snapshot invalid and could not be inferred from settings.
[ERROR:flutter/runtime/dart_vm.cc(268)] Could not set up VM data to bootstrap the VM from.
[ERROR:flutter/runtime/dart_vm_lifecycle.cc(84)] Could not create Dart VM instance.
[FATAL:flutter/shell/common/shell.cc(143)] Check failed: vm. Must be able to initialize the VM.
错误二: 没有具体的日志,大概就是
solib build id:
/data/app/com.yxf.mobile-LYvo4mC8VEz11R3QnJxbOA==/lib/arm64/libflutter.so: 91b9cc82e8c248be92d8cfbd42eb1c0ec397169a
/data/app/com.yxf.mobile-LYvo4mC8VEz11R3QnJxbOA==/lib/arm64/libgnustl_shared.so: 465e2234bb95b503f19d1f25a97d5b95eb78ae39
/data/app/com.yxf.mobile-LYvo4mC8VEz11R3QnJxbOA==/lib/arm64/libBaiduMapSDK_base_v7_1_0.so: e6b58a06646932d37998d058d13872c2d19f802d
/data/app/com.yxf.mobile-LYvo4mC8VEz11R3QnJxbOA==/lib/arm64/libcrashsdk.so: 64bd42b3f1e64c2a85a4a54a09a80d19adf6b132
/data/app/com.yxf.mobile-LYvo4mC8VEz11R3QnJxbOA==/lib/arm64/libBugly_Native.so: 050b0184802df0fbd6eeec74f7e04a368993a0b9
/data/app/com.yxf.mobile-LYvo4mC8VEz11R3QnJxbOA==/lib/arm64/libmmkv.so: e032a6cfef2bb0219fced16584f07469994862b7
[DEBUG] opened fd: 122
[DEBUG] dump jni internal: 122
[DEBUG] err: 0x77290729d0
[DEBUG] Func Env: 0x7726cffb24, VM: 0x7726ce5e74
global reference table dump:
546: 0x13420548 java.lang.Class<io.flutter.embedding.engine.FlutterJNI>
545: 0x13420548 java.lang.Class<io.flutter.embedding.engine.FlutterJNI>
544: 0x13420548 java.lang.Class<io.flutter.embedding.engine.FlutterJNI>
错误一:测试Demo所产生,在Application的onCreate中初始化了FlutterEngine,所以报错。
错误二:开发项目产生,也是在Application启动的时候初始化了FlutterEngine,导致ANR。
产生错误的直接原因:
解压debug包和release包可以发现,在release包的asset中,缺少了flutter_assets文件夹。大胆猜测是因为这里面的一些资源缺失导致release运行不正常。
在Build栏查看build日志可以发现,assembleDebug时,会执行任务copyFlutterAssetsDebug, 而在assembleRelease时也是执行任务copyFlutterAssetsDebug。这个显然有问题。
解决思路:
1.找到fluttersdk目录中flutter\packages\flutter_tools\gradle中的flutter.gradle文件查看copyFlutterAssetsDebug任务的定义。
2.发现不管是打release包还是打debug包,都是执行同样的Task,手动更改task名字(不太会改),记得备份好之前的flutter.gradle文件。想办法执行正确的copyFlutterAssetsRelease task。
3.最终还是失败了,在要放弃的时候,把备份复原,重新打包结果执行了copyFlutterAssetsRelease 任务,然后打出来的包在初始化flutterEngine的时候也没有崩溃,可以正常运行。 尴尬。。。
这个主要是记录一下原因,遇到了针对原因去解决就行。
产生这个的原因推测:使用了友盟多渠道打包,建议关掉多渠道打包。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。