Flutter Android/iOS包大小分析

5,420 阅读2分钟

作者:腾讯 - 小德(任晓帅 koudleren)

前言

Flutter几乎从一开始就被人诟病SDK的包太大,真的是这样子吗?

1. Flutter 构建产物分析

分析Flutter的构建产物,发现包含四个部分,分别是:

  1. sdk大小:so库(Android)/Framework(iOS) 及 Native 代码
  2. Dart代码的构建产物(Android和iOS)
  3. PlatformChannel 的Android/iOS代码
  4. 资源文件

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