最近在学习 Flutter, 遇到一些奇奇葩葩的问题,各种买家秀与卖家秀令人懵逼,明明别人的代码也是这样写~~~~~~~~
一、Android 原生引入 flutter 的问题
其实这个引入步骤比较简单
- 创建一个 flutter module
flutter create -t module flutter_module
- 配置 android 项目
settings.gradle
文件
setBinding(new Binding([gradle: this]))
evaluate(new File(
new settingsDir.parentFile,
'flutter module的目录/.android/include_flutter.groovy'))
))
- 在
build.gradle
配置文件中添加依赖
implementation project(':flutter')
整体配置就这么简单,但是运行的时候的时候,项目挂了,出现了以下错误
错误: 程序包android.support.annotation不存在
错误: 找不到符号
符号: 类 Fragment
错误: 找不到符号
符号: 类 NonNull
位置: 类 FlutterFragment
错误: 方法不会覆盖或实现超类型的方法
错误: 找不到符号
符号: 方法 getArguments()
位置: 类 FlutterFragment
错误: 方法不会覆盖或实现超类型的方法
错误: 方法不会覆盖或实现超类型的方法
查看编译后的源码,确实 flutter_module 中一些依赖包不存在
google 一番之后发现是 Android 包管理机制的问题,如果我们在安装 Android Studio
的时候勾选了 Androidx
,会默认使用 androidx
管理, 如图
对于这个,解决方案有
- 下载
Android Studio
重新安装,这种比较麻烦 - 全局修改配置,借助
Android Studio
工具实现代码 迁移,详情可参考 迁移指南 但是这些步骤还是不能解决我的问题,我的flutter_module 包依旧有一些旧的引用代码形式,仔细分析,我的 flutter_module 是通过flutter create -t module
这种方式实现的,可能是这种命令生成的代码是旧的包管理机制,猜想有没有生成 androidx 机制的呢,Google 之后,发现真的有
flutter create --androidx -t module flutter_module
完美解决,山重水复疑无路???不存在的,果真,解决方案总比问题多
二、Android 启动不明原因
Process 'command 路径/flutter/bin/flutter'' finished with non-zero exit value 1
这个问题就更懵逼了,但是可以通过
build clean
解决,原因还不是很清楚
三、总结
其实对于 前端同学,学习 flutter 过程中,可能更多的挑战是对原生陌生,还是需要了解一些原生开发知识,不过,很多问题 google 以下,冷静分析下还是能解决