Flutter应用结构分析

Flutter应用结构分析,iOS/Android的ipa/apk结构分析

首先,

有如下数据,表示在现有项目的ipa/apk集成Flutter后的大小变化

beforeafter
iOS22KB5MB
Android2.3MB7MB
然后,开始分析集成了Flutter的iOS/Android应用结构:

在分析之前,先要了解Flutter的dart语言。
Dart 是谷歌在 2011 年推出的编程语言,是一种结构化 Web 编程语言。在FlutterSDK中的Dart支持两种运行模式JIT(Just In Time)和AOT(Ahead Of Time)。
JIT模式,将Dart代码编译成中间代码,在应用运行时,将中间代码编译成机器码执行,这种运行模式主要用于开发调试时跟踪代码;
AOT模式,直接将Dart代码编译成机器码,因为不需要在运行时编译操作,所以这种运行模式效率更高,生产包都应该使用AOT模式。

Android安装包结构

在这里插入图片描述

如图所示,展示了Flutter的Android应用打包后debug和release的区别:

  • icudlt.dat文件是国际化相关文件
  • *_snapshot_data*_snapshot_instr是Flutter引擎Isolate和Dart VM相关文件
  • kernel_blob.bin是JIT模式下Dart编译的中间代码

Android端debug和release的区别就在于:
debug包有kernel_blob.bin文件;
release包kernel_blob.bin被编译成了*_snapshot_instr文件

release包中*_snapshot_data*_snapshot_instr是成对出现的:

  • isolate_snapshot_dataisolate_snapshot_instr
  • vm_snapshot_datavm_snapshot_instr

*_snapshot_instr文件是机器指令文件,instr == instruction
*_snapshot_data文件是数据文件,图片/字体等资源文件映射都包含在其中

这些文件的具体作用,待后继分析Flutter Engine源码

iOS安装包结构

在这里插入图片描述

如图展示了Flutter的iOS应用debug和release包主要结构:

  • Flutter.framework包含了国际化文件icudlt.dat和Flutter的依赖库文件Flutter
  • 和Android一样,iOS的debug包中有 *_snapshot_data*_snapshot_instrkernel_blob.bin文件
  • iOS的release包中的App文件远大于debug包中的App文件,可以看出*_snapshot_data*_snapshot_instrkernel_blob.bin文件,最终都打包进了App文件

文件的具体作用,待后继分析Flutter Engine源码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值