Flutter 混合开发实战问题记录(三)打包并上传flutter aar 到maven

栏目: Java · 发布时间: 5年前

内容简介:对于Android老项目来说接入flutter的最佳方式就是添加 flutter module,让主module通过模块依赖方式来依赖flutter。回顾下小步骤,因为网上资料很多,不详细描述了。在当前project下 运行命令

对于Android老项目来说接入flutter的最佳方式就是添加 flutter module,让主module通过模块依赖方式来依赖flutter。

回顾下小步骤,因为网上资料很多,不详细描述了。

1 创建 flutter module

在当前project下 运行命令

flutter create -t module my_flutter(my_flutter为生成的flutter module名称)
复制代码

2增加配置代码

在工程的settings.gradle增加以下配置

setBinding(new Binding([gradle: this]))                                 // new
evaluate(new File(                                                      // new
        settingsDir.parentFile,                                               // new
        'yq_flutter/.android/include_flutter.groovy'                          // new
))
复制代码

在app 的gradle里添加

implementation project(':my_flutter')
复制代码

这样就可以边开发,边编译看效果了。

不过随之而来的问题是:现在flutter毕竟属于小众开发,团队内部只有几个人来做,而其他人不需要关注flutter的东西,上边的依赖方式需要安装flutter 环境,下载sdk等,否则无法编译项目,所以还需要以依赖jar/aar的方式来集成。

下边具体描述一下。 你新建的flutter module可以用另一个Android studio 窗口独立打开,基本的目录结构是

Flutter 混合开发实战问题记录(三)打包并上传flutter aar 到maven

在as终端里输入

flutter build apk
复制代码

可以生成一个release的apk,同时在rootProj/.android/Flutter/build/outputs/aar/目录下生成aar,把这个aar拷出来直接放到你原生项目里取依赖便可以摆脱依赖module的麻烦。 不过要规范点的话还需要在你们公司的自建nexus maven(或jcenter)上上传aar,通过地址依赖。参考普通aar的打包上传方式会发现能生成aar,但是运行会失败,因为aar中没有打包进Flutter的编译产物。 正常生成的aar中结构图

Flutter 混合开发实战问题记录(三)打包并上传flutter aar 到maven

assets 文件夹中的 isolate_snapshot_instr , isolate_snapshot_data, vm_snapshot_data , vm_snapshot_instr 为Flutter编译中间产物,flutter_assets 内为资源文件,包含字体,图片,此外还有需要的插件部分原生代码和sdk的jar等。

普通的gradle构建无法打包进中间产物和资源文件,所以参考flutter 项目中的gradle 文件内容,可以看到,是在普通的gradle构建过程中加入了flutter gradle脚本

Flutter 混合开发实战问题记录(三)打包并上传flutter aar 到maven

具体内容可以进入sdk目录去查看,它的工作其实就是copy那些产物进你的apk文件,所以我们可以先本地构建apk,然后解压它,取出产物,复制到你的项目中,然后重新构建然后上传到maven,参考网上的一些资料,修改了一个脚本供使用。其中你可能需要修改的部分就是你们公司自用的uploadArchives脚本了。

构建脚本

然后在你的项目中依赖,甚至增加配置开关控制是aar依赖还是module依赖

gradle.properties 开关

FLUTTER_DEBUG = true
复制代码

原生module中依赖

if(FLUTTER_DEBUG.equals("true")){
        implementation project(':flutter')
    }else {
        implementation 'com.xxx.xxx:my-flutter:1.0.0.@aar'
    }
复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Alone Together

Alone Together

Sherry Turkle / Basic Books / 2011-1-11 / USD 28.95

Consider Facebookit’s human contact, only easier to engage with and easier to avoid. Developing technology promises closeness. Sometimes it delivers, but much of our modern life leaves us less connect......一起来看看 《Alone Together》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换