Flutter iOS减包方案

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

前言

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

1. Flutter 构建产物分析

分析Flutter的构建产物,发现一个完整的Flutter 模块包含三个部分,分别是:

  1. sdk大小:so库(Android)/Framework(iOS)
  2. Dart代码的构建产物(Android和iOS)
  3. Channel 层的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

  • 所以并没有想象中的那么大

Flutter iOS减包方案

而且iOS Flutter的sdk还可以进一步精简,因为Flutter的Framework都包含armv7和arm64,我们可以只用arm64,这样的话,sdk大小就只有8M

猜你喜欢

转载自juejin.im/post/5c0dd22ce51d455fc5426bb2