Flutter 热更新功能实现

Flutter 官方在 GitHub 上声明是暂时不支持热更新的,但是还是有很多能人,通过一些自己的手段,在Android端是能够实现动态更新的功能的。

先看下flutter 的apk 和普通的apk区别

flutter产物apk:

普通apk :

可以发现有很大不用

jni :该目录下存在文件 libflutter.so,该文件为 Flutter Engine (引擎) 层的 C++实现,提供skia(绘制引擎),Dart,Text(纹理绘制)等支持;

libs:该目录下存在文件为 flutter.jar,该文件为 Flutter embedding (嵌入) 层的 Java实现,该层提供给 Flutter 许多Native层平台系统功能的支持,比如创建线程。

assets:该目录下分为两部分:

1. flutter_assets 目录:该目录下存放Flutter 我们应用层的资源,包括images,font等;

2. isolate_snapshot_data,isolate_snapshot_instr,vm_snapshot_data,vm_snapshot_instr 文件:这 4 个文件分别对应 isolate,VM 的数据段和指令段文件。这四个文件就是我们自己的 Flutter 代码的产物了。

所以直接通过tinker等热更新,无法成功