作者:腾讯 - 小德(任晓帅 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

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

结论

在Release模式下

  • Android 为 3.46M
  • iOS为 13.8MM

Flutter Android/iOS包大小分析相关推荐

  1. Flutter 打包iOS包出现 ld: bitcode bundle could not be generated because

    在开发过程中我们在打包iOS项目的时候可能会出问题意想不到的问题,这不今天就被我遇到了一个问题 ld: bitcode bundle could not be generated because 我这 ...

  2. 今日头条优化实践: iOS 包大小二进制优化,一行代码减少 60 MB 下载大小

    摘要 苹果对 iOS App 大小有严格限制:下载大小超限会阻碍用户在蜂窝网络下载 App ,直接影响新用户转化:可执行文件超限将导致 App 审核被拒,直接影响上架.今日头条探索实践 __TEXT ...

  3. 基于clang插件的一种iOS包大小瘦身方案

    引子 \ 包瘦身,包瘦身,包瘦身,重要的事情说三遍. \ 最近公司一款iOS APP(本文只讨论使用Objective C开发的iOS安装包)一直在瘦身,我们团队的APP也愈发庞大了.而要解决这个问题 ...

  4. android 心跳包的分析

    android 心跳的分析 最近在做一个项目中用到了心跳包的机制,其实就是传统的长连接.或许有的人知道消息推送的机制,消息推送也是一种长连接 ,是将数据有服务器端推送到客户端这边从而改变传统的&quo ...

  5. android apk包大小优化详解

    1.使用开发工具 android studio Build > Analyz APK 2.文件说明 assets:存放一些配置文件 res:资源文件,图片.字符串.xml等 classes.de ...

  6. Android IOS WebRTC 音视频开发总结(八十七)-- WebRTC中丢包重传NACK实现分析

    Android IOS WebRTC 音视频开发总结(八十七)-- WebRTC中丢包重传NACK实现分析 本文主要介绍WebRTC中丢包重传NACK的实现,作者:weizhenwei ,文章最早发表 ...

  7. android nio debug模式正常 release包crash_Flutter包大小治理上的探索与实践

    Flutter作为一种全新的响应式.跨平台.高性能的移动开发框架,在性能.稳定性和多端体验一致上都有着较好的表现,自开源以来,已经受到越来越多开发者的喜爱. 但是,Flutter的引入往往带来包体积的 ...

  8. flutter 图片压缩_Flutter包大小治理上的探索与实践

    Flutter作为一种全新的响应式.跨平台.高性能的移动开发框架,在性能.稳定性和多端体验一致上都有着较好的表现,自开源以来,已经受到越来越多开发者的喜爱. 但是,Flutter的引入往往带来包体积的 ...

  9. Flutter framework在线上构建时的包大小优化

    混合开发线上构建之flutter包大小优化 前景 打包flutter flutter引擎包的来源 缩减fluter framework大小 总结 前景 因为项目要使用jenkins线上构建,所以整个项 ...

最新文章

  1. mysql 函数返回表格_mysql 数据分析如何实现日报、周报、月报和年报?
  2. shell 报错 shell-init: error retrieving current directory: getcwd: cannot access parent directories
  3. 急速JavaScript全栈教程
  4. python-os模块
  5. 【NLP】看不懂bert没关系,用起来so easy!
  6. python 备份交换机_干货 | 如何用python实现每天定时备份交换机配置文件? 真香~...
  7. mysql dsn 连接_各种数据库的连接串(总结DSN的使用方法)
  8. Redmi K20 Pro尊享版官宣:升级为骁龙855 Plus旗舰平台
  9. C语言局部变量、全局变量、静态局部变量、静态全局变量
  10. linux 驱动器发送信号,Linux设备驱动并发控制详解(自旋锁,信号量)
  11. 16复变函数的积分(二)
  12. php动态增加div,JavaScript动态创建div等元素实例
  13. 打开Lampix推出的台灯,即可在任何平面实现AR交互
  14. 酒店机器人:酒店增收提质的新引擎
  15. Sublime Text3的安装和使用
  16. Java学习笔记<2.3>面向对象
  17. 一个90后对前辈们的“ 宣战”
  18. 考博英语题型及难度分析
  19. 分众传媒天天挂在嘴边的“饱和攻击”,原来只是最强话术
  20. oculusquest2游戏安装方法教程(附百度云下载)quest2安装第三方VR应用游戏安装教程方法2021

热门文章

  1. TCP_DEFER_ACCEPT
  2. isalnum()函数:找出str字符串中为英文字母或数字的字符
  3. 常见数据结构与算法:拆分数字(暴力递归,动态规划)
  4. jvm:类加载器和类的加载过程
  5. springmvc三: REST
  6. 解决jmeter响应中文乱码及解码
  7. 连接 insance 到 vlan101 - 每天5分钟玩转 OpenStack(97)
  8. 1月12日,HTML学习笔记2
  9. [开源]KJFramework.Message 智能二进制消息框架 -- 性能提升
  10. Hyper-V下虚拟机无法启动的故障排除