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)

大家都在看

  • 碎碎念六二

    07.01 心,完全沉静下来,阅读与创作,便是快乐的开始。 心静下来,做什么事情都会快乐的吧! 又是什么,让心静不下来呢?忧疑与恐惧,名利与渴望。 07.03 小心保存情感,蓄积,…

    Java 2023年6月9日
    065
  • 【动力节点Springboot学习笔记】Springboot集成redis

    今天这篇博客也是学习springboot做的学习笔记,关于springboot集成redis,分享给有需要的小伙伴们,视频看的动力节点 动力节点王鹤老师讲解的springboot教…

    Java 2023年6月7日
    071
  • IDEA快捷键究极整合,建议收藏!

    自动代码 常用的有fori/sout/psvm+Tab即可生成循环、System.out、main方法等boilerplate样板代码 。 例如要输入for(User user :…

    Java 2023年6月16日
    066
  • vue项目发布时Apache或者nginx配置

    当你项目发布时,项目所在目录是二级目录,并且使用的history路由,可以采用如下配置 apache配置 如果使用nginx配置前两步和apache配置一样 -step3 在本地目…

    Java 2023年5月30日
    060
  • Spring 源码(11)Spring Bean 的创建过程(2)

    Spring Bean 的创建过程介绍了 FactoryBean 的创建方式,那么接下来介绍不是 FactoryBean的创建方式,在创建过程中,又会分为单例的Bean的创建,原型…

    Java 2023年6月14日
    073
  • Nginx运行Mono Web (ASP.NET)

    Nginx配置asp.net更简单方便,用处也多,可以通过FastCGI运行asp.net, php等,通过反向代理做负载均衡,也可运行python web. 以Ubuntu为例 …

    Java 2023年5月30日
    052
  • Redis阻塞

    为什么阻塞 内部原因 (1)redis采用单线程处理请求,reactor是同步IO,需要等待命令执行完成,才会返回执行结果,然后进入下一个请求(队列) (2)持久化阻塞 (3)CP…

    Java 2023年6月5日
    050
  • 老徐和阿珍的故事:强引用、软引用、弱引用、虚引用,傻傻分不清楚

    人物背景:老徐,男,本名徐福贵,从事Java相关研发工作多年,职场老油条,摸鱼小能手,虽然岁数不大但长的比较着急,人称老徐。据说之前炒某币败光了所有家产,甚至现在还有欠债。阿珍,女…

    Java 2023年6月7日
    077
  • LeetCode随缘刷题之两数相加

    逐步解释,有说错的地方欢迎指正。 package leetcode.day_12_03; public class AddTwoNumbers0002 { public ListN…

    Java 2023年6月7日
    072
  • Git SSH访问+多帐号

    Git SSH访问+多帐号 本篇说一下 Git 通过 ssh 访问 以及配置 多个公钥,因为一些墙化软件原因,导致用Http访问Github总是会卡死,最后发现ssh 访问可以 1…

    Java 2023年6月9日
    083
  • python 汉诺塔移动(turtle方法)

    1,要求实现和线上移动汉诺塔过程 代码如下: 1 def hanoi(n, a, b, c): 2 if n == 1: 3 print(a, ‘–>’, c) 4 els…

    Java 2023年6月6日
    086
  • 获取数组子序列

    /** * 位对应法 * * @param array */ public void place(int[] array) { //获取数据长度 那么对应的就是二进制字节位数1存在…

    Java 2023年6月5日
    049
  • 设计模式-day04

    5.6 组合模式 ​ 对于这个图片肯定会非常熟悉,上图我们可以看做是一个文件系统,对于这样的结构我们称之为树形结构。在树形结构中可以通过调用某个方法来遍历整个树,当我们找到某个叶子…

    Java 2023年6月13日
    066
  • Mysql 5.7开启binlog日志

    Mysql 5.7开启binlog日志 前言 binlog是MySQL的二进制日志,并且是MySQL中最重要的日志。binlog记录了对MySQL数据库执行更改的所有操作,包括对数…

    Java 2023年6月15日
    085
  • Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

    Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件 Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件 – …

    Java 2023年6月7日
    086
  • 前后端分离,SpringBoot如何实现验证码操作

    验证码的功能是防止非法用户恶意去访问登录接口而设置的一个功能,今天我们就来看看在前后端分离的项目中,SpringBoot是如何提供服务的。 SpringBoot版本 本文基于的Sp…

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