【译】Flutter 延迟组件原理与自定义 【包体积优化 _ 动态化

本文详细介绍了Flutter延迟组件的工作原理,包括通过dart的`loadLibrary()`调用触发下载、安装和加载的过程,如何通过延迟组件名称进行安装和卸载,以及自定义实现延迟组件下载的方法。此外,文章还提到了延迟组件必须构建为Android App Bundles才能工作,并且强调了在Android嵌入层中实现 DeferredComponentManager 的重要性。
摘要由CSDN通过智能技术生成

这个例子有以下特点:

  • 四个 Dart 库,其中 Dart 库 lib1 依赖于 lib2。lib1、lib3 和 lib4 被作为延迟组件导入到 flutter 应用程序的主代码中。
  • 四个加载单元,其中 id 为 1 的是基本单元,加载单元 2 同时包含 lib1 和 lib2。加载单元 3 和 4 分别包含 lib3 和 lib4。
  • 三个定义的延迟组件,加上一个隐式基本组件。延迟组件 1 包含加载单元 2 和静态资源。延迟组件 2 包含加载单元 3 和 4,没有静态资源。而延迟组件 3 是一个仅含静态资源的组件。
  • app-release.aab 是完整的构建输出文件,包含三个延迟组件以及基本组件。

.aab 文件中总包含一个未显式声明的基本组件,它包含核心的 Flutter 包以及最基本的应用程序代码。任何未被延迟加载的库都会被包含在基本加载单元中。如果没有生成基本单元以外的加载单元,这可能意味着延迟导入的文件不正确。

对于延迟导入的库而言,里面非延迟导入的文件,会被编译到一个加载单元中:

loadLibrary() 调用的生命周期

延迟组件主要通过 dart 中的 loadLibrary() 调用来触发被下载、安装和加载。这个调用在 dart2js 和 aot/native 中的处理是不同的。这里,我们梳理 loadLibrary() 调用转换为一个延迟组件的安装过程:

dart 中 loadLibrary() 会调用的 native 层的 Dart_DeferredLoadHandler 函数,该回调函数在DartIsolate::Initialize 中由 Dart_SetDeferredLoadHandler 设置。Dart 在内部检索分配给库的加载单元 ID,并将其传递给回调函数。回调到 DartIsolate::OnDartLoadLibrary。

加载单元 ID 然

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值