欢迎关注微信公众号:FSA全栈行动 👋
一、概述
目前我们的项目是按照 Flutter
官方文档 docs.flutter.dev/add-to-app/…,以源码依赖的方式集成到原生项目,在集成 Shorebird
实现热更新时,需要我们将源码依赖的方式调整成二进制依赖。
安卓端的改动还是很简单的,一路下来没怎么碰壁,接下来一起来看看如何操作吧
二、Shorebird 初始化
本文以 Mac
环境为例,如果你是 Windows
用户,请按官方文档去操作: docs.shorebird.dev
该部分内容只需要一开始没有环境和相应的文件时去操作一次
安装 CLI
打开终端,执行以下命令
1 | shell复制代码curl --proto '=https' --tlsv1.2 https://raw.githubusercontent.com/shorebirdtech/install/main/install.sh -sSf | bash |
重启终端,输入 shorebird
即可看到相应的命令输出
1 | shell复制代码$ shorebird |
登录
通过如下命令,登录你的 Shorebird
账号
1 | shell复制代码shorebird login |
选择 Flutter
版本
你可以查看当前 Shorebird
支持哪些 Flutter
版本
1 | 复制代码shorebird flutter versions list |
1 | ruby复制代码$ shorebird flutter versions list |
如我现在需要用到 Flutter 3.13.9
版本,则输入如下命令
1 | shell复制代码$ shorebird flutter versions use 3.13.9 |
Flutter 模块初始化
在你的 Flutter
项目下执行如下命令
1 | csharp复制代码shorebird init |
该命令会生成在项目根目录生成 shorebird.yaml
文件
1 | yaml复制代码# shorebird.ymal的内容 |
以及修改 pubspec.yaml
1 | yaml复制代码 assets: |
三、原生项目改造
以下的相关修改是以我们项目来写的(
.kts
),如果你的跟我的不一样,可以看一下文档:docs.shorebird.dev/guides/hybr…
build.gradle.kts
新增本地二进制依赖
1 | diff复制代码buildscript { |
settings.gradle.kts
注释掉本地源码依赖
1 | diff复制代码- evaluate(new File( |
app/build.gradle.kts
注释掉本地源码依赖,新增本地二进制依赖
1 | diff复制代码dependencies { |
四、创建 Shorebird Release
打发布包的时候操作,在 Flutter
工程目录下执行
1 | shell复制代码cd xx/xx/flutter_modules |
该命令内部会去执行
flutter build aar --no-debug --no-profile ...
,并且使用的是Shorebird
魔改的Flutter
引擎!
版本号可以在如下路径的文件中查看
1 | xml复制代码# 路径: app/src/main/AndroidManifest.xml |
ShoreBird
的内部逻辑会去以这个版本号组合,向服务器请求判断是否存在相应版本的相关补丁!
执行完成后,在 Shorebird
控制台上可以看到相应的项
在命令执行前,请确保不存在 7.0.0+320
的 Release
,如果有的话,请先删除
五、创建 Shorebird Patch
紧急修复线上包的bug时操作,在 Flutter
工程目录下执行
1 | shell复制代码shorebird patch aar --release-version 7.0.0+320 |
注:版本号与上述的 release
命令中使用的要保持一致!
执行完成后,在 Shorebird
控制台上点击对应的 Release
项,进去后可以看到相应的补丁
六、热更新验证
- 未打
patch
时,请以release
模式运行原生工程(在Active Build Variant
的下拉选项中选择release
) - 关闭
App
- 打
patch
后,重新打开App
,关闭App
再打开App
,即可看到变化
如果补丁没有生效,可以在 Logcat
内检测相关输出,成功还是失败可以直接看后两句,如下两种情况的输出:
成功:
1 | shell复制代码[INFO:shorebird.cc(109)] Shorebird updater: no active patch. |
失败:
1 | shell复制代码[INFO:shorebird.cc(109)] Shorebird updater: no active patch. |
失败的时候,看一下 PatchCheckRequest
后面的请求参数输出,一般失败都是因为这里的参数错误才导致。
七、脚本
由于我们日常研发还是使用的是源码依赖的方式,只会在打最终测试包时才需要去做上述的调整操作,所以这里用我比较熟悉的 Python
去制作了简易的脚本,并结合 Jenkins
来辅助完成这种万年不变的无聊步骤
脚本已上传至 Github
: github.com/LinXunFeng/…
看官可自取修改~
switch_flutter_integrate.py
切换
Flutter
项目的集成方式
1 | shell复制代码# 二进制依赖 |
shorebird.py
自动获取版本号,并执行
Shorebird
相关命令
1 | shell复制代码# release |
八、最后
本篇到此结束,感谢大家的支持,我们下次再见! 👋
如果文章对您有所帮助, 请不吝点击关注一下我的微信公众号:FSA全栈行动, 这将是对我最大的激励. 公众号不仅有
iOS
技术,还有Android
,Flutter
,Python
等文章, 可能有你想要了解的技能知识点哦~
本文转载自: 掘金