44
55
66# 懒人做法,一步到位
7- 下载frontend_server.dart.snapshot并覆盖 flutter_macos_stable/bin/cache/artifacts/engine/darwin-x64/frontend_server.dart.snapshot
8- 和
9- flutter_macos_stable/bin/cache/dart-sdk/bin/snapshots/frontend_server.dart.snapshot
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
108
119
1210# 编译之前
13111 . 下载最新的dart-sdk,具体下载方法可以查看 https://github.com/dart-lang/sdk/wiki/Building
1412
1513这里建议用depot_tools的方式下载,因为直接下载github上的sdk,third_party目录下面不会有你需要的包
14+
16152 . 将dart-sdk切换到flutter对应的版本,一般情况下flutter对应的dart版本是可以通用的,但是如果flutter有大版本升级,需要切换到对应的版本.
1716
1817
1918# 编译方式
2019dart --deterministic --no-sound-null-safety --snapshot=frontend_server.dart.snapshot --snapshot-kind=kernel bin/starter.dart
2120
22- dart --deterministic --no-sound-null-safety --snapshot=dump_kernel.dart.snapshot --snapshot-kind=kernel lib /dump_kernel.dart
21+ dart --deterministic --no-sound-null-safety --snapshot=dump_kernel.dart.snapshot --snapshot-kind=kernel bin /dump_kernel.dart
2322
2423# 测试编译
25241 . 生成kernel_snapshot.d,先用普通方法run一下example,在example/.dart_tool/flutter_build下面会有生成编译临时的文件
@@ -34,7 +33,7 @@ dart run frontend_server.dart.snapshot --sdk-root /Users/lixin/Documents/flutter
3433dart 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
3534
3635## 测试aot编译成二进制
37- 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
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
3837
3938## dill 文件注入成功检测
4039dart run dump_kernel.dart.snapshot app.dill injected.out.dill.txt
@@ -46,10 +45,7 @@ dart run dump_kernel.dart.snapshot app.dill injected.out.dill.txt
46452.将新编译的frontend_server.dart.snapshot覆盖 flutter_macos_stable/bin/cache/dart-sdk/bin/snapshots
4746
4847# 测试运行
49- cd example
50- flutter clean
51- flutter pub get
52- flutter run
48+ cd example && flutter clean && flutter pub get && flutter run
5349
5450### 该方法和aspectd的区别
55511 . aspectd不支持flutter 2.5.4以上,本项目最高支持到2.10.1,再高没有测过
@@ -61,8 +57,6 @@ flutter run
61577 . 为了性能优化inject方法限制必须是static的
62588 . 添加对全局所有的catch进行注入
6359
64- ### 为什么用pragma注解,而不是自定义注解?
65- 本项目是在aot优化后再对字节码进行修改,aot优化后只有白名单中的注解才能被识别到,pragma是在白名单中的注解.
6660
6761
6862
0 commit comments