当前位置:首页 > 闲鱼技术 > 正文内容

Flutter瘦身大作战

xianyu3年前 (2021-03-09)闲鱼技术277

作者:闲鱼技术-三莅

微信号:pps788888
添加微信, 免费测试软件
复制微信号

背景

闲鱼技术团队于2018年上半年率先引入了Flutter技术实现客户端开发,到目前为止成功改造并上线了复杂的商品详情和发布业务。随着改造业务的增多,安装包体积急剧上增。安装包体积决定了用户等待下载的时间和可能会耗费的流量,如何控制安装包体积,减小flutter产物的大小成为当务之急。本文从闲鱼客户端项目实践角度给出了一些通用的包大小检测以及优化方案,希望为对Flutter感兴趣的团队提供参考。

闲鱼客户端采用的Flutter和Native混合开发的模式,下面我们以ios端为例分析项目中flutter产物的大小(ipa包瘦身需求更为急切)。

ios工程对Flutter有如下依赖:

  • Flutter.framework : Flutter库和引擎
  • App.framework: dart业务源码相关文件
  • Flutter Plugin:编译出来的各种plugin的framework
  • flutter_assets:Flutter依赖的静态资源,如字体,图片等

第一次引入flutter版本改造详情页后,ipa包大小增加近20M,其中包括flutter引擎代码+被改造业务代码,继续发布页flutter改造后,ipa增加4M+。进一步分析解压ipa文件后发现Flutter.framework稳定保持在20M+的大小, 增加新的flutter业务——发布页之后,App.framework增幅近10M!

Flutter.framework是Flutter库和引擎的代码,我们能做的优化空间有限,先把目标放在dart业务相关的文件App.framework上。

Flutter产物大小分析

执行如下命令编译出一个release模式下的App.framework,并使用参数打印出产物具体大小

结果如下:

Instructions:代表AOT编译后生成的二进制代码大小

ReadOnlyData:代表生成二进制代码的元数据(例如PcDescriptor, StackMap,CodeSourceMap等)和字符串大小

VMIsolate/Isolate:代表剩下的对象的大小总和(例如代码中定义的常量和虚拟机特定元数据)

具体到业务层,想要分析各个业务模块所占用的大小该怎么办呢?

  1. 执行如下命令编译出一个arm64架构的App.framework,并将它的包组成结构放到指定目录build/aot.json文件中
  2. 使用dart命令将上一步生成的aot.json文件转化成结构可视化的网页

run_binary_size_analysis.dart是dart提供的一个分析工具,在flutter引擎源码中路径如下:

  1. 打开生成文件夹中的index.html即可分析具体业务所占用的大小,右上角的Large Symbols和Large Files按钮可以直接定位体积占比从大到小的方法/文件。

举个例子,上面的分析显示方法占用了大量体积,跟踪发现这个方法主要的操作是将Map数据转化成对象

由此我们可以推断这种类型转换的操作会导致编译生成一些体积很大的代码。

优化措施

  1. 减少显示类型转换操作

按照上述分析发现显示的类型转换  这类操作会导致App.framework体积显著增加,主要是它会增加类型检查以及抛出异常的处理逻辑:

通过提取静态公用方法的方式可以成功减少400k+体积。

  1. 通过编译参数 和减小生成代码的体积

表示在生成的动态库文件中,不使用堆栈跟踪符号

表示混淆,通过减少变量名/方法名的方式减小代码体积

  1. 通过修改ios打包脚本xcode_backend.sh,删除dSYM符号表信息文件,App.framework成功减小20%的大小。dSYM 是保存 16 进制函数地址映射信息的中转文件,包含我们调试的 symbols,用来分析 crash report 文件,解析出正确的错误函数信息。

使用xcrun命令将dSYM从framework中剥离出来,可以大大减小App.framework的体积。

  1. 减少flutter和native资源重复造成的体积增大

利用桥接的方式,flutter直接使用Platform端资源文件,避免因为资源文件重复导致的包大小增加问题。

主要方式是通过BasicMessageChannel在Flutter和Platform端传递信息。Flutter端将资源名AssetName传递给Platform端,Platform端接收到AssetName后,根据name定位到资源文件,并将该文件以二进制数据格式,通过BasicMessageChannel传递回Flutter端。

总结

引入Flutter带来的安装包体积问题会给很多技术团队带来困扰。通过以上措施,Flutter产物App.framework的大小减少30%+,闲鱼技术团队后续也会考虑采取下载并懒加载等方式减少资源占用的体积;继续代码生成中的各种对比,排查避免较大产物的写法,同时也会和Google一起进一步寻找优化空间。

<

扫描二维码推送至手机访问。

版权声明:本文由中客网络发布,如需转载请注明出处。

本文链接:http://www.zzzmc.cc/61.html

分享给朋友:

相关文章

闲鱼卖家中心违规记录怎么查?_小千记团队_闲鱼助手教程技巧培训_闲鱼流量曝光提升

闲鱼卖家中心违规记录怎么查?_小千记团队_闲鱼助手教程技巧培训_闲鱼流量曝光提升

  我相信,当许多小伙子经营发展他们的闲置鱼时,他们自己遇到违规问题行为。当你收到一个官方警报,你可以通过系统消息中的链接这样做。如果您没有进行及时有效处理它,您也可以通过违反录制。需要处理和解决,这份记录需要重新审核吗? 检验方法是什么? 让我们看看!   01方法一打开应用程序,找到“我的”然后找到鱼类免费服务,点击进入,在这里可以找到违规记录。   02方法二可以在通用中找到“违规”,然后点击,接着点击右边的向下箭头,展开可以找到违规记录。   方法三:可以点击查询账户违规,我们可以得到两种查询违规的方法,第一,选择闲鱼应用程序,点击消息,选择系统消息,点击下面查看过去...

闲鱼有哪些运营模式?

闲鱼有哪些运营模式?

  闲鱼有哪些运营模式?      2020年09月07日   闲鱼流量   92 views   0   【闲鱼浏览量】众所周知,每个商场都有属于自己的运营模式。通过这些运营模式,我们可以得到很大的利润。淘宝有淘宝的运营模式,京东有京东的运营模式,那么闲鱼的运营模式是什么呢?   运营模式:发布商品时,切记规范商品。   准则一:标题一定要写满30个字。   30个字能把卖家分到两个极端,一个极端是怎么凑字也凑不完30个字的卖家,另一个极端是认为30个字不够写的卖家。不过这两类卖家其实是一样的,他们都不能把自己的标题准确到30个字。如果认...

闲鱼如何写吸引人的文案?

闲鱼如何写吸引人的文案?

  【闲鱼流量暴增系统】闲鱼如何写吸引人的文案?      2020年08月13日   闲鱼排名   88 views   0   在闲鱼上卖货,拥有一个完美的文案就成功了一半,那么,如何打造一个完美的文案呢?什么文案才吸引人呢?什么商品文案能够打造爆款呢?下面让小编来为你分享一些非常有用的商品文案,拥有这些文案,你的商品会成为闲鱼爆款。   一:打造一个“正常”的文案。   如何打造呢?   首先,把握关键词,在关键词中体现该商品的特点。很多在闲鱼上买东西的买家都希望商品便宜,所以在你的商品关键词中,一定要体现出商品优惠的优势,那么你就可...

玩转闲鱼排名的小方法!轻轻松松上首页

玩转闲鱼排名的小方法!轻轻松松上首页

  【闲鱼批量上架软件】想要玩转闲鱼,想要提高闲鱼的排名,其实没有大家想的那么难,首先我们要了解排名规则,再了解之后加以利用,那么今天小编就来给大家分析分析排名规则。   首先,抛开时间对排名的影响,同一时间发布的东西浏览量与想要次数以及销量多的宝贝所占的权重比较大,也就是说,浏览量能让宝贝排名靠前,想要次数以及销量能够吸引更多顾客的购买欲,其次,闲鱼的排名和时间有关系,所以在选择发不是么事,我们可以选择在早上八点到九点,中午11点到一点,晚上六点之后。   【闲鱼批量上架软件】除了以上注意点之外,小编还为大家总结了排名的解析,首先,产品标题的完整度以及宝贝的描述是否充分?第二,宝...

为什么闲鱼无意中总是违规?

为什么闲鱼无意中总是违规?

  【闲鱼助手】为什么闲鱼无意中总是违规?      2020年10月30日   闲鱼助手   47 views   0   随着社会经济的快速健康发展,越来越多的人就会进行选择可以通过闲鱼卖货发展副业。但是当商家真的入驻闲鱼之后,商家才发现:原来在闲鱼上卖货需要如此多的销售方法和技巧。   一些企业会因为不知道鱼的规则和经常违反。   大家都知道,鱼的违规行为发生后,鱼的浏览量和曝光量都会因为你店铺的违规行为而下降,所以商家想要在鱼身上卖东西,一定要记住不要违规。   一般如果发布不了商品,闲鱼是会有提示的。提示有违规行为记录,可以去闲鱼...

增加的关键就在于软件的使用

增加的关键就在于软件的使用

  描述:现在网络销售已经成为一种风靡的销售模式。比较起很多的线下销售来说,线上销售不需要有特定的店面,不需要有大量的员工去维持必要的工作,更不需要支付很多的日常费用,因此对于很多小成本的卖家来说,网络销售比线下销售的成本要来得低多了。但是随着线上的平台日益增多,我们的选择也变得复杂多了,其中闲鱼成为很多的卖家的第一选择。   选择闲鱼的原因   第一,闲鱼比淘宝或者其他的平台进行货物上架的资格相对没有那么严。比如说淘宝需要有至少1000元的押金,如果想要在淘宝上面开店面,还需要想办法搞钻,或者皇冠等等,甚至还有部分的店是需要有门店,才能够在淘宝上面开店面的。但是闲鱼不需要那么多的...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。