如何通过 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 服务的更多相关文章

  1. 【Android端】代码打包成jar包/aar形式

    Android端代码打包成jar包和aar形式: 首先,jar包的形式和aar形式有什么区别? 1.打包之后生成的文件地址: *.jar:库/build/intermediates/bundles/d ...

  2. Weex的环境搭建以及集成到Android项目

    最近由于公司的需要,初步研究了Weex,Weex是阿里开发的一个web的框架,官方的介绍如下: Weex 是一套简单易用的跨平台开发方案,能以 web 的开发体验构建高性能.可扩展的 native 应 ...

  3. Android服务之PackageManagerService启动源码分析

    了解了Android系统的启动过程的读者应该知道,Android的所有Java服务都是通过SystemServer进程启动的,并且驻留在SystemServer进程中.SystemServer进程在启 ...

  4. 图片采用base64压缩,可以以字符串的形式传送base64给服务端转存为图片

    (function () { var coverImage = document.querySelector('<div id="coverImage">file< ...

  5. 在Application中集成Microsoft Translator服务之开发前准备

    第一步:准备一个微软账号 要使用Microsoft Translator API需要在Microsoft Azure Marketplace(https://datamarket.azure.com/ ...

  6. Android 服务类Service 的详细学习

    http://blog.csdn.net/vipzjyno1/article/details/26004831 Android服务类Service学习四大组建   目录(?)[+] 什么是服务 服务有 ...

  7. Android 服务端开发之开发环境配置

    Android 服务端开发之开发环境配置 这里是在Eclipse的基础上安装PhpEclipse插件方法,PHPEclipse是Eclipse的 一个用于开发PHP的插件.当然也可以采用Java开发a ...

  8. 【转】Android 服务器之SFTP服务器上传下载功能

    原文网址:http://blog.csdn.net/tanghua0809/article/details/47056327 本文主要是讲解Android服务器之SFTP服务器的上传下载功能,也是对之 ...

  9. 将React Native集成至Android原生应用

    将React Native集成至Android原生应用 Android Studio 2.1 Preview 4生成的空项目 react-native 环境 0.22.2 初次编译后apk有1.1M, ...

随机推荐

  1. [典型漏洞分享]一个典型的XSS盲打漏洞可导致全网用户cookie被盗取

    偶平时在做安全测试时,一般是以发现问题为主,点到为止,但做安全的同学可能也遇到过这样的问题,当你尝试向开发的同学描述一个漏洞危害怎么怎么样的时候,双方经常会有一种鸡同鸭讲的感觉,甚至他们觉得我们在夸大 ...

  2. String.format("%0"+length+"d", arr)中的%0和"d"分别代表什么

    public static void main(String[] args) { int a = 8; String s = String.format("%04d", a); S ...

  3. .Net的差评

    .NET平台很棒.真的很棒.直到它不再那么棒.我为什么不再用.NET?简单来说,它限制了我们选择的能力(对我来说很重要),转移了我们的注意力,使得我们向内认知它的安全性,替代了帮助我们认知外面广阔世界 ...

  4. 2011年排名前七位的Linux操作系统。

    下面列出了2011年排名前七位的Linux操作系统. Ubuntu Ubuntu 是一个由全球化的专业开发团队建造的操作系统.它包含了所有您需要的应用程序:浏览器.Office 套件.多媒体程序.即时 ...

  5. php根据word模板生成新的word文件

    原文地址:http://www.niu12.com/article/16 php使用phpword将word内容变量替换 a.安装phpword composer require phpoffice/ ...

  6. 【LaTeX】E喵的LaTeX新手入门教程(4)图表

    这里说的不是用LaTeX画图,而是插入已经画好的图片..想看画图可以把滚动条拉到底.前情回顾[LaTeX]E喵的LaTeX新手入门教程(1)准备篇 [LaTeX]E喵的LaTeX新手入门教程(2)基础 ...

  7. Ceph源码解析:CRUSH算法

    1.简介 随着大规模分布式存储系统(PB级的数据和成百上千台存储设备)的出现.这些系统必须平衡的分布数据和负载(提高资源利用率),最大化系统的性能,并要处理系统的扩展和硬件失效.ceph设计了CRUS ...

  8. OIT

    https://matthewwellings.com/blog/depth-peeling-order-independent-transparency-in-vulkan/ depth peeli ...

  9. Servlet3.0提供的异步处理

    用属性asyncSupported=true开启Servlet对异步的支持. 在请求时,在request.startAsync()抛java.lang.IllegalStateException: N ...

  10. tomcat通过虚拟路径访问外部静态资源

    转载:http://blog.csdn.net/yuancenyi/article/details/53414397 在项目开发中,单个工程中,为了以后软件版本升级的方便,经常将网站运行中某些上传的静 ...