Android Studio Arctic Fox 原生项目集成Flutter模块Failed to apply plugin class ‘FlutterPlugin’

今天升级Android Studio Arctic Fox Patch2后,新建Android原生项目,并在原生项目工程上新建Flutter module,编译无法通过,报错信息: Caused by: org.gradle.api.internal.plugins.PluginApplicationException:  Failed to apply plugin class 'FlutterPlugin'.   Caused by: org.gradle.api.InvalidUserCodeException:  Build was configured to prefer settings repositories over project repositories but repository 'maven'  was added by plugin class 'FlutterPlugin' 谷歌了半天没有找到解决方法,只好自己一步步慢慢解决,最终找到了解决方式。 根据报错信息,应该是在构建Flutter module的时候出的问题,大体意思是构建过程被配置为更喜欢settings里的仓库,而不是project里面的仓库,但是仓库maven通过FlutterPlugin添加了。 打开Android原生工程的settings.gradle文件,对比发现通过Arctic Fox创建的项目,settings.gradle多了这些配置信息: dependencyResolutionManagement {     repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)     repositories {         google()         mavenCentral()         jcenter() // Warning: this repository is going to shut down soon     } } 根据gradle文档描述,DependencyResolutionManagement是gradle6.8之后新增的配置项,它为构建的所有工程配置依赖解析 RepositoriesMode配置在构建中仓库如何设置,总共有三种方式: FAIL_ON_PROJECT_REPOS 表示如果工程单独设置了仓库,或工程的插件设置了仓库,构建就直接报错抛出异常 PREFER_PROJECT 表示如果工程单独设置了仓库,就优先使用工程配置的,忽略settings里面的 PREFER_SETTINGS 表述任何通过工程单独设置或插件设置的仓库,都会被忽略 到这里,综合报错信息就豁然开朗了,原来是因为settings.gradle里配置了FAIL_ON_PROJECT_REPOS,而Flutter插件又单独设置了repository,所以会构建报错,所以我直接把FAIL_ON_PROJECT_REPOS改成PREFER_PROJECT,再重新build,接下来又有报错信息了,大致信息如下: Execution failed for task ':app:mergeDebugResources'. > Could not resolve all files for configuration ':app:debugRuntimeClasspath'.    > Could not find org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.30.      Searched in the following locations:        – https://storage.flutter-io.cn/download.flutter.io/org/jetbrains/kotlin/kotlin-stdlib-jdk8/        1.5.30/kotlin-stdlib-jdk8-1.5.30.pom        … 原来都所有依赖库都按找flutter module里面配置的仓库下载依赖了,打开Android工程目录下的build.gradle,添加下面的配置: allprojects {     repositories {         google()         jcenter()     } } 然后sync,重新build,成功了!顺手给stackoverflow提交了一个回答~: PluginApplicationException: Failed to apply plugin … Read more

Flutter 集成到现有的安卓原生项目中-集成方式

Flutter可以作为Gradle子工程或AAR文件嵌入到现有的安卓原生项目中,集成流程可以使用Android Studio的插件或手动集成,从Flutter v1.26开始,支持在原生项目中集成多个Flutter引擎、screen,view的实例。 注意:你的原生安卓项目可能支持mips或x86架构,Flutter目前(2021年9月)只支持AOT模式编译x86_64,armabi-v7a,arm64-v8a 可以在app上使用abiFilters安卓Gradle插件api限制支持的架构,避免缺少libflutter.so造成的运行时异常,比如: android {   //…   defaultConfig {     ndk {       // Filter for architectures supported by Flutter.       abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64'     }   } } Flutter引用有x86和x86——64版本,当使用模拟器JIT模式调试时,Flutter模块会正确的运行。 用Android Studio集成 Android Studio自动集成Flutter module是非常方便的,可以在项目中同时编辑android原生代码和Flutter代码,并可以继续使用Flutter插件,比如Dart代码自动补全,hot reload,widget检查等。 添加到app的流程支持Android Studio 3.6,42+的IntelliJ Flutter插件,Android Studio集成也只支持使用源码gradle子项目集成,而不支持使用AAR. 使用Android Studio菜单栏的File>New>New Module…,你可以创建一个新的Flutter module集成,或者选择一个之前创建的Flutter module Android Studio插件会自动配置Android工程,添加Flutter module作为依赖。 手动集成 手动集成Flutter module到安卓项目,不使用Android studio插件,按照如下步骤: 创建一个Module 假设我们有一个Android app在 some/path/MyApp 路径,我们想要我们的Flutter 工程在同级目录 cd some/path/ flutter create -t module –org com.adamin flutter_m3 这样会在some/path/flutter_m3目录下创建一个Flutter module,里面有一些Dart代码作为你的初始代码,还有个.android的隐藏文件夹,.android文件夹包含一个android项目,它既可以帮助你通过flutter run命令单独运行flutter模块,也是一个包装器,可以帮助将Flutter模块引导为可嵌入的android 库。 Java 8 需求 Flutter Android … Read more

docker 搭建nginx+php环境

操作系统 centos-release-7-7.1908.0.el7.centos.x86_64 安装PHP docker pull php:fpm-7.4 安装Nginx docker pull nginx:1.17 查看镜像 docker images [root@VM_1_201_centos ~]# docker images REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE redis               latest              96812ab2b931        14 hours ago        104MB mysql               5.7                 f965319e89de        3 days ago          448MB redis               5.0                 a4d3716dbb72        7 days ago          98.3MB php                 7.4-fpm             9f53a362fb2f        7 days ago          405MB nginx               1.17                602e111c06b6        7 days ago          127MB rabbitmq            3.7.15              b3639fca0afd        10 months ago       149MB mongo               3.2                 fb885d89ea5c        17 months ago       300MB kibana              6.4.0               a7e4cd1a7b45        20 months ago       667MB elasticsearch       6.4.0               1ac676545731        20 months ago       791MB [root@VM_1_201_centos ~]# 创建并启动php容器  docker run -p 9000:9000 –name php7 -v /mydata/nginx/html:/www -d php:7.4-fpm 创建启动nginx容器 docker run -p 80:80 –name nginx  -v /mydata/nginx/html:/usr/share/nginx/html   -v /mydata/nginx/logs:/var/log/nginx   -d nginx:1.17 复制nginx容器内的默认配置文件到宿主主机 docker container cp nginx:/etc/nginx /mydata/nginx/ 修改文件夹名称 cd /mydata/nginx/ mv nginx conf 停止并删除nginx容器,重新创建并启动nginx容器,关联php和挂载nginx配置文件数据卷 docker stop nginx docker rm nginx docker run -p 80:80 –name nginx  -v /mydata/nginx/html:/usr/share/nginx/html  -v /mydata/nginx/logs:/var/log/nginx   -v /mydata/nginx/conf/conf.d:/etc/nginx/conf.d   –link php7:php   -d nginx:1.17 查看php容器的ip docker inspect –format '{{.NetworkSettings.IPAddress}}' php7 配置nginx vhost文件 cd /mydata/nginx/conf/conf.d/ vim adamfly.conf server {     listen       80;     server_name   www.adamfly.xyz;     #charset koi8-r;     #access_log  /var/log/nginx/host.access.log  main;     root   /usr/share/nginx/html/www.adamfly.xyz;     location / {         index  index.php index.html index.htm;     } … Read more

docker 常用命令备忘

创建mysql容器,设置端口映射,目录映射 docker run -id  -p 3306:3306  –name=mysql  -v $PWD/conf:/etc/mysql/conf.d  -v $PWD/logs:/logs  -v $PWD/data:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=111111  mysql:5.7 创建tomcat容器,设置端口映射,目录映射 mkdir tomcat cd tomcat docker run -id  -p 8080:8080  -v $PWD:/user/local/tomcat/webapps  tomcat 创建nginx容器 mkdir nginx cd nginx  touch nginx.conf #nginx.conf内容 mkdir conf mkdir logs mkdir html docker run -it –name=nginx  -p 80:80  -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf  -v $PWD/logs:/var/log/nginx  -v $PWD/html:/usr/share/nginx/html  nginx 创建redis容器 docker run -id –name=redis -p 6379:6379 redis:latest ./redis-cli.exe -h xxxxx -p 6379 #带密码 docker run -id –name redis -p 6379:6379 redis:latest –requirepass "adam1111"