dependency_overrides 用来解决package 依赖冲突
假设你想在应用中使用 some_package
和 other_package
,并且它们依赖于不同版本的 url_launcher
。于是我们便有了潜在的冲突。避免这种情况的最好方法是 package 的作者在指定依赖项时使用 版本范围 而非特定版本
dependencies:
url_launcher: ^5.4.0 # Good, any version >= 5.4.0 but < 6.0.0
image_picker: '5.4.3' # Not so good, only version 5.4.3 works.
如果 some_package
声明了以上依赖,并且 another_package
声明了一个兼容的 url_launcher
依赖项,如 '5.4.6'
或 ^5.5.0
, pub 能够自动解决冲突问题。 Gradle modules 和 CocoaPods 也是用类似的方式解决平台依赖的。
即使 some_package
和 another_package
声明了不兼容的 url_launcher
版本,它们实际上仍可能以兼容的方式使用 url_launcher
。在这种情况下,可在 pubspec.yaml
文件中添加一个依赖覆盖声明来强制使用特定版本,从而处理冲突。
为了强制使用版本为 5.4.0
的 url_launcher
,你可以对应用的 pubspec.yaml
文件做如下更改:
dependencies:
some_package:
another_package:
dependency_overrides:
url_launcher: '5.4.0'
如果依赖冲突项不是 package 自身,而是如 guava 这样特定于 Android 的库,那么依赖的覆盖声明必须添加到 Gradle 的构建逻辑中。
为了强制使用版本为 28.0 的 guava,你可以对 android/build.gradle 文件做如下更改:
configurations.all {
resolutionStrategy {
force 'com.google.guava:guava:28.0-android'
}
}
CocoaPods 目前尚不提供依赖项覆盖功能。
具体案例
主工程:
name: fairdemo
description: A new Flutter project.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 1.0.0+1
environment:
#允许不开启nullsafety
sdk: ">=2.0.0-dev.68.0 <3.0.0"
#2.12.0以上,所有依赖package必须要升级nullsafety
# sdk: ">=2.12.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
fair:
path: ../fair/fair
dependency_overrides:
fair_version:
path: ../fair/flutter_version/flutter_1_22_4
dev_dependencies:
flutter_test:
sdk: flutter
build_runner: ^1.4.0
fair_compiler:
path: ../fair/compiler
flutter:
uses-material-design: true
默读英文不自然的舌头就大了起来
flutter 1.17.3
dependencies:
meta: 1.1.8
fair_compiler
dependencies:
analyzer: ^0.41.2
analyzer-0.41.2
dependencies:
meta: ^1.2.3
所以,flutter sdk 的meta版本和 fair_compiler 依赖的analyzer-0.41.2 下的 meta版本
不一致
导致flutter pub get失败
analyzer:^0.41.2
>=0.41.2,<1.0.0
image.png
fair_compiler依赖的analyzer0.41.2是非空安全版本的最后一个版本
meta: ^1.2.3
>=1.2.3,<2.0.0
image.png
为了能使用到fair_compiler ->analyzer0.41.2->meta>=1.2.3,<2.0.0
flutter1.17.3 meta: 1.1.8
flutter1.22.5 meta: 1.3.0-nullsafety.3
flutter 2.2.2 meta: 1.3.0
flutter 2.5.0 meta: 1.7.0
所以,这个分支的fair不支持flutter1.17.3
image.pnghttps://docs.flutter.dev/development/tools/sdk/releases?tab=macos
切换到1.22.4试试
果然好了
image.pngflutter pub run build_runner build
image.png报的这个error是什么意思
image.png按照环境fair接入MacOS-环境准备
环境应该没什么问题
1、flutter doctor
2、安装ndk、和cmake
image.png image.png
网友评论