Skip to content

Commit 49b08c2

Browse files
committed
release for 3.24.3
1 parent 435e0f5 commit 49b08c2

File tree

94 files changed

+1549
-904
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+1549
-904
lines changed

.fvmrc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"flutter": "3.24.3"
3+
}

.gitignore

100644100755
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,6 @@ build/
7676
!**/ios/**/default.mode2v3
7777
!**/ios/**/default.pbxuser
7878
!**/ios/**/default.perspectivev3
79+
80+
# FVM Version Cache
81+
.fvm/

.metadata

100644100755
File mode changed.

CHANGELOG.md

100644100755
File mode changed.

LICENSE

100644100755
File mode changed.

README.md

100644100755
Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22

33
编译frontend_server.dart.snapshot,让其具有aop的功能
44

5-
65
# 懒人做法,一步到位
7-
下载frontend_server.dart.snapshot并覆盖 flutter_macos_stable/bin/cache/artifacts/engine/darwin-x64/frontend_server.dart.snapshot和flutter_macos_stable/bin/cache/dart-sdk/bin/snapshots/frontend_server.dart.snapshot
6+
下载frontend_server.dart.snapshot并覆盖 ~/fvm/versions/3.24.3/bin/cache/artifacts/engine/darwin-x64frontend_server.dart.snapshot和~/fvm/versions/3.24.3/bin/cache/dart-sdk/bin/snapshots/frontend_server.dart.snapshot
87

98

109
# 编译之前
@@ -13,12 +12,17 @@
1312
这里建议用depot_tools的方式下载,因为直接下载github上的sdk,third_party目录下面不会有你需要的包
1413

1514
2. 将dart-sdk切换到flutter对应的版本,一般情况下flutter对应的dart版本是可以通用的,但是如果flutter有大版本升级,需要切换到对应的版本.
15+
3. 我是通过 fvm 管理 flutter 版本,如果你不是则需要注意下面命令的路径
1616

1717

1818
# 编译方式
19-
dart --deterministic --snapshot=frontend_server.dart.snapshot --snapshot-kind=kernel bin/starter.dart
2019

21-
dart --deterministic --snapshot=dump_kernel.dart.snapshot --snapshot-kind=kernel bin/dump_kernel.dart
20+
dart compile aot-snapshot --output=frontend_server_aot_macos.dart.snapshot --target-os macos bin/starter.dart
21+
dart compile aot-snapshot --output=frontend_server_aot_windows.dart.snapshot --target-os windows bin/starter.dart
22+
dart compile aot-snapshot --output=frontend_server_aot_linux.dart.snapshot --target-os linux bin/starter.dart
23+
24+
dart compile kernel --output=dump_kernel.dart.snapshot bin/dump_kernel.dart
25+
2226

2327
# 测试编译
2428
1. 生成kernel_snapshot.d,先用普通方法run一下example,在example/.dart_tool/flutter_build下面会有生成编译临时的文件
@@ -27,35 +31,53 @@ dart --deterministic --snapshot=dump_kernel.dart.snapshot --snapshot-kind=kernel
2731

2832

2933
## 编译aot dill
30-
dart run frontend_server.dart.snapshot --sdk-root /Users/lixin/Documents/flutter_macos_stable/bin/cache/artifacts/engine/common/flutter_patched_sdk/ --target=flutter --aot --tfa --no-print-incremental-dependencies -Dflutter.inspector.structuredErrors=true -DFLUTTER_WEB_AUTO_DETECT=true -Ddart.vm.profile=false -Ddart.vm.product=false --enable-asserts --track-widget-creation --packages /Users/lixin/Documents/FlutterWorkspace/aspect_frontend_server/example/.dart_tool/package_config.json --output-dill app.dill --depfile /Users/lixin/Documents/FlutterWorkspace/aspect_frontend_server/example/.dart_tool/flutter_build/1f083b7beecc20d87dfa8f7e4ca58986/kernel_snapshot.d package:example/main.dart
34+
.fvm/flutter_sdk/bin/cache/dart-sdk/bin/dartaotruntime frontend_server_aot.dart_macos.snapshot --sdk-root ~/fvm/versions/3.24.3/bin/cache/artifacts/engine/common/flutter_patched_sdk/ --target=flutter --aot --tfa --no-print-incremental-dependencies -Dflutter.inspector.structuredErrors=true -DFLUTTER_WEB_AUTO_DETECT=true -Ddart.vm.profile=false -Ddart.vm.product=false --enable-asserts --track-widget-creation --packages example/.dart_tool/package_config.json --output-dill app.aot --depfile example/.dart_tool/flutter_build/31a7f421330fdca23d68f3c09767c0a5/kernel_snapshot.d package:example/main.dart
35+
36+
注意:31a7f421330fdca23d68f3c09767c0a5 这个需要修改成你目录下面的缓存路径
3137

3238
## 编译运行时dill
33-
dart run frontend_server.dart.snapshot --sdk-root /Users/lixin/Documents/flutter_macos_stable/bin/cache/artifacts/engine/common/flutter_patched_sdk/ --target=flutter --no-print-incremental-dependencies -Dflutter.inspector.structuredErrors=true -DFLUTTER_WEB_AUTO_DETECT=true -Ddart.vm.profile=false -Ddart.vm.product=false --enable-asserts --track-widget-creation --packages /Users/lixin/Documents/FlutterWorkspace/aspect_frontend_server/example/.dart_tool/package_config.json --output-dill app.dill --depfile /Users/lixin/Documents/FlutterWorkspace/aspect_frontend_server/example/.dart_tool/flutter_build/1f083b7beecc20d87dfa8f7e4ca58986/kernel_snapshot.d package:example/main.dart
39+
.fvm/flutter_sdk/bin/cache/dart-sdk/bin/dartaotruntime frontend_server_aot.dart_macos.snapshot --sdk-root ~/fvm/versions/3.24.3/bin/cache/artifacts/engine/common/flutter_patched_sdk/ --target=flutter --no-print-incremental-dependencies -Dflutter.inspector.structuredErrors=true -DFLUTTER_WEB_AUTO_DETECT=true -Ddart.vm.profile=false -Ddart.vm.product=false --enable-asserts --track-widget-creation --packages example/.dart_tool/package_config.json --output-dill app.dill --depfile example/.dart_tool/flutter_build/31a7f421330fdca23d68f3c09767c0a5/kernel_snapshot.d package:example/main.dart
40+
41+
注意:31a7f421330fdca23d68f3c09767c0a5 这个需要修改成你目录下面的缓存路径
42+
43+
44+
45+
.fvm/flutter_sdk/bin/cache/dart-sdk/bin/dartaotruntime frontend_server_aot.dart_macos.snapshot --sdk-root /Users/lixin/fvm/versions/3.24.3/bin/cache/artifacts/engine/common/flutter_patched_sdk/ --target=flutter --no-print-incremental-dependencies -Ddart.vm.profile=true -Ddart.vm.product=false --delete-tostring-package-uri=dart:ui --delete-tostring-package-uri=package:flutter --track-widget-creation --aot --tfa --target-os macos --packages /Users/lixin/Documents/FlutterWorkspace/aspect_frontend_server/example/.dart_tool/package_config.json --output-dill program.dill --depfile /Users/lixin/Documents/FlutterWorkspace/aspect_frontend_server/example/.dart_tool/flutter_build/6b9ed135a83e69e25931946e49bdcd50/kernel_snapshot_program.d --verbosity=error package:example/main.dart
46+
3447

3548
## 测试aot编译成二进制
36-
/Users/lixin/Documents/flutter_macos_stable/bin/cache/artifacts/engine/android-arm64-release/darwin-x64/gen_snapshot --deterministic --snapshot_kind=app-aot-elf --elf=app.so --strip app.dill
49+
~/fvm/versions/3.24.3/bin/cache/artifacts/engine/android-arm64-release/darwin-x64/gen_snapshot --deterministic --snapshot_kind=app-aot-elf --elf=app.so --strip app.dill
3750

3851
## dill 文件注入成功检测
3952
dart run dump_kernel.dart.snapshot app.dill injected.out.dill.txt
4053

4154

55+
dart run dump_kernel.dart.snapshot /Users/yourname/Documents/FlutterWorkspace/aspect_frontend_server/example/.dart_tool/flutter_build/31a7f421330fdca23d68f3c09767c0a5/app.dill injected.out.dill.txt
56+
57+
## 测试生成汇编上下文
58+
.fvm/versions/3.24.3/bin/cache/artifacts/engine/darwin-x64-release/gen_snapshot_x64 --deterministic --snapshot_kind=app-aot-assembly --assembly=/Users/yourname/Documents/FlutterWorkspace/aspect_frontend_server/snapshot_assembly.S /Users/yourname/Documents/FlutterWorkspace/aspect_frontend_server/app.dill
59+
60+
61+
4262
# 替换flutter中的frontend_server.dart.snapshot
43-
1.将新编译的frontend_server.dart.snapshot覆盖 flutter_macos_stable/bin/cache/artifacts/engine/darwin-x64/frontend_server.dart.snapshot
63+
1.将新编译的frontend_server_aot.dart.snapshot覆盖 ~/fvm/versions/3.24.3/bin/cache/dart-sdk/bin/snapshots
4464

45-
2.将新编译的frontend_server.dart.snapshot覆盖 flutter_macos_stable/bin/cache/dart-sdk/bin/snapshots
65+
2.注意替换系统对应的版本,如果是 macos 则是 frontend_server_aot_macos.dart.snapshot,因为我是 mac 系统,其他系统版本没测试过。
4666

4767
# 测试运行
4868
cd example && flutter clean && flutter pub get && flutter run
4969

5070
### 该方法和aspectd的区别
51-
1. aspectd不支持flutter 2.5.4以上,本项目最高支持到2.10.1,再高没有测过
71+
1. aspectd不支持flutter 2.5.4以上,本项目最高支持到2.23.3,再高没有测过
5272
2. aspectd使用前需要对flutter tools的代码进行修改,本项目只需要替换flutter sdk对应的frontend_server.dart.snapshot即可
5373
3. aspectd的实现原理过于复杂,本项目去掉了Call,Inject等用法保留了Execute用法的同时对注入逻辑进行了简化
5474
4. aspectd还需要aspect_impl等,本项目可以直接在主程序代码中添加注入代码,也可以用plugin的方式添加
5575
5. 本项目不需要引入任何第三方包,用pragma注解完成对应插桩
56-
6. 可以有限制支持hot reload,完全支持hot restart,免去了冷重启的烦恼
76+
6. 完全支持hot restart,免去了冷重启的烦恼
5777
7. 为了性能优化inject方法限制必须是static的
58-
8. 添加对全局所有的catch进行注入
78+
79+
80+
5981

6082

6183

analysis_options.yaml

100644100755
File mode changed.

bin/dump_kernel.dart

100644100755
Lines changed: 3 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,5 @@
1-
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
2-
// for details. All rights reserved. Use of this source code is governed by a
3-
// BSD-style license that can be found in the LICENSE file.
1+
import 'package:kernel/src/tool/dump.dart' as dump;
42

5-
import 'dart:io';
6-
7-
import 'package:kernel/kernel.dart' show Component, writeComponentToText;
8-
import 'package:kernel/binary/ast_from_binary.dart'
9-
show BinaryBuilderWithMetadata;
10-
11-
import 'package:vm/metadata/direct_call.dart' show DirectCallMetadataRepository;
12-
import 'package:vm/metadata/inferred_type.dart'
13-
show InferredTypeMetadataRepository;
14-
import 'package:vm/metadata/procedure_attributes.dart'
15-
show ProcedureAttributesMetadataRepository;
16-
import 'package:vm/metadata/table_selector.dart'
17-
show TableSelectorMetadataRepository;
18-
import 'package:vm/metadata/unboxing_info.dart'
19-
show UnboxingInfoMetadataRepository;
20-
import 'package:vm/metadata/unreachable.dart'
21-
show UnreachableNodeMetadataRepository;
22-
import 'package:vm/metadata/call_site_attributes.dart'
23-
show CallSiteAttributesMetadataRepository;
24-
import 'package:vm/metadata/loading_units.dart'
25-
show LoadingUnitsMetadataRepository;
26-
27-
final String _usage = '''
28-
Usage: dump_kernel input.dill output.txt
29-
Dumps kernel binary file with VM-specific metadata.
30-
''';
31-
32-
main(List<String> arguments) async {
33-
if (arguments.length != 2) {
34-
print(_usage);
35-
exit(1);
36-
}
37-
38-
final input = arguments[0];
39-
final output = arguments[1];
40-
41-
final component = new Component();
42-
43-
// Register VM-specific metadata.
44-
component.addMetadataRepository(new DirectCallMetadataRepository());
45-
component.addMetadataRepository(new InferredTypeMetadataRepository());
46-
component.addMetadataRepository(new ProcedureAttributesMetadataRepository());
47-
component.addMetadataRepository(new TableSelectorMetadataRepository());
48-
component.addMetadataRepository(new UnboxingInfoMetadataRepository());
49-
component.addMetadataRepository(new UnreachableNodeMetadataRepository());
50-
component.addMetadataRepository(new CallSiteAttributesMetadataRepository());
51-
component.addMetadataRepository(new LoadingUnitsMetadataRepository());
52-
53-
final List<int> bytes = new File(input).readAsBytesSync();
54-
new BinaryBuilderWithMetadata(bytes).readComponent(component);
55-
56-
writeComponentToText(component, path: output, showMetadata: true);
3+
void main(List<String> args) {
4+
dump.main(args);
575
}

bin/starter.dart

100644100755
Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,34 @@
11
import 'dart:io';
22
import 'package:args/args.dart';
33
import 'package:aspect_frontend_server/aspect_frontend_server.dart';
4+
import 'package:aspect_frontend_server/proxy/frontend_server_proxy.dart';
45

56
import 'package:frontend_server/frontend_server.dart' as frontend;
67
import 'package:frontend_server/starter.dart';
78

8-
import 'package:aspect_frontend_server/proxy/frontend_server_proxy.dart';
9-
109
Future<void> main(List<String> args) async {
1110
try {
1211
ArgResults options = frontend.argParser.parse(args);
13-
frontend.FrontendCompiler compiler = FrontendCompilerProxy(stdout,
14-
printerFactory: frontend.BinaryPrinterFactory(),
15-
//添加注入逻辑
16-
transformer: AspectAopTransformer(),
17-
unsafePackageSerialization: options['unsafe-package-serialization'],
18-
incrementalSerialization: options['incremental-serialization'],
19-
useDebuggerModuleNames: options['debugger-module-names'],
20-
emitDebugMetadata: options['experimental-emit-debug-metadata'],
21-
emitDebugSymbols: options['emit-debug-symbols']);
12+
stdout.writeln(
13+
"!!!!! this is aspect_frontend_server !!!!!! args is:\n ${args}");
14+
frontend.FrontendCompiler compiler = FrontendCompilerProxy(
15+
stdout,
16+
transformer: AspectAopTransformer(),
17+
unsafePackageSerialization: options["unsafe-package-serialization"],
18+
incrementalSerialization: options["incremental-serialization"],
19+
useDebuggerModuleNames: options['debugger-module-names'],
20+
emitDebugMetadata: options['experimental-emit-debug-metadata'],
21+
emitDebugSymbols: options['emit-debug-symbols'],
22+
canaryFeatures: options['dartdevc-canary'],
23+
);
24+
2225
final int exitCode = await starter(args, compiler: compiler);
2326
if (exitCode != 0) {
2427
exit(exitCode);
2528
}
26-
} catch (error) {
27-
print('ERROR: $error\n');
28-
print(frontend.usage);
29+
} catch (error, stackTrace) {
30+
stdout.writeln('ERROR: $error\n $stackTrace');
31+
stdout.writeln(frontend.usage);
2932
return;
3033
}
3134
}

dump_kernel.dart.snapshot

7.48 MB
Binary file not shown.

0 commit comments

Comments
 (0)