引导
在上一篇文章中,我们进行了apply patch文件,那么我们来看看apply的文件,具体做了哪些事情。可以看到是在common.dart文件做了更改,和新加了一个aspectd.dart文件
common.dart文件
该文件所在目录:
packages/flutter_tools/lib/build_system/targets/common.dart
可以看到在build方法新增了如下代码:
@override
Future<void> build(Environment environment) async {
// 这是原来的代码
await buildImpl(environment);
// 这是新增代码
if (await AspectdHook.isAspectdEnabled()) {
await AspectdHook().runBuildDillCommand(environment);
}
}
AspectdHook.isAspectdEnabled()
上面代码调用了AspectdHook.isAspectdEnabled(),看看这里面做了什么
static Future<bool> isAspectdEnabled() async {
final Directory currentDirectory = globals.fs.currentDirectory;
// 获取到aspectd_impl对应的目录,详情见下面
final Directory aspectdDirectory = getAspectdImplDirectory(currentDirectory);
// 如果该目录不存在,返回false,不走aspectd逻辑
if (!aspectdDirectory.existsSync()) {
return false;
}
// 拿到aspectd_imple项目下的.packages文件,因为要取该文件,所以我们需要先执行 pub get
final String aspectdImplPackagesPath = globals.fs.path.join(aspectdDirectory.absolute.path, '.packages');
// 通过.package文件中的数据,得到aspectd目录,从而得到frontend_server.dart.snapshot所在的目录,具体见下方
final Directory flutterFrontendServerDirectory = await getFlutterFrontendServerDirectory(aspectdImplPackagesPath);
// 判断如果aspectd_impl项目不存在或frontend_server.dart.snapshot对应目录不存在 及 对应的文件不存在的话返回false
if (!(aspectdDirectory.existsSync() &&
flutterFrontendServerDirectory.existsSync() &&
currentDirectory.absolute.path != aspectdDirectory.absolute.path &&
globals.fs
.file(globals.fs.path.join(aspectdDirectory.path, 'pubspec.yaml'))
.existsSync() &&
globals.fs
.file(
globals.fs.path.join(aspectdDirectory.path, '.packages'))
.existsSync() &&
globals.fs
.file(globals.fs.path.join(
aspectdDirectory.path, 'lib', aspectdImplPackageName + '.dart'))
.existsSync())) {
return false;
}
// 生成frontend_server.dart.snapshot,具体见下方
return await checkAspectdFlutterFrontendServerSnapshot(aspectdImplPackagesPath);
}