场景再现
Flutter宿主需要特定的三方库版本
- Android宿主工程中需要存在低版本三方jar库(jar_v1)。
- 宿主工程中依赖Flutter plugin工程,该plugin中依赖了三方库pub_dev_lib1,此lib1--->android--->build.gradle中依赖三方jar库(jar_v2)版本。
- 宿主工程中不允许jar库的升级,只能使用jar_v1版本。 解决方法:可以指定找一个低版本的pub_dev_lib1 保证其中只依赖低版本的jar_v1
dart-lang中自带三方库升级导致编译问题
- Flutter工程中用到了build_runner,本地dart-lang版本是2.17.6。
- 编译工程时候出现了Analyzer5.3.0 Crash异常
分析原因:dart-lang 在build_runner之前默认会做代码检测任务(依赖analyzer),analyzer在这个时候升级到高版本导致,解决办法:
- 升级本地flutter sdk
- 强制指定一个固定旧的analyzer版本
问题解决
工程pubspec.yaml文件中使用dependency_overrides指定固定版本,比如上述问题2可以如下处理
代码语言:javascript复制dependency_overrides:
analyzer: 5.2.0
一点想法
默认Flutter使用三方库时候,我们都会这样写,带上^ 如下:
代码语言:javascript复制analyzer: ^5.2.0
但是在很多时候,本地工程的flutter sdk版本,宿主版本中的jar包注定Flutter中三方库版本只能苟在一个低版本,无法更新,一更新就出错。说到底涉及到的是项目稳定性问题。 如何保证项目稳定性呢?
针对三方库的处理这块我认为可以这么做
- 三方库的引入应该保持节制态度,能实现自己实现。 原因是因为它不可控,你永远不知道它哪天会更新啥导致你项目出问题。
- 如果要用,就copy代码到项目里。 握在手里的东西才更放心,至少可以掌控住,出问题还有机会改。
- 如果代码太多或者没有源码,那么就评估大小且固定版本吧,这样会少很多麻烦。