当flutter在项目中作为模块使用时,Android app工程应用flutter模块一般有两种方式:
include ':app'
setBinding(new Binding([gradle: this]))
evaluate(new File(
settingsDir.parentFile,
'flutter_module/.android/include_flutter.groovy'
))
简单分析下两个方法的优劣:
这里介绍一下一种方便将flutter模块发布至 maven 供Android项目使用的方式。
假设flutter项目目录:flutter_module
script
script
目录。upload.sh
(linux/macOS)#!/usr/bin/env sh
flutter pub get
cd ..
./gradlew build
cd .android
./gradlew \
-I=../script/flutter_aar_upload.gradle \
-Pmaven-url=http://your_maven_url \
-Pmaven-user=admin \
-Pmaven-pwd=admin123 \
-Pis-plugin=false \
-PbuildNumber=${pom-version} \
-Ptarget-platform=android-arm,android-arm64,android-x64 assembleAarRelease
Windows 系统可能需要修改此脚本
参数说明
-Pmaven-url 可以是本地路径,也可为远程地址(注意:maven仓库需要开启重部署 开启方式)
示例:
maven-url=file:///Users/xxx/StudioProjects/xxx/build/host
maven-url=http://192.168.1.100:8081/repository/maven-releases/
maven-user 与 maven-pwd 为maven远程用户及密码,若发布到本地无需设置
-PbuildNumber=1.0.0 为发布到maven module的版本号
最后 assembleAarRelease 为打包类型,其他:assembleAarDebug, assembleAarProfile
upload.sh
执行成功会得到
5. 根据提示在Android项目 build.gradle
中添加
dependencies {
implementation 'xx.xxxx.xxx:flutter_release:xxxx'
}
flutter build aar
命令会将构建的aar输出到_module/build/host 目录下,既然能输出到本地,这段路径一定是在某个地方配置的。经过 flutter build aar -v 命令的查看执行记录,发现了下面一段命令:
flutter_module/.android/gradlew -I=/Users/xxx/Library/Flutter/packages/flutter_tools/gradle/aar_init_script.gradle
-Pflutter-root=/Users/xxx/Library/Flutter -Poutput-dir=/Users/xxx/Projects/flutter_module/build/host -Pis-plugin=false -PbuildNumber=1.0
-Ptarget-platform=android-arm,android-arm64,android-x64 assembleAarDebug
也就是 执行了 aar_init_script.gradle,在文件中也发现了配置输出路径的位置
mavenDeployer {
//outputDir 为命令参数中的 output-dir
repository(url: "file://${outputDir}/outputs/repo")
}
于是可通过修改 aar_init_script.gradle
来达到目的,不过为了不修改flutter环境源码,将 aar_init_script.gradle
复制出以修改。没错,flutter_aar_upload.gradle 就是修改至此文件
修改后可输出打包的plugin列表,不再需要指定 -Pflutter-root
路径,可自定义 mavenUrl
支持本地与远程上传,支持输出Host项目需要的配置信息。
此外,还对flutter依赖上传进行优化,不再讨论。