Android与Flutter混合开发打包遇到问题

背景,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
545: 0x13420548 java.lang.Class
544: 0x13420548 java.lang.Class

错误一:测试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的时候也没有崩溃,可以正常运行。  尴尬。。。

这个主要是记录一下原因,遇到了针对原因去解决就行。

产生这个的原因推测:使用了友盟多渠道打包,建议关掉多渠道打包。

你可能感兴趣的:(android,flutter)