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

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

相关推荐
2501_9151063233 分钟前
苹果软件加固与 iOS App 混淆完整指南,IPA 文件加密、无源码混淆与代码保护实战
android·ios·小程序·https·uni-app·iphone·webview
2501_9159214341 分钟前
iOS 26 崩溃日志解析,新版系统下崩溃获取与诊断策略
android·ios·小程序·uni-app·cocoa·iphone·策略模式
齊家治國平天下3 小时前
Android 14 Input 事件派发机制深度剖析
android·input·hal
2501_916013744 小时前
iOS 推送开发完整指南,APNs 配置、证书申请、远程推送实现与上架调试经验分享
android·ios·小程序·https·uni-app·iphone·webview
李艺为6 小时前
非预置应用使用platform签名并且添加了android.uid.system无法adb安装解决方法
android·adb
李宥小哥7 小时前
C#基础11-常用类
android·java·c#
Jerry12 小时前
Compose 中的绘制功能简介
android
光影少年13 小时前
Flutter生态及学习路线
学习·flutter
我科绝伦(Huanhuan Zhou)14 小时前
【脚本升级】银河麒麟V10一键安装MySQL9.3.0
android·adb