Flutter 的 kernel_blob.bin 是什么?

Inq*_*r K 6 flutter

每次我做颤振构建时,我都会得到一个文件更改

ios/Flutter/flutter_assets/kernel_blob.bin

在提交和重建之后,由于这个文件,我遇到了很多冲突。

这个文件是什么?我应该 .gitignore 这个吗?

cbr*_*ken 12

简短的回答是,该文件是由 Flutter 工具链中的编译器生成的应用程序代码的Dart 内核字节码表示。当你的 Dart 代码发生变化时,你应该期望构建kernel_blob.bin也会发生变化。

更详细地说,该flutter工具负责管理 Flutter 应用程序的构建管道。由于您的示例是一个 iOS 示例,因此我将描述一个 iOS 版本。在编译 via 期间flutter build,该工具执行以下操作:

  1. 将源代码编译为 Dart 内核字节码: flutter 工具会定位您的应用程序的主要入口点(默认情况下lib/main.dart)并将其交给 Dart 内核编译器。内核编译器遍历导入图,并将内核字节码发送到kernel_blob.bin.
  2. 将内核编译为 ARM 程序集:在 AOT 构建(配置文件或发布模式)中,内核字节码然后传递给gen_snapshot工具,该工具在 iOS 上发出 ARM 汇编代码(我们这样做两次,一次用于 32 位,一次用于 64 位)。
  3. 将程序集编译为 iOS 框架:使用clang编译器将每个位的程序集代码编译为 iOS 共享库(.dylib 文件)。然后我们使用lipo(Xcode 工具链的一部分)将两个 .dylibs 合并为一个通用二进制文件并将其包装为一个框架,包括 verison info、Info.plist 等。这作为 .dylib 发出App.framework
  4. 生成 iOS .app 包:您的应用程序的本机部分被编译成 iOS .app 包。双方App.framework(您的应用程序)和Flutter.framework(颤振引擎/运行时)被捆绑到应用程序的框架目录。
  5. 将应用程序安装到设备:.app 文件安装到连接的设备并可选择启动。

你应该忽略该文件(及其余build在你的目录).gitignore