錯(cuò)誤詳情
Android中集成flutter組件,按照官方文檔進(jìn)行:
// 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
在按照官方文檔操作之后,報(bào)錯(cuò):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配置在構(gòu)建中倉庫如何設(shè)置,總共有三種方式:
FAIL_ON_PROJECT_REPOS
表示如果工程單獨(dú)設(shè)置了倉庫,或工程的插件設(shè)置了倉庫,構(gòu)建就直接報(bào)錯(cuò)拋出異常
PREFER_PROJECT
表示如果工程單獨(dú)設(shè)置了倉庫,就優(yōu)先使用工程配置的,忽略settings里面的
PREFER_SETTINGS
表述任何通過工程單獨(dú)設(shè)置或插件設(shè)置的倉庫,都會被忽略
settings.gradle里配置了FAIL_ON_PROJECT_REPOS,而Flutter插件又單獨(dú)設(shè)置了repository,所以會構(gòu)建報(bào)錯(cuò),因此需要把FAIL_ON_PROJECT_REPOS改成PREFER_PROJECT。
repositoriesMode.set(RepositoriesMode.PREFER_PROJECT)
但此時(shí)Android項(xiàng)目本身沒有設(shè)置倉庫,所有的依賴庫都會找flutter module中配置的倉庫下載依賴。所以需要在項(xiàng)目build.gradle中添加
//安卓項(xiàng)目/build.gradle
allprojects {
repositories {
google()
mavenCentral()
}
}
重新運(yùn)行就OK了
參考文檔:https://blog.csdn.net/wanggang514260663/article/details/124934520
https://github.com/flutter/flutter/issues/99735