Flutter混合工程maven-publish发布aar产物

811 阅读2分钟

image.png

最近公司准备在Native工程加入flutter模块,flutter模块需要独立编译发布,在flutter打包aar上传到maven仓库的过程中,需要了一些弯路,今天整理下来给需要的朋友一个借鉴

一、创建flutte模块

这个很简单按照官方文档来,目录在native项目平级目录就行,也就是三端分离模式

image.png 在原生工程的平级目录执行如下命令即可创建flutter模块

flutter create -t module --org com.example my_flutter

二、编译aar产物

在flutter工程目录执行下面代码即可

flutter build aar

不出意外的话你可能会遇到下面的错误!震惊.png 当然也可能是我的环境问题,毕竟我每次创建新module都会遇到

image.png 不过呢,不要慌,这个是因为默认工程的gradle版本不对导致的,只需要修改gradle-wrapper.properties的 distributionUrl里面的引用版本即可。

image.png 修改完之后在执行 flutter build aar 你就会build目录收到相关编译产物。我们就可以在不引入源码的情况去引用flutter模块。这个按照官方文档是可以走的通的。这一步不执行也不影响发布aar。执行这一步主要是为了验证工程的配置是否有问题,能不能正常打包aar.

三、publish aar产物到maven

我们主要是使用maven-publish插件发布aar产物.这里我想吐槽一下google的官方文档,写文档一定要告诉我们在那个地方用吧!!! 下面我来写一下主要的发布流程

1.创建publish_maven_aar.gradle

group 'com.example.flutter_app'
version '1.0'

apply plugin:'maven-publish'
apply plugin:'signing'

task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    archiveClassifier.set("sources")
}

afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                groupId = 'com.example.flutter_app'
                artifactId = 'flutter_release'
                version = '1.0'
                from components.release
//                artifact = sourcesJar
            }
        }
        //本地的maven仓库地址
        repositories {
            maven {
                url uri("/Users/wangqiong/Desktop/repo2")
            }
        }
        repositories {
            //远程的maven仓库地址
            maven {
                url 'https://stg-test-xxxxxxxx/maven/flutter'
                credentials {
                    username "aws"
                    password "$codeartifactToken"
                }
            }
        }
    }

}

2.在flutter模块的.android目录的Flutter目录的build.gradle文件引入上面的gradle文件。如下图

image.png

如果目录错了,这个 from components.release 会一直编译报错,或者发布的pom文件缺少flutter的依赖,我被这个折磨了好久。

3.执行发布命令

./gradlew publish 如果不知道在哪里执行。可以在下图点击gradle 的flutter:publish发布命令,这个publish task只有在引入了 maven-publish插件才会有。

image.png

执行正常的情况下,仓库里面会有下图的目录结构,这里我添加了2个仓库。方便在本地查看验证发布是否有问题。

image.png 这里主要注意一下 flutter-release.aar的大小。正常应该在3M以上,还有flutter-release.pom文件里面应该有flutter_embedding等依赖。要不然发布的库也无法使用。ok到这里发布就完成了。