Failed to apply plugin class ‘FlutterPlugin‘.

错误详情

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
表示如果工程单独设置了仓库,就优先使用工程配置的,忽略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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容