记一次项目依赖库升级的问题总结

1,027 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第27天,点击查看活动详情

1.应用抓包工具chucker

我们项目抓包工具分为两种:借助第三方软件Fiddler抓包和Okhttp拦截器:

  1. 前者借助第三方软件的形式比较麻烦,尤其是抓取https请求,还要安装证书等等;

  2. 后者的方式就比较方便了,直接定义一个拦截器抓取即可

我们项目中使用的okhttp拦截器的抓包工具是chunk,不过这个库已经好长时间没维护了:

image.png 直接看了一个老哥所写文章的评论,说是使用chucker来代替chunk,所以就赶紧研究了下chucker接入。

dependencies {
  debugImplementation "com.github.chuckerteam.chucker:library:3.5.2"
  releaseImplementation "com.github.chuckerteam.chucker:library-no-op:3.5.2"
}

目前chucker的最新版本为3.5.2,但是我们项目不能直接使用,主要的原因有两个:

  1. chucker依赖的一些库的版本太高了,比如kotlin插件使用的1.6、lifecycle相关组件使用的2.4之后的版本,项目直接使用报错;

  2. 在1的基础上想要依赖chucker低版本来解决这个问题,然后发现死活下载不了...,应该是其不支持下载低版本了

由于上面的两个问题,如今唯一的解决办法就只能是拿到3.5.2chucker源码进行重连编译打包了,核心就是降低其依赖库的版本,顺便将其原来的发布插件改成了maven-publish就解决了这个问题。

2.LeakCanary2.8.1升级

leakcanary的使用就不再这个过多阐述了,可以直接看官方文档:LeakCanary。 主要是将版本版本升级到了2.8.1之后会报一个错误:

LeakCanary中使用到了WindowCallbackWrapper对象,但是项目一开启混淆,就直接NPE崩溃。

然后在其github上的issue中找到了解决答案:只需要在混淆规则中keep下WindowCallbackWrapper即可。

PS:目前leakcanary发布了2.9.1的版本,已经修复了这个问题。

3.wxapi库使用内存泄漏

主要是使用到wxapi的Activity出现内存泄漏,然后通过leakcanary发现泄漏的引用链存在两个:
1.

image.png

这个主要是使用不规范造成的,当Activity销毁时,在其onDestroy中需要手动调用:
WXAPIFactory.createWXAPI所创建对象的detach()方法

image.png

这个内存泄漏的引用链主要是由于wxapi中的一个aaaa.g.V对象持有了业务方Activity导致的,这个问题我从网上看到的方案就是:反射调用com.tencent.a.a.a.a.g类,手动将static变量V置空解决

参考

从原理到实战,全面总结 Android HTTPS 抓包