1 需求背景
AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。在java 中有经典的aspectJ ,而在flutter 中则有aspectd.
AspectD 是咸鱼针对 Flutter 实现的 AOP 开源库,GitHub 地址如下:
https://github.com/alibaba-flutter/aspectd。
2 aspectd 使用
图片来源于aspectd ,侵删
上图所示为aspectd 的作用流程。具体使用方式稍微有点麻烦.下面咱们来看下
1、aspectd下载
git clone git@github.com:XianyuTech/aspectd.git
2、分支切换
根据你本地的flutter 环境切到对应的aspectd 的分支上,因为aspectd 也是根据flutter 版本分支不同而有不同分支的。
3、aspectd 安装
aspectd需要
1.切换到flutter的git目录:
cd ${path-for-git-flutter}
2.将aspectd源码中的git patch文件合并到flutter源码工程中,合并git patch:
windows:
git am --reject --whitespace=fix aspectd\0001-aspectd.patch
mac:
git apply --3way ~/Github/aspectd/0001-aspectd.patch
3.删除原有的的flutter编译工具:
rm bin/cache/flutter_tools.stamp
4.重新构建新的flutter编译工具:
flutter doctor -v
4、aspectd demo 运行
到aspectd源码目录的example目录下执行:
flutter run --debug --verbose
如果能成功运行起来,那就说明aspectd 基本上成功了。
ps: 但是要想hook 生效,还得到目录
aspectd\lib\src\flutter_frontend_server 下面看有没有存在frontend_server.dart.snapshot 文件。
pps:建议使用flutter v1.22.5 及以上版本,因为低版本的aspectd 对于window 系统不太友好,经常出错。
参考资料:
《Beike AspectD 的原理及运用》
《Flutter aspectd入门指引》