集成hibeaver的血泪史
项目中埋点的位置越来越多,就想着搞下无埋点数据统计。
调研了一圈,基本上确定,日志收集+插桩。
新起个项目,日志收集他妈的竟然又用到了我刚毕业第一年做的项目。
把里面日志收集的类修修补补挪过来,调试成功,打个jar包扔项目里,可以完美实现bugly初始化,testJavaCrash()功能。
至于日志的缓存也是他妈的现成的,随用随拿。
下面就是插桩模块,原理基本上就是在编译期,利用asm修改生成的class文件。
asm完全没了解,看了些介绍就是可以修改和增强既有类,访问类里的字段和方法做修改。
插桩就是找到相应的方法在里面添加我们的代码就可以了。
找了个现成的库,https://github.com/BryanSharp/hibeaver,集成简单,可以调试。
又考虑到安全,就决定自己去实现下,直接copy过来,自己修改多好啊。
修改成自己的moudle名后,生成jar,在app moudle下引用进来。build后一直报
java.io.File#<init>有歧义的方法Ambiguous method overloading for method java.io.File#<init>
WHAT FUCK ! ! !
这不就是插桩找方法找到File类构造方法里去了吗,各种全匹配类名,增删瞎改都不行,就是死都卡在这。
给hibeaver作者发邮件,大神也不回我,可能百度最近很忙吧。
各种加埋点群,没人吊我。
痛苦啊,一天天就这样过去了。
最后终于在 心木 小伙伴的旁敲侧引下,我敲了下./gradlew build --stacktrace
妈的,这个命令每次报错都摆在我面前我从来都正眼看过
运行后直接把报错位置给定位到了。
气死我了 少打了后面的Dir导致new File()报错
copy一时爽,手残死半年。