錯誤詳情
Android中集成flutter組件杀饵,按照官方文檔進行:
// Include the host app project.
include ':app' // assumed existing content
setBinding(new Binding([gradle: this])) // new
evaluate(new File( // new
settingsDir.parentFile, // new
'my_flutter/.android/include_flutter.groovy' // new
)) // new
在按照官方文檔操作之后,報錯:Failed to apply plugin class ‘FlutterPlugin‘.
解決方案
修改settings.gradle文件
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)//修改這一行代碼
repositories {
google()
mavenCentral()
maven { url 'https://storage.googleapis.com/download.flutter.io' }
}
}
rootProject.name = "AndroidFlutterDemo"
include ':app'
setBinding(new Binding([gradle: this])) //new
evaluate(new File( // new
settingsDir.parentFile, // new
'flutter_module/.android/include_flutter.groovy' // new
))
*** 重要挟纱,解決方案原理
注意:gradle6.8后 settings.gradle新增了如下配置
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS) //主要 是修改這里
repositories {
google()
mavenCentral()
}
}
RepositoriesMode配置在構建中倉庫如何設置雕凹,總共有三種方式:
FAIL_ON_PROJECT_REPOS
表示如果工程單獨設置了倉庫樟结,或工程的插件設置了倉庫,構建就直接報錯拋出異常
PREFER_PROJECT
表示如果工程單獨設置了倉庫易结,就優(yōu)先使用工程配置的枕荞,忽略settings里面的
PREFER_SETTINGS
表述任何通過工程單獨設置或插件設置的倉庫柜候,都會被忽略
settings.gradle里配置了FAIL_ON_PROJECT_REPOS,而Flutter插件又單獨設置了repository,所以會構建報錯躏精,因此需要把FAIL_ON_PROJECT_REPOS改成PREFER_PROJECT渣刷。
repositoriesMode.set(RepositoriesMode.PREFER_PROJECT)
但此時Android項目本身沒有設置倉庫,所有的依賴庫都會找flutter module中配置的倉庫下載依賴矗烛。所以需要在項目build.gradle中添加
//安卓項目/build.gradle
allprojects {
repositories {
google()
mavenCentral()
}
}
重新運行就OK了
參考文檔:https://blog.csdn.net/wanggang514260663/article/details/124934520
https://github.com/flutter/flutter/issues/99735