Flutter Android/iOS包大小分析
作者:腾讯 - 小德(任晓帅 koudleren)
前言
Flutter几乎从一开始就被人诟病SDK的包太大,真的是这样子吗?
1. Flutter 构建产物分析
分析Flutter的构建产物,发现包含四个部分,分别是:
- sdk大小:so库(Android)/Framework(iOS) 及 Native 代码
- Dart代码的构建产物(Android和iOS)
- PlatformChannel 的Android/iOS代码
- 资源文件
1.1 so库(Android)/FrameWork(iOS)
这部分是Flutter engine的so,包含各种平台的so,在release和debug模式下包含的so不同,造成包大小不同,这块对Flutter包大小影响很大。
Android包含的如下:
1. 在debug模式下,so库打入了x86_64、x86、arm64-v8a,总共22.28M
2. 在release模式下,so库只有armeabi-v7a,总共3.46M
iOS包含的如下:
1. 在debug模式下,Flutter的Framework包含x86_64、armv7、arm64,总共31M
2. 在release模式下,Flutter的Framework包含armv7、arm64,,总共13.8M
1.2 Dart代码的构建产物(Android和iOS)
在debug模式下,Android和iOS在Dart的JIT模式下生产中间产物,因为不是生产环境,我们就不分析了,主要看release模式下的区别。
在release模式下,Android生成的是Arm code,iOS生成的是Framework,这个Framework包含armv7和arm64
Dart代码的构建产物,依赖于业务的规模,业务越大,资源文件越多,这块所占的空间也会越大。
1.3 Channel 层的Android代码
第三个就是用来桥接Flutter和Native的Channel层代码,这部分代码所占的空间很小,几乎可以忽略不计;
1.4 资源文件
第四个是资源文件,包括图片等资源,这块大小主要取决于业务,如果业务的资源很多,这块也很难减下去,木有办法的;
Flutter 真的很大吗?
经过以上分析, Android release模式下,sdk大小为3.46M
iOS release模式下,sdk大小为13.8M
- 所以并没有想象中的那么大
结论
在Release模式下
- Android 为 3.46M
- iOS为 13.8MM
转载自:https://juejin.cn/post/6844903737060950030