Flutter的kernel_blob.bin是什么?

时间:2018-11-19 05:02:23

标签: flutter

每次我进行Flutter构建时,都会得到文件更改

'there will be stored names(id) of all DataGridView controls Private allGrids As String = "" Private Sub getAllGrids() 'loop through all controls on a form For Each c As Control In Me.Controls If TypeOf c Is DataGridView Then 'if control is DataGridView, then collect her name(id) allGrids += c.Name.ToString + "," Else 'if control isn't type of DataGridView and have child control(s), loop through that control '(for example Panel, TableLayoutPanel,GroupBox, ...) If c.HasChildren = True Then getAllGrids(c) End If Next End Sub Private Sub getAllGrids(cnt As Control) 'loop through all controls on a "container" control 'the search principle is the same like in getAllGrids on a form For Each c As Control In cnt.Controls If TypeOf c Is DataGridView Then 'collect DataGridView name(id) allGrids += c.Name.ToString + "," Else 'subroutine call hisself again with new control If c.HasChildren = True Then getAllGrids(c) End If Next End Sub Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load MsgBox(allGrids) End Sub

提交并重建后,由于该文件,我遇到很多冲突。

这是什么文件?我应该忽略这个吗?

1 个答案:

答案 0 :(得分:0)

简短的答案是,此文件是Flutter工具链中的编译器生成的应用程序代码的Dart kernel bytecode表示形式。当Dart代码更改时,您应该期望内置的kernel_blob.bin也将更改。可以安全地忽略.gitignore中的该文件。

更详细一点,flutter工具负责管理Flutter应用程序的构建管道。由于您的示例是一个iOS示例,因此我将介绍一个iOS构建。通过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合并为通用二进制文件,并将其包装为框架,包括版本信息,Info.plist等。它以{{1}的形式发出}。
  4. 生成iOS .app包:您的应用的本机位已编译为iOS .app包。 App.framework(您的应用程序)和App.framework(Flutter引擎/运行时)都捆绑在应用程序的框架目录中。
  5. 将应用安装到设备上 :. app文件已安装到连接的设备上,并且可以选择启动。