Flutter模块打包aar上传maven

文章目录

    • 前言
    • 使用
    • 原理

前言

当flutter在项目中作为模块使用时,Android app工程应用flutter模块一般有两种方式:

  1. 重定向flutter模块
include ':app'                                   
setBinding(new Binding([gradle: this]))                                 
evaluate(new File(                                                      
  settingsDir.parentFile,                                               
  'flutter_module/.android/include_flutter.groovy'                          
)) 
  1. 打包为aar依赖,本地文件/maven 依赖

简单分析下两个方法的优劣:

  • 重定向方式:需要Android开发者配置flutter环境,且会增加构建时间;另外Android Studio 项目结构上会出现很多flutter依赖的模块,是项目视图变得杂乱。
  • 本地aar/maven 方式:Android开发者无需配置flutter环境,方便分离开发。

这里介绍一下一种方便将flutter模块发布至 maven 供Android项目使用的方式。

使用

假设flutter项目目录:flutter_module

  1. 在此新建文件夹 script
  2. 下载文件: flutter_aar_upload.gradle 到 script 目录。
  3. 新建 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

  1. 执行 upload.sh

执行成功会得到
Flutter模块打包aar上传maven_第1张图片
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依赖上传进行优化,不再讨论。

你可能感兴趣的:(Android,flutter,android,flutter,maven)