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

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

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

      • #1.禁用 Gradle 离线模式
      • #2.按照文档要求添加项目依赖
      • #3.Sync同步后会在线解析并缓存所有相关依赖项
      • #4.从依赖项缓存所在目录里找到 *.pom 文件分析其子依赖项
      • #5.将所有依赖项复制出来.
      • #6.改造 .aar 依赖项文件
      • #7.修改原在线形式的项目依赖为AAR形式的依赖
      • #8.启用 Gradle离线模式即可正常使用了.
    • 如何改造 Release 依赖项 .aar 文件 将仅在Release模式才使用的JAR类库文件集成到一块?
      • 改造前:leakcanary-android-1.5.4.aar > libs 为空
      • 改造后:将其所有依赖的JAR包添加到 `leakcanary-android-1.5.4.aar > libs` 目录里.
      • 结果验证

如何通过 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 模式类结构图:

原文地址:https://www.cnblogs.com/AsionTang/p/8992330.html

时间: 2024-08-29 18:37:55

如何通过 AAR 形式集成 leakcanary-android 服务的相关文章

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

Android端代码打包成jar包和aar形式: 首先,jar包的形式和aar形式有什么区别? 1.打包之后生成的文件地址: *.jar:库/build/intermediates/bundles/debug(release)/classes.jar *.aar:库/build/outputs/aar/libraryname.aar 区别:jar包只包含了classes文件,不包含资源文件:aar不仅包含了classes文件,还包含资源文件 并且,aar的这个可以发布到maven库,然后使用者直

React Native集成到Android项目当中

集成到Android项目当中 安装JavaScript依赖包 在项目根目录下创建一个名为package.json的空文本文件,然后填入以下内 { "name": "MyReactNativeApp", "version": "0.0.1", "private": true, "scripts": { "start": "node node_modules/r

android服务unbind之后再想绑定问题

突然遇到个问题, 问题描述: 我按照顺序来绑定一个服务:start->bind 最后在退出activity的时候unbind一下, 现在我有这样的业务需求,就是当我再次进入该activity时需要再次bind, 我发现再调用bind方法并不能绑定服务(不知道google工程师为啥要设计成这样.) 写了一段测试代码验证一下: Service: package org.load.testservice; import android.app.Service; import android.conte

erlang-百度云推送Android服务端功能实现-erlang

百度云推送官方地址http://developer.baidu.com/wiki/index.php?title=docs/cplat/push 简单的介绍下原理: 百度云推送支持IOS和Android的云推送.Android支持的还不错,但是IOS一般很难调通.百度云对于IOS的推送来说,他只是做了一个中间的代理,为用户提供接口,优点是使用百度云推送,Android和IOS可以统一管理:缺点是:调通不容易,用户的IOS证书需要上传验证,会直接暴露给第三方,并且IOS的apns支持用户自己构建p

android 服务与多线程

android服务是执行在UI主线程的.一下是代码demo: package com.example.testservice; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCr

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

(function () { var coverImage = document.querySelector('<div id="coverImage">file</div>'); //图片压缩 coverImage.onchange = function () { lrz(this.files[0], {width: 640}, function (results) { // 你需要的数据都在这里,可以以字符串的形式传送base64给服务端转存为图片. var

Android 服务类Service 的详细学习

上一篇说到了通知栏Notification,提起通知栏,不得让人想到Service以及BroadcastReceive,作为android的4大组建的2个重要成员,我们没少和它们打交道.它们可以在无形中使我们的软件和网络.数据库.系统等进行交互,之后通过UI(Notification就是一种展示方式)把结果展现在我们面前.可以说,他们是android生命体系里面的神经系统,通过反射条件让身体展现不同的状态.在整个系统中,广播接收器充当着是传输者和监听者的角色,它把系统的一点点变化都反馈上去,之后

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

第一步:准备一个微软账号 要使用Microsoft Translator API需要在Microsoft Azure Marketplace(https://datamarket.azure.com/home.)上登录你的微软账号.如果没有微软账号请前往login.live.com中注册. 第二步:前往Microsoft Azure Marketplace注册并登录账号 前往Microsoft Azure Marketplace(https://datamarket.azure.com/home

Android服务Service总结

转自 http://blog.csdn.net/liuhe688/article/details/6874378 富貴必從勤苦得,男兒須讀五車書.唐.杜甫<柏學士茅屋> 作为程序员的我们,须知富贵是要通过勤苦努力才能得到的,要想在行业内有所建树,就必须刻苦学习和钻研. 今天我们来讲一下Android中Service的相关内容. Service在Android中和Activity是属于同一级别上的组件,我们可以将他们认为是两个好哥们,Activity仪表不凡,迷倒万千少女,经常做一些公众人物角色