Flutter Android add-to-app 三种方式详解
在Android中添加或依赖flutter module,官方文档有详细介绍,如果查看官方文档操作后出现各种水土不服,请往下看。。。
注:
- [groupId] 类似于包名 com.xx.xxx,替换为自己的即可(fluter module工程设定的)
- [fluterProjectName] 指fluter module工程名,替换为自己的即可
- 下文中的配置,关于本地路径的配置,相对、绝对路径均可
- 下文中的配置,除非特别说明,否则均为Android工程配置
- 关于所有情况下的
repositories配置,注意:- 如果你的
agp版本是7及以上(记得应该是从7开始的),必须在setting.gradle中配置repositories;7以下在project的build.gralde中配置。 - 7及以上在
setting.gradle中配置时,注意一般需要设置:repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)RepositoriesMode.FAIL_ON_PROJECT_REPOS是默认模式,使用‘设置’的 repositories 配置(setting.gradle中的配置)、如果有冲突就会报错。类似报这样的错误: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;RepositoriesMode.PREFER_PROJECT是倾向于‘项目’的 repositories 配置(项目的build.gradle中的配置);RepositoriesMode.PREFER_SETTINGS是倾向于‘设置’的 repositories 配置(setting.gradle中的配置);
- 如果你的
一、本地maven
1. repositories配置
此处再强调一下,如果你的agp版本是7及以上(记得应该是从7开始的),必须在setting.gradle中配置;7以下在project的build.gralde中配置。
配置错误将导致无法正确依赖flutter module编译的本地maven库中的aar包,或无法下载flutter插件
repositories {
maven {
//使用本地flutter工程编译目录配置时配置如下(相对、绝对路径均可)
url 'D:/xxxxx/[fluterProjectName]/build/host/outputs/repo'
}
maven {
//无论哪种依赖方式都要添加,用于下载flutter依赖相关的资源
url "https://storage.flutter-io.cn/download.flutter.io" //flutter依赖
}
}
2. app/build.gralde配置
//使用本地flutter工程编译目录配置依赖时
debugImplementation '[groupId].[fluterProjectName]:flutter_debug:1.0'
releaseImplementation '[groupId].[fluterProjectName]:flutter_release:1.0'
二、aar文件依赖
1. flutter module项目编译出的aar文件
将flutter module项目中build aar后生成的所有aar文件(路径:D:/xxxxx/[fluterProjectName]/build/host/outputs/repo,每个aar使用release或debug看情况,分别对应使用即可), copy到Android工程libs中。
2. repositories配置
maven {
//无论哪种依赖方式都要添加,用于下载flutter依赖相关的资源
url "https://storage.flutter-io.cn/download.flutter.io" //flutter依赖
}
3. app/build.gralde配置
//依赖libs下所有aar文件
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
//copy所有aar到android工程中配置依赖时
implementation 'io.flutter:flutter_embedding_debug:1.0.0-caaafc5604ee9172293eb84a381be6aadd660317'
implementation 'io.flutter:armeabi_v7a_debug:1.0.0-caaafc5604ee9172293eb84a381be6aadd660317'
implementation 'io.flutter:arm64_v8a_debug:1.0.0-caaafc5604ee9172293eb84a381be6aadd660317'
implementation 'io.flutter:x86_64_debug:1.0.0-caaafc5604ee9172293eb84a381be6aadd660317'
-
此配置用于下载和依赖flutter插件相关的jar和jar中的.so(不同架构)
-
其中
xxxxxxxxx:1.0.0-后面跟的一长串版本号,请到D:/xxxxx/[fluterProjectName]/build/host/outputs/repo/[groupId]/[fluterProjectName]/flutter_debug/1.0/flutter_debug-1.0.pom文件中,往下拉查看
三、module依赖(便于开发调试)
1. repositories配置
maven {
//无论哪种依赖方式都要添加,用于下载flutter依赖相关的资源
url "https://storage.flutter-io.cn/download.flutter.io" //flutter依赖
}
2. setting.gradle配置
setBinding(new Binding([gradle: this]))
evaluate(new File('D:/xxxxx/[fluterProjectName]/.android/','include_flutter.groovy'))
3. app/build.gralde配置
implementation project(':flutter')
4. gradle.properties配置
当Android工程的主app,名称不是:app时(比如修改了主module的名字为:demo_abc_test)
flutter.hostAppProjectName = demo_abc_test