Tinker Flutter热修复

在Android里面,Flutter打包之后的产物是一个.so文件(libapp.so),Tinker热更新支持so文件更新,自然也就支持Flutter热更新。 理论上这样就可行了,不需要我们额外处理,但是Flutter初始化加载libapp.so时候,不去加载Tinker下载的补丁so,需要我们在初始化时候手动传入下。

正常在初始化时候,用FlutterShellArgs把so路径当参数传入即可,或者用反射传入也一样,都能实现热修复的效果。

可以这样处理:

初始化传参方式:

FlutterShellArgs flutterShellArgs = new FlutterShellArgs(new String[0]);
//libPath 就是libapp.so Tinker 下载补丁本地路径
if (!TextUtils.isEmpty(libPath)) {
    flutterShellArgs.add("--aot-shared-library-name=" + libPath);
    flutterShellArgs.add("--aot-shared-library-name="
            + getApplicationInfo(mPlatform.getApplication().getApplicationContext()).nativeLibraryDir
            + File.separator + libPath);
}

FlutterMain.ensureInitializationComplete(
        mPlatform.getApplication().getApplicationContext(), flutterShellArgs.toArray());

反射的方式:

try {
    Field field = FlutterMain.class.getDeclaredField("sAotSharedLibraryName");
    field.setAccessible(true);
    field.set(null, libPath);
} catch (Exception e) {
    e.printStackTrace();
}

那么问题来了,既然上面手动实现就几行代码就能实现了,为啥还要用插件实现呢?

1.插件实现可以和Flutter解耦,不需要侵入项目。

2.由于FlutterBoost的存在,很多人都在使用它,并不能直接修改Flutter的初始化流程,需要修改源码。

插件就可以把两者统一了。

可以写个插件实现。

根目录build.gradle引入插件

classpath 'me.chunsheng:tinker4flutter:0.0.2'

app目录build.gradle使用插件

apply plugin: 'tinker-for-flutter'

添加依赖库:
implementation 'me.chunsheng:hookflutter:0.0.2'

插件效果

本Demo只做测试用,生产环境使用,还需要根据源码按自己需求修改。

比如:hookflutter库里面根据自己需求加载不同abi下的libapp.so 。 Flutter初始化只Hook了一个startInitialization 。 等等

下发补丁

Original: https://www.cnblogs.com/spring87/p/13525490.html
Author: 狂奔的小狮子
Title: Tinker Flutter热修复

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/541664/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 第一个微信小项目

    第一个好友分析: 我们需要用到wxpy这个库,这个库用到时会弹出一个二维码,这个二维码是通过扫码的方式登录微信,以获取信息 1 #导入模块 2 from wxpy import *…

    Java 2023年6月6日
    074
  • String与StringBuilder相互转换以及获取字符串中第一个中文汉字

    String与StringBuilder相互转换 1. StringBuilder转为String StringBuilder sb = new StringBuilder(); …

    Java 2023年6月14日
    075
  • Java面试题整理

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月7日
    082
  • Jenkins持续集成入门到精通(进阶篇)

    视频参考:https://www.bilibili.com/video/BV1Vp4y1b7ZN?p=51 Jenkins+Docker+SpringCloud持续集成流程说明 大…

    Java 2023年6月8日
    0103
  • POSIX 线程的创建与退出

    创建线程: 退出线程: 使用多线程,首先就需要创建一个新线程。那么线程是如何被创建的呢,是用下面这个函数创建的。 创建函数的四个参数的意义分别如下: 返回值:如果函数执行成功,则返…

    Java 2023年5月30日
    082
  • MySQL-InnoDB-MVCC多版本并发控制

    一、MySQL可重复读级别下,因为MVCC引起的BUG,下图1为相应的Java代码,其中事务1的生命周期最长,循环开启的事务2、3、4。。。与事务1并行 ,数据的读取只会成功一次,…

    Java 2023年6月16日
    052
  • Java后端WebSocket的Tomcat实现

    一.WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了。近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览…

    Java 2023年5月29日
    088
  • Linux服务器启动jstatd服务

    Linux,jstatd,Linux服务器启动jstatd服务 Linux服务器启动jstatd服务 1.查找jdk所在目录 2.在jdk的bin目录下创建文件jstatd.all…

    Java 2023年6月8日
    081
  • List与Set 介绍

    这是Collection的关系图(比较着网上画的)Set与List分别是Colleraction的子接口,而它们也有一些子类和接口Set : HashSet : 底层使用的数据结构…

    Java 2023年6月7日
    081
  • Spring Cloud Alibaba分布式事务组件 seata 详解(小白都能看懂)

    一,什么是事务(本地事务)? 指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 简单的说,事务就是并发控制的单位,是用户定义的一个操作序列。 _而一个逻辑…

    Java 2023年6月14日
    095
  • JVM垃圾回收器

    上篇我们知道垃圾回收机制,接下来,我们具体到垃圾回收器,看看JVM到底有哪些垃圾回收器。 一.GC性能指标 不可能三角 吞吐量:运行用户代码的时间占总运行时间的比例 暂停时间:进行…

    Java 2023年6月7日
    071
  • YOLOX 0.1.0 环境配置

    YOLOX训练自己的数据集 一、准备数据集 配置好Pascal VOC格式的数据集,放入datasets文件夹下,或者跟项目名在同一级目录下也行。VOC数据集的格式为: VOCde…

    Java 2023年6月15日
    068
  • 200_RabbitMQ运维-持久化机制

    RibbitMQ持久化 RabbitMQ持久化消息 RabbitMQ非持久化消息 RabbitMQ持久化分类 RabbitMQ队列持久化的代码实现 测试步骤 RabbitMQ消息持…

    Java 2023年6月7日
    0107
  • idea创建类报错:This template did not produce a Java class

    在idea.exe.vmoptions 或 idea64.exe.vmoptions中加入配置-Djdk.util.zip.ensureTrailingSlash=false重启,…

    Java 2023年5月29日
    066
  • 链表反转类算法题

    反转链表类 NO1. 反转链表 给定一个长度为 n 的链表,反转该链表,输出表头。 方法一:迭代法(推荐使用) 算法流程: step 1 :特殊情况判断,空链表或只有一个结点的链表…

    Java 2023年6月15日
    085
  • Linux(CentOS)安装MinIo,详细教程,附防火墙端口开放操作

    Linux安装MinIo(已配置开机重启) 1,准备安装目录和文件 系统:CentOs #进入安装目录 cd /home/minio #在线下载二进制文件 wget https:/…

    Java 2023年6月15日
    068
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球