应用程序大小

应用程序大小是所以需要上线的APP所需要关注的指标,对应 Android 开发者来说,引入 Flutter 之后需要关注所带来的体积增长,那体积的增长主要来自以下几个方面:

  • Flutter 库
  • dart 库
  • 应用代码,三方库
  • 资源文件

我们可以先看看 Android 项目中引入 Flutter 后文件是怎么分布的,如下图所示:

flutter

编译打包之后,可以看到新增了 libflutter.so 和 libapp.so,这两个玩意一个是 Flutter 库,一个是你自身代码以及引入的三方库。

包体积优化

那主要优化的思路有一下几点:

  • 去除不需要支持的架构;
  • 删除没有使用的资源文件,对图片进行压缩
  • 删除没有使用的三方库
  • 优化代码
  • 混淆

去除不需要支持的架构

这个比较简单,只需要在 gradle 配置中进行配置就行,如下:

defaultConfig {
  ...
  ndk {
      abiFilters 'armeabi-v7a', "arm64-v8a"
  }
}

删除没有使用的资源文件,对图片进行压缩;删除没有使用的三方库;这两点自行check

代码检查是否有偏大文件

这里主要参考: https://flutter.dev/docs/perf/app-size

在 Flutter 1.22 以及 DevTools 0.9.1 版本后,支持release版本代码大小测量,可以很直观看到主要大小消耗在什么地方。

这个只需要在编译时加上 --analyze-size 标识即可

  • flutter build apk –analyze-size
  • flutter build appbundle –analyze-size
  • flutter build ios –analyze-size
  • flutter build linux –analyze-size
  • flutter build macos –analyze-size
  • flutter build windows –analyze-size

对于 apk 和 appbundle 还可以添加平台架构,如:--target-platform android-arm

通过上述编译,可以得到如下图所示的结果:

flutter_analyze1

flutter_analyze2

该命令主要有两个作用:

  • 在编译 Dart 代码时会记录 Dart packages 中代码大小的使用情况。
  • 输出应用大小相关的具体细节,并将结果最终保存在 -code-size-analysis_.json 文件中供我们使用 DevTools 做进行分析。

可以通过以下命令利用 DevTools 查看(如已经安装可忽略第一条):

flutter pub global activate devtools;
flutter pub global run devtools --appSizeBase=apk-code-size-analysis_02.json

DevTools 查看如图所示:

flutter_analyze3

对于比较大的文件,可以自行分析该如何进一步优化

Dart混淆

混淆暂时没有加,暂时不推荐,无法预料会出什么问题

可以参考:https://flutter.dev/docs/deployment/obfuscate

主要参考

文件大小测量:https://flutter.dev/docs/perf/app-size

混淆:https://flutter.dev/docs/deployment/obfuscate

android flutter:https://flutter.dev/docs/deployment/android

blog appsize:https://itnext.io/reducing-flutter-app-size-570db9810ebb

blog obfucating:https://medium.com/flutterdevs/obfuscating-the-flutter-app-80a190ed7540