如何通过 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类库文件集成到一块?
最终目的为:
- 保证在
debug
运行模式能正常使用leakcanary-android
的功能, - 保证在
Release
发布模式时不额外添加任何多余的代码和资源(只增加no-op类保证编译不报错即可)
改造前:leakcanary-android-1.5.4.aar > libs 为空
改造后:将其所有依赖的JAR包添加到 leakcanary-android-1.5.4.aar > libs
目录里.
leakcanary-android
依赖项本来就是JAR的有:
- leakcanary-watcher-1.5.4.jar
- haha-2.0.3.jar
部分依赖项是AAR的需要提取出JAR文件:
- leakcanary-analyzer-1.5.4.aar
将其解压后,提取出
classes.jar
改一下名字leakcanary-analyzer-1.5.4.jar
以便区分.
最终leakcanary-android-1.5.4.aar > libs
目录里有以下文件:
- leakcanary-watcher-1.5.4.jar
- haha-2.0.3.jar
- leakcanary-analyzer-1.5.4.jar
结果验证
Release 模式类结构图:
debug 模式类结构图:
如何通过 AAR 形式集成 leakcanary-android 服务的更多相关文章
- 【Android端】代码打包成jar包/aar形式
Android端代码打包成jar包和aar形式: 首先,jar包的形式和aar形式有什么区别? 1.打包之后生成的文件地址: *.jar:库/build/intermediates/bundles/d ...
- Weex的环境搭建以及集成到Android项目
最近由于公司的需要,初步研究了Weex,Weex是阿里开发的一个web的框架,官方的介绍如下: Weex 是一套简单易用的跨平台开发方案,能以 web 的开发体验构建高性能.可扩展的 native 应 ...
- Android服务之PackageManagerService启动源码分析
了解了Android系统的启动过程的读者应该知道,Android的所有Java服务都是通过SystemServer进程启动的,并且驻留在SystemServer进程中.SystemServer进程在启 ...
- 图片采用base64压缩,可以以字符串的形式传送base64给服务端转存为图片
(function () { var coverImage = document.querySelector('<div id="coverImage">file< ...
- 在Application中集成Microsoft Translator服务之开发前准备
第一步:准备一个微软账号 要使用Microsoft Translator API需要在Microsoft Azure Marketplace(https://datamarket.azure.com/ ...
- Android 服务类Service 的详细学习
http://blog.csdn.net/vipzjyno1/article/details/26004831 Android服务类Service学习四大组建 目录(?)[+] 什么是服务 服务有 ...
- Android 服务端开发之开发环境配置
Android 服务端开发之开发环境配置 这里是在Eclipse的基础上安装PhpEclipse插件方法,PHPEclipse是Eclipse的 一个用于开发PHP的插件.当然也可以采用Java开发a ...
- 【转】Android 服务器之SFTP服务器上传下载功能
原文网址:http://blog.csdn.net/tanghua0809/article/details/47056327 本文主要是讲解Android服务器之SFTP服务器的上传下载功能,也是对之 ...
- 将React Native集成至Android原生应用
将React Native集成至Android原生应用 Android Studio 2.1 Preview 4生成的空项目 react-native 环境 0.22.2 初次编译后apk有1.1M, ...
随机推荐
- NHibernate官方文档中文版--ISessionFactory的配置(ISessionFactory Configuration)
由于NHibernate是被设计应用在许多不同环境中的,因此它存在很多配置参数.幸运的是,这些参数大多都有合理的默认值,而且NHibernate发布的时候伴随着一个App.config 例子(可在sr ...
- FTP客户端工具
推荐使用8UFTP.小.快.好! 8UFTP工具分为8UFTP客户端工具和 8UFTP智能扩展服务端工具,涵盖其它FTP工具所有的功能.不占内存,体积小,多线程,支持在线解压缩.界面友好,操作简单,可 ...
- hive删除列
hive中删除列时没有与mysql语句alter table <table> drop column <col>对应的语句. 然而依然可以完成此功能:使用ALTER TABLE ...
- java8 遍历数组的几种方式
java8 遍历数组的几种方式 2017年04月05日 09:15:46 阅读数:4640 风格色 2017-02-11 18:41 有如下一个String数组 String[] array = {& ...
- iOS:iOS开发系列–打造自己的“美图秀秀”(下)
来源: KenshinCui 链接:http://www.cnblogs.com/kenshincui/p/3959951.html 运行效果: 其他图形上下文 前面我们也说过,Quartz 2D的图 ...
- js调用高德地图的搜索api
var city = $('#city')[0].value; AMap.plugin(['AMap.Autocomplete'],function(){ var autoOptions = { ci ...
- Android studio 模拟器中输入中文
Android studio 模拟器中输入中文 学习了:https://blog.csdn.net/feidie436/article/details/78318752?locationNum=10& ...
- [Functional Programming Moand] Update The State Of A State Monad (put)
Stateful computations require the ability for their state to change overtime. We take a look on one ...
- java实现折半排序算法
折半插入排序法,又称二分插入排序法,是直接插入排序法的改良版,也需要执行i-1趟插入,不同之处在于,第i趟插入,先找出第i+1个元素应该插入的的位置,假定前i个数据是已经处于有序状态. 折半插入排序( ...
- python gevent使用例子
python gevent使用例子 from gevent.pool import Pool POOL_SIZE = 100 def process(func, param1_list, param2 ...