最近公司准备在Native工程加入flutter模块,flutter模块需要独立编译发布,在flutter打包aar上传到maven仓库的过程中,需要了一些弯路,今天整理下来给需要的朋友一个借鉴
一、创建flutte模块
这个很简单按照官方文档来,目录在native项目平级目录就行,也就是三端分离模式
在原生工程的平级目录执行如下命令即可创建flutter模块
flutter create -t module --org com.example my_flutter
二、编译aar产物
在flutter工程目录执行下面代码即可
flutter build aar
不出意外的话你可能会遇到下面的错误!震惊.png 当然也可能是我的环境问题,毕竟我每次创建新module都会遇到
不过呢,不要慌,这个是因为默认工程的gradle版本不对导致的,只需要修改gradle-wrapper.properties的
distributionUrl里面的引用版本即可。
修改完之后在执行 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文件。如下图
如果目录错了,这个 from components.release 会一直编译报错,或者发布的pom文件缺少flutter的依赖,我被这个折磨了好久。
3.执行发布命令
./gradlew publish
如果不知道在哪里执行。可以在下图点击gradle 的flutter:publish发布命令,这个publish
task只有在引入了 maven-publish插件才会有。
执行正常的情况下,仓库里面会有下图的目录结构,这里我添加了2个仓库。方便在本地查看验证发布是否有问题。
这里主要注意一下 flutter-release.aar的大小。正常应该在3M以上,还有flutter-release.pom文件里面应该有flutter_embedding等依赖。要不然发布的库也无法使用。ok到这里发布就完成了。