如何获取某个 APP 所使用的 Flutter 的版本?

1. 解析 libapp.so 获取 snapshot hash:

0xdcdcf5f5 是 snapshot 的魔数,占 4 字节,

魔数后面紧跟着 8 字节是 length,

再后面 8 字节是 kind,

再后面 32 字节 是 snapshot hash。

2. snapshot hash 和 flutter 版本的对应关系:

官方提供了一个 Flutter 各个版本的版本信息:

https://storage.googleapis.com/flutter_infra_release/releases/releases_windows.json
https://storage.googleapis.com/flutter_infra_release/releases/releases_linux.json
https://storage.googleapis.com/flutter_infra_release/releases/releases_macos.json

我们主要关注 release 中的内容,以 flutter 3.15.0-15.1.pre 版本为例:

    {
      "hash": "b2ec15bfa37e6ecdc1f68e7dc6960422648fc6d6",
      "channel": "beta",
      "version": "3.15.0-15.1.pre",
      "dart_sdk_version": "3.2.0 (build 3.2.0-134.1.beta)",
      "dart_sdk_arch": "x64",
      "release_date": "2023-09-15T17:00:54.507285Z",
      "archive": "beta/linux/flutter_linux_3.15.0-15.1.pre-beta.tar.xz",
      "sha256": "6fc2503bc70b69d7d063dc27216c0d24da5b31886ff9654a9fa0d28bc50190f8"
    }

hashflutter 仓库中,3.15.0-15.1.pre 版本所对应的 revision number,我们可以在 github 上 查看 flutter 的 tags:

flutter_tags

查看此次的变动:

flutter_commit

注意 engine.version 文件的变动,这是 flutter 3.15.0-15.1.pre 版本所对应的 engine 仓库的 revision number。同样的,查看 github 上 engine 仓库的 tags 确认一下:

engine_tags

查看此次的变动:

engine_commit

只更新了 DEPS 文件中的 dart_revision,及 3.15.0-15.1.pre 版本所对应的 dart sdk 的 revision number。

在 dart 仓库下的 tools 目录下有个 make_version.py 脚本,这个脚本是用来生成 snapshot hash 的。

  1. 先 checkout 到指定的 revision:

    git checkout 4d7636806fcd58a266973da52d39385fdefb254c
    
  2. 创建 input file 和 output file,input file 的内容为 {{SNAPSHOT_HASH}},output file 为空文件,用于输出 snapshot hash;

  3. 运行 make_version.py 脚本:

    python tools/make_version.py --input=inputFile --output=inputFile
    
  4. 查看 output file 中的内容,即为 snapshot hash。

3. 总结:

  1. 解析 libapp.so 获取到 snapshot hash;
  2. 根据 flutter revision number 获取到对应的 engine revision number;
  3. 根据 engine revision number 获取到 dart revision number;
  4. 根据 dart revision number 获取到 snapshot hash;
  5. 与 libapp.so 的 snapshot hash 匹配是否相等;

4. 项目地址:

https://github.com/porum/FlutterLibChecker

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值