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 补丁修复的。

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

相关推荐
通玄5 小时前
Jetpack Compose 入门系列(十):Paging 3 分页加载
android
hunterandroid5 小时前
DataStore 工程化实践:迁移、并发更新与异常恢复
android·前端
程序员-珍8 小时前
报错下载android sdk失败
android·java
齊家治國平天下9 小时前
AAOS 电源管理深度解析:休眠/唤醒/功耗优化
android·车载系统·aaos·aosp·电源管理·休眠唤醒·carpowermanager
qq3621967059 小时前
安卓大版本升级后APK不兼容怎么办?2026跨版本更新指南
android
Xzaveir9 小时前
企业号码展示不可观测怎么办:状态机、拨测事件与异常回放
android·人工智能
2501_916007479 小时前
iOS和macOS应用程序性能分析和优化工具使用综合指南
android·macos·ios·小程序·uni-app·iphone·webview
黄林晴10 小时前
Nearby Connections 重大变更:不再自动开启 Wi-Fi / 蓝牙,适配指南
android
恋猫de小郭10 小时前
Flutter 全新真 3D 实现,用 flutter_scene 能开发一个「我的世界」
android·前端·flutter