职位描述
一、概述 书接上文源码解读Flutter run机制的第四节 flutter build aot命令将dart源码编译成AOT产物,其主要工作为前端编译器frontend_server和机器码生成,本文先介绍前端编译器frontend_server的工作原理。 1.1 frontend_server命令 KernelCompiler.compile()过程等价于如下命令: // 该frontend_server命令 同时适用于Android和iOS flutter/bin/cache/dart-sdk/bin/dart \ flutter/bin/cache/artifacts/engine/darwin-x64/frontend_server.dart.snapshot \ --sdk-root flutter/bin/cache/artifacts/engine/common/flutter_patched_sdk/ \ --strong \ --target=flutter \ --aot --tfa \ -Ddart.vm.product=true \ --packages .packages \ --output-dill /build/app/intermediates/flutter/release/app.dill \ --depfile /build/app/intermediates/flutter/release/kernel_compile.d \ --"package" /lib/main.dart 可见,通过dart虚拟机启动frontend_server.dart.snapshot,将dart代码转换成app.dill形式的kernel文件。frontend_server.dart.snapshot入口位于Flutter引擎中的 flutter/frontend_server/bin/starter.dart。 1.2 frontend参数表 前端编译器的可选参数: 参数 说明 默认值 aot 在AOT模式下运行编译器(启用整个程序转换) false tfa 在AOT模式下启用全局类型流分析和相关转换 false train 通过示例命令行运行以生成快照 false incremental 以增量模式运行编译器 flase link-platform 批处理模式,平台kernel文件链接到结果的内核文件 true embed-source-text 源码加入到生成的dill文件,便于得到用于调试的堆栈信息 true track-widget-creation 运行内核转换器来跟踪widgets创建的位置 false strong 已过时flags true import-dill 从已存在的dill文件中引入库 null output-dill 将生成的dill文件输出路径 null output-incremental-dill 将生成的增量dill文件输出路径 null depfile 仅用于批量,输出Ninja的depfile packages 用于编译的.packages文件 null sdk-root SDK根目录的路径 ../../out/android_debug/flutter_patched_sdk target 确定哪些核心库可用,可取值vm、flutter、flutter_runner、dart_runner vm 增量模式运行编译器应该能加快编译速度 track-widget-creation、aot、tfa参数的使用场景 1.3 frontend_server执行流程图 (1)点击查看大图 frontend_server前端编译器将dart代码转换为AST,并生成app.dill文件,其中bytecode生成过程默认是关闭的。 (2)点击查看大图 <img src="/img/flutter_compile/FlutterComplile.
相关职位
Data Entry Officer (Kano)
JobQuip Sync
Kano, Nigeria
Staff Software Engineer - Developer Experience
JobQuip Sync
Atlanta, Georgia
Data Entry Officer (Rivers)
JobQuip Sync
Rivers, Nigeria
Data Entry Officer (Edo)
JobQuip Sync
Edo, Nigeria
Data Entry Officer (Delta)
JobQuip Sync
Delta, Nigeria
Partner Account Director
JobQuip Sync
Chicago