美文网首页Flutter热更新
5. Flutter你想要的热更新之为dill瘦身

5. Flutter你想要的热更新之为dill瘦身

作者: amisarex | 来源:发表于2019-03-09 11:38 被阅读60次

    Flutter你想要的热更新之为dill瘦身

    1. 换了个马甲的 dill

    在 flutter_assets 有个 kernel_blob.bin 文件,其实在 2. Flutter你想要的热更新之Flutter资源加载 中就见过它,它出现在
    FlutterDartProject.mm 中,文件头部定义了:

    static const char* kApplicationKernelSnapshotFileName = "kernel_blob.bin";
    

    没错,这就是我们要加载的 Flutter 可执行文件,那么这个 kernel_blob.bin 中到底是什么内容那?

    进入这个文件的文件夹,在终端执行:

    strings kernel_blob.bin
    

    同样在 myapp/build 输出 app.dill:

    strings app.dill
    

    没错,它们是同一个文件,仅仅是换了个后缀和名称。

    截取部分输出,内部包含了 Dart 源文件注释:

    /// int _count = 0;
    /// Widget build(BuildContext context) {
    ///   return Scaffold(
    ///     appBar: AppBar(
    ///       title: Text('Sample Code'),
    ///     ),
    ///     body: Center(
    ///       child: Text('You have pressed the button $_count times.'),
    ///     ),
    ///     bottomNavigationBar: BottomAppBar(
    ///       child: Container(height: 50.0,),
    ///     ),
    ///     floatingActionButton: FloatingActionButton(
    ///       onPressed: () => setState(() {
    ///         _count++;
    ///       }),
    ///       tooltip: 'Increment Counter',
    ///       child: Icon(Icons.add),
    ///     ),
    ///     floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
    ///   );
    /// }
    

    2. 什么是 dill

    一句话: Dart 的中间语言到 Dart sdk 项目中了解更多

    3. 为 dill 瘦身

    一个 myapp 这么简单的 demo , kernel_blob.bin 居然有 14.8M 之多。
    对于 kernel_blob.bin 的瘦身,我目前只找到了一种方式:禁止生成的 kernel_blob.bin 中包含 Dart 源文件注释

    3.1 修改 compile.dart

    在 Flutter 开发环境仓库 compile.dart 文件的 class KernelCompiler 类中修改 command 编译参数列表,为其增加参数成员 --no-embed-source-text

    final List<String> command = <String>[
      engineDartPath,
      frontendServer,
      '--sdk-root',
      sdkRoot,
      '--strong',
      '--target=$targetModel',
      '--no-embed-source-text',
    ];
    

    3.2 重新构建 flutter_tools

    根据官方 wiki making-changes-to-the-flutter-tool 中说明,只要删除位于 Flutter 开发环境仓库 bin/cache/ 目录中的 flutter_tools.snapshot 文件,重新执行 flutter run 即可生成新的 flutter_tools 工具。

    3.3 重新生成 kernel_blob.bin

    1. 删除原 XCode flutter_assets 文件夹中的 kernel_blob.bin (不删除文件可能会无法生成瘦身后的新文件)。

    2. 运行 Flutter App

      flutter run --local-engine-src-path=/path/to/engine/src  --local-engine=ios_debug_sim_unopt
      
    3. 瘦身后的 kernel_blob.bin 文件应该在 5.7M 左右。

    4. 总结

    本章我们通过修改 flutter_tools 实现了对 Flutter 的 kernel 文件 kernel_blob.bin 的瘦身。通过 strings 命令查看 kernel_blob.bin ,我们会发现还存在进一步瘦身的可能,要想进一步减小 kernel_blob.bin 体积就必须更深入的了解 Flutter 及 Dart 的实现。

    原文地址:https://nuttalk.com/2019/03/09/flutter-hot-update-thin-dill/
    GitPages:https://github.com/amisare/amisare.github.io

    相关文章

      网友评论

        本文标题:5. Flutter你想要的热更新之为dill瘦身

        本文链接:https://www.haomeiwen.com/subject/amlspqtx.html