如何通过 AAR 形式集成 leakcanary-android 服务

Posted Asion Tang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过 AAR 形式集成 leakcanary-android 服务相关的知识,希望对你有一定的参考价值。

如何通过 AAR 形式集成 leakcanary-android 服务

leakcanary-android 官网: square/leakcanary: A memory leak detection library for Android and Java.

如何通过在线引用的方式拿到所有相关的依赖项文件?

#1.禁用 Gradle 离线模式

#2.按照文档要求添加项目依赖

In your build.gradle:

dependencies {
debugImplementation \'com.squareup.leakcanary:leakcanary-android:1.5.4\'
releaseImplementation \'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4\'
}

#3.Sync同步后会在线解析并缓存所有相关依赖项

#4.从依赖项缓存所在目录里找到 *.pom 文件分析其子依赖项

Windows系统缓存一般所在路径:

  • .gradle\\caches\\modules-2\\files-2.1\\com.squareup.leakcanary\\leakcanary-android\\1.5.4
  • .gradle\\caches\\modules-2\\files-2.1\\com.squareup.leakcanary\\leakcanary-android-no-op\\1.5.4

子目录里一般存在以下几种类型的文件: *-sources.jar, .aar或.jar, *.pom

通过文本工具打开 *.pom 文件,可见是XML格式的文本,寻找到以下节点数据即可获知其子依赖项信息:

project - dependencies - dependency - artifactId

#5.将所有依赖项复制出来.

将缓存里的所有*.aar或*.jar格式的文件依赖项都复制出来.并放入指定的flatDir目录中(如libs目录里.)

#6.改造 .aar 依赖项文件

将仅在Release模式才使用的JAR类库文件集成到一块

#7.修改原在线形式的项目依赖为AAR形式的依赖

debugImplementation(name: \'leakcanary-android-1.5.4\', ext: \'aar\')
releaseImplementation(name: \'leakcanary-android-no-op-1.5.4\', ext: \'aar\')

注意AAR形式的依赖需要在build.gradle里增加以下设置:

repositories {
flatDir {
dirs \'libs\'
}
}

#8.启用 Gradle离线模式即可正常使用了.

如何改造 Release 依赖项 .aar 文件 将仅在Release模式才使用的JAR类库文件集成到一块?

最终目的为:

  1. 保证在 debug 运行模式能正常使用leakcanary-android的功能,
  2. 保证在 Release发布模式时不额外添加任何多余的代码和资源(只增加no-op类保证编译不报错即可)

改造前:leakcanary-android-1.5.4.aar > libs 为空

改造后:将其所有依赖的JAR包添加到 leakcanary-android-1.5.4.aar > libs 目录里.

leakcanary-android依赖项本来就是JAR的有:

  1. leakcanary-watcher-1.5.4.jar
  2. haha-2.0.3.jar

部分依赖项是AAR的需要提取出JAR文件:

  1. leakcanary-analyzer-1.5.4.aar

将其解压后,提取出 classes.jar 改一下名字leakcanary-analyzer-1.5.4.jar以便区分.

最终leakcanary-android-1.5.4.aar > libs 目录里有以下文件:

  1. leakcanary-watcher-1.5.4.jar
  2. haha-2.0.3.jar
  3. leakcanary-analyzer-1.5.4.jar

结果验证

Release 模式类结构图:

debug 模式类结构图:

以上是关于如何通过 AAR 形式集成 leakcanary-android 服务的主要内容,如果未能解决你的问题,请参考以下文章

Android Stuido集成LeakCanary编译失败TransformExceptiontransformClassesWithDexBuilderForDebug

Android Stuido集成LeakCanary编译失败TransformExceptiontransformClassesWithDexBuilderForDebug

Android Stuido集成LeakCanary编译失败TransformExceptiontransformClassesWithDexBuilderForDebug

LeakCanary 的使用

我将leakcanary与2.0-beta-3版本集成,应用程序闪烁

android library打包成aar形式供别的项目引用