Flutter 无埋点SDK实现

前言

先看下各个平台自动化埋点支持

平台

特点

自动化埋点方案

Android

Java支持编译器静态代理/运行期动态代理

有成熟方案和产品,例如GrowingIO、神策、友盟

iOS

OC提供了强大的运行时和动态性

有成熟方案和产品,例如GrowingIO、神策、友盟

Flutter

Dart反射支持很弱,Flutter禁用了反射机制,考虑从编译期代码插桩实现

无成熟方案和产品

从编译期进行代码插桩,则需要修改编译期的中间件文件。

Dart文件编译会先编译成Dill文件,然后再编译成二进制代码。

如果能在编译器拿到Dill文件,然后进行修改插桩,再进行编译成Binary Code就可以达到AOP埋点的效果

flutter_tool是flutter的编译工具,其并没有提供接口供开发者hook,以及修改编译流程,那么要实现这个步骤,我们就需要修改flutter_tool这个工具。

闲鱼的AspectD就使用了这个思想GitHub - XianyuTech/aspectd: AOP for Flutter(Dart)

基于闲鱼的ApectD来开展后续的工作,这里的 Flutter SDK 完全依赖于原生 SDK,不具有单独运行的能力。

AspectD的使用

首先配置好flutter环境(flutter sdk、dart sdk、fvm、环境变量等),这里使用版本信息如下:

    • Flutter version 2.2.2 at /Users/sheng/GrowIO/flutter
    • Framework revision d79295af24 (4 months ago), 2021-06-11 08:56:01 -0700
    • Engine revision 91c9fc8fe0
    • Dart version 2.13.3
    • Pub download mirror https://pub.flutter-io.cn
    • Flutter download mirror https://storage.flutter-io.cn

1. 下拉aspectd仓库

这里我们对aspectd进行了部分修改,以满足我们的无埋点要求。

git clone https://github.com/growingio/aspectd.git

2. 修改build_tool,通过git patch方式

  • git patch

cd path-for-flutter-git-repo
git apply --3way path-for-aspectd-package/0001-aspectd.patch
rm bin/cache/flutter_tools.stamp

path-for-flutter-git-repo表示flutter的路径

path-for-aspectd-package表示aspectd的路径

这里可能会存在git apply错误的情况,可以打开0001-aspectd.patch文件,根据变动自行添加修改。

AspectD通过改写Flutter中的flutter_tools进行修改Dill文件,变动了两个文件:

  • flutter/packages/flutter_tools/lib/src/aspectd.dart 添加

  • flutter/packages/flutter_tools/lib/src/build_system/targets/common.dart 修改

AspectD通过git patch方式,给flutter的分支添加了这些变动。

  • 环境设置

~/.bash_profile 文件中添加

export PUB_HOSTED_URL=https://pub.flutter-io.cn //国内用户需要设置
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn //国内用户需要设置

注:git@github.com: Permission denied 问题,需要你设置ssl证书

然后在aspectd根目录执行 flutter pub get

sheng@chengpengdeMacBook-Pro aspectd % flutter pub get
[KWLM]:pub get
Warning: You are using these overridden dependencies:
! kernel 0.0.0 from git git@github.com:XianyuTech/sdk.git 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值