现在已经有很多 Flutter 混合开发的资料了,取其精华,实际操作之后还是会有很多问题,下面记录一下自己在现有项目中集成 Flutter 时遇到的一些问题:
1、Invoke-customs are only supported starting with Android O (--min-api 26)
说是最低支持SKD Android O (api 26),不能因为集成一个 Flutter ,老版本都不支持了吧。也是不能够!只要在 app - build.gralde 的 android { }
下 加上
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
即可,其实官方文档已经有明确说明!~
2、dalvik.system.PathClassLoader....couldn't find "libflutter.so
运行项目,直接崩溃。主要是 没有找到 armeabi-v7a 下的 libflutter.so。还是在 app - build.gralde 的 defaultConfig { }
和 buildTypes { release { } debug { } }
下添加
ndk {
abiFilters 'armeabi-v7a'
}
3、多渠道——VM snapshot must be valid.Check failed: vm. Must be able to initialize the VM
项目有多渠道的话,一般在打包的时候会遇到上面的问题。解决办法是在 Flutter - build.gralde
下也同样加上多渠道配置
如:
flavorDimensions "default"
productFlavors {
aaa { }
bbb { }
}
4、多渠道—— More than one file was found with OS independent path 'lib/armeabi-v7a/libflutter.so'
多渠道打包可能还会遇到的一个问题就是 重复导入libflutter.so
,解决办法是在 app - build.gralde 的 android { } 下 加上
packagingOptions{
pickFirst 'lib/armeabi-v7a/libflutter.so'
}
5、Release 包报错
配置都一样,有可能是 Debug 包没问题,Release 包却是报错,首先想到的可能是混淆问题,所以要在 proguard-rules.pro
中加上
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
总结
以上问题都是以官方推荐的方式出现的问题,为了不让团队每个人都安装 Flutter 环境,可以采用 引用 aar
的方式进行集成。以上的错误问题同样适用于 引用 aar
的方式。