赞
踩
有如下数据,表示在现有项目的ipa/apk集成Flutter后的大小变化
before | after | |
---|---|---|
iOS | 22KB | 5MB |
Android | 2.3MB | 7MB |
在分析之前,先要了解Flutter的dart语言。
Dart 是谷歌在 2011 年推出的编程语言,是一种结构化 Web 编程语言。在FlutterSDK中的Dart支持两种运行模式JIT(Just In Time)和AOT(Ahead Of Time)。
JIT模式,将Dart代码编译成中间代码,在应用运行时,将中间代码编译成机器码执行,这种运行模式主要用于开发调试时跟踪代码;
AOT模式,直接将Dart代码编译成机器码,因为不需要在运行时编译操作,所以这种运行模式效率更高,生产包都应该使用AOT模式。
如图所示,展示了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_data
和isolate_snapshot_instr
vm_snapshot_data
和vm_snapshot_instr
*_snapshot_instr
文件是机器指令文件,instr == instruction
*_snapshot_data
文件是数据文件,图片/字体等资源文件映射都包含在其中
这些文件的具体作用,待后继分析Flutter Engine源码
如图展示了Flutter的iOS应用debug和release包主要结构:
Flutter.framework
包含了国际化文件icudlt.dat
和Flutter的依赖库文件Flutter
*_snapshot_data
、*_snapshot_instr
和kernel_blob.bin
文件App
文件远大于debug包中的App
文件,可以看出*_snapshot_data
、*_snapshot_instr
和kernel_blob.bin
文件,最终都打包进了App
文件文件的具体作用,待后继分析Flutter Engine源码
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。