我司引入了 flutter 到主 App 中,这个大概是大部分公司的节奏。引入一个新技术,一定要搞定集成问题。
不定制化且切到最新版本的前提下:
- 在 1.9 版本,flutter build aar 即可。所以如果是 1.9 版本,请关掉这个文章。191有个坑,build aar是不支持plugin的native层相互依赖的。
- 用闲鱼的 FBI,应该是一键化的事情。如果用 FBI,请关掉这个文章。
问题
一键将 flutter 工程集成到主工程,且支持远程发布和本地发布。
思路
build apk 其实会生成足够的 aar 文件(每个 plugin 一个),只是没有最后合并的步骤(fat-aar)。如果在 maven 语境下,合并文件不是必须的,合并成一个大依赖即可。
步骤
flutter 工程下:
- build apk
- 读取 .flutter-plugins 文件,解析出来每个 plugin 的 path,aar 就在对应的 build 目录下。不要觉得这个步骤 hacky,flutter.gradle 里也是这么干的
- 构建一个纯 android 的 library module 作为发布大依赖的 wrapper
- 把每个 aar 发布到远程/本地文件夹
- 修改 wrapper 中依赖的版本号
- 发布 wrapper 到远程
主工程:
直接依赖发布的 wrapper 即可。
注意点在于:
- 区分 debug 和 release。只有 debug 才能 hot-reload,不能造次。我们是用 artifact id 加 -debug 后缀实现的。
- 最好通过支持发布到本地,既可以是 maven local,也可以是 libs 文件夹。这是为了持续开发一个大功能更方便。用我们选择了 libs 文件夹,这样不容易出锅,maven local 的版本号冲突和对远端的覆盖很难搞。