Flutter Android 热修复方案(3.22.0)

本文基于Flutter 3.22.0 实现

Flutter 在 Android 的Release编译产物为 libapp.so,我们只需要把它换成我们要修复的so即可。

实现方案有两种:

1. 重写以下代码

FlutterApplication
FlutterInjector
FlutterLoader
FlutterApplicationInfo
ApplicationInfoLoader
ResourceExtractor

这个文件中的相互饮用都需要修改为重写的类,此外最核心的地方是要修改 `FlutterLoader` 里面的内容:

dart 复制代码
shellArgs.add("--aot-shared-library-name=" + this.flutterApplicationInfo.nativeLibraryDir + File.separator + this.flutterApplicationInfo.aotSharedLibraryName);

修改为

File dir = applicationContext.getFilesDir();
                        File soFile = new File(dir.getAbsoluteFile() + File.separator + "libapp.so");

                        shellArgs.add("--aot-shared-library-name=" + (soFile.exists() ? dir.getAbsolutePath() : this.flutterApplicationInfo.nativeLibraryDir) + File.separator + this.flutterApplicationInfo.aotSharedLibraryName);
                        

然后再把新的 libapp.so 下载到fileDir 文件夹中。

这里需要注意几个点:

  1. 版本控制
  2. 文件完整性检测
  3. 加载异常容错方案

2. 修改engine 然后重新编译

修改源码

按照第一种方案对

shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java

文件进行修改

编译 engine

修改groovy

flutter/packages/flutter_tools/gradle/src/main/groovy/flutter.groovy

注释掉

addApiDependencies(
              pluginProject,
              buildType.name,
              "io.flutter:flutter_embedding_$flutterBuildMode:$engineVersion"
            )

然后再Android项目中加入编译后的库。即可实现和第一种一样的效果。

StoreBird

专门用于实现Flutter 补丁修复的。

但是使用起来需要翻墙,不太适用于国内用户。是根据分发补丁包的数量进行收费的

相关推荐
数据猎手小k3 小时前
AndroidLab:一个系统化的Android代理框架,包含操作环境和可复现的基准测试,支持大型语言模型和多模态模型。
android·人工智能·机器学习·语言模型
你的小103 小时前
JavaWeb项目-----博客系统
android
风和先行4 小时前
adb 命令查看设备存储占用情况
android·adb
AaVictory.4 小时前
Android 开发 Java中 list实现 按照时间格式 yyyy-MM-dd HH:mm 顺序
android·java·list
似霰5 小时前
安卓智能指针sp、wp、RefBase浅析
android·c++·binder
大风起兮云飞扬丶5 小时前
Android——网络请求
android
干一行,爱一行5 小时前
android camera data -> surface 显示
android
断墨先生6 小时前
uniapp—android原生插件开发(3Android真机调试)
android·uni-app
无极程序员7 小时前
PHP常量
android·ide·android studio
萌面小侠Plus8 小时前
Android笔记(三十三):封装设备性能级别判断工具——低端机还是高端机
android·性能优化·kotlin·工具类·低端机