当前位置:   article > 正文

Flutter混合开发,热修复(Android端)_谷歌宣布flutter热修复

谷歌宣布flutter热修复

本人之后又基于 Flutter SDK 1.12.13+hotfix.8 版本,做过一次动态更新。
Flutter 动态下发更新(Android 端)

这里针对 Flutter SDK 1.2.0 版本做的修改;

热修复,目前只支持 Android 端的热修复。
纯Flutter代码,Google已经是支持热修复了,flutter.jar 里面也有相关的逻辑代码。利用的是微软的 CodePush。

Flutter初始化时序

Flutter 页面显示到 Android 端,实际就是用的 FlutterView 填充到 Activity或者 Fragment上的。

public static FlutterView createView(@NonNull final Activity activity, @NonNull final Lifecycle lifecycle, final String initialRoute) {
   
    FlutterMain.startInitialization(activity.getApplicationContext());
    FlutterMain.ensureInitializationComplete(activity.getApplicationContext(), null);
    final FlutterNativeView nativeView = new FlutterNativeView(activity);
    final FlutterView flutterView = new FlutterView(activity, null, nativeView);
    ......
    return flutterView;
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

FlutterMain.startInitialization 主要做了初始化配置信息、初始化AOT编译和初始化资源,最后一部分则是加载Flutter的Native环境。跟热修复相关的主要是第三步,初始化资源 initResources()

public class FlutterMain {
   
   ......
   private static final String SHARED_ASSET_DIR = "flutter_shared";
   private static final String SHARED_ASSET_ICU_DATA = "icudtl.dat";
   private static String sAotVmSnapshotData = "vm_snapshot_data";
   private static String sAotVmSnapshotInstr = "vm_snapshot_instr";
   private static String sAotIsolateSnapshotData = "isolate_snapshot_data";
   private static String sAotIsolateSnapshotInstr = "isolate_snapshot_instr";
   private static String sFlutterAssetsDir = "flutter_assets";
   public static void startInitialization(Context applicationContext, FlutterMain.Settings settings) {
   
       ......
       // 初始化配置信息
       initConfig(applicationContext);
       // 初始化AOT编译
       initAot(applicationContext);
       // 初始化资源
       initResources(applicationContext);
       // 加载Flutter的Native环境
       System.loadLibrary("flutter");
       ......
   }
   private static void initResources(Context applicationContext) {
   
       ......
       sResourceExtractor = new ResourceExtractor(applicationContext);
       String icuAssetPath = "flutter_shared" + File.separator + 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/708303
推荐阅读
相关标签
  

闽ICP备14008679号