8

LeakCanary 是一个适用于 Android 和 Java 的内存泄漏检测库。 泄漏金丝雀

我的项目是基于android make文件系统的,它依赖于一些android内部接口和自定义方法。

如何将 LeakCanary 作为库添加到我的应用程序中以检测内存泄漏。

我的解决方案:首先,我必须将 LeakCanary 构建为 jar 文件,但如何。因为它是一个 gradle 目录结构,我之前从未使用过 Gradle。

任何提示都是宝贵的。

4

5 回答 5

8

对于 Leak Canary,您应该使用 Android Studio。在 Android Studio 中,在你的 build.gradle 中,添加这个

dependencies { 
 debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
 releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
}

在你的 Application 类中,添加这一行LeakCanary.install(this); 在这样的 onCreate() 方法中

public class ExampleApplication extends Application {

  @Override public void onCreate() {
    super.onCreate();
    LeakCanary.install(this);
  }
}

点击此链接https://github.com/square/leakcanary了解更多详情。

希望这可能会有所帮助。

于 2015-08-04T12:03:43.383 回答
6

这需要成为您的应用程序的一部分,才能让leakcanary 工作。

public class ExampleApplication extends Application {

 @Override public void onCreate() {
  super.onCreate();
  LeakCanary.install(this);
 }
}

但这很令人困惑,因为我们大多数人都没有编写直接扩展 Application 类的这种类,一个变通方法而不是一个简单的语句将解决这个问题,

public class YourClass extends Activity{//AppCompatActivity, A  ctionBarActivity or anything

@Override public void onCreate() {
  super.onCreate();
   LeakCanary.install(getApplication());
 }
}

希望这可以帮助!!!

最好调用这个方法

   onPostCreate()
于 2015-08-24T06:23:56.227 回答
2

LeakCanary 不仅仅是一个 JAR - 它不仅包含 java 代码,还包含资源(例如 png)。如果您使用的是 ANT,那么您唯一能做的就是将 LeakCanary 作为库项目包含在内。但我强烈建议切换到 gradle。因为 android 开发团队不会支持在最近的将来以任何用户友好的方式导入任何不仅仅是 jar 的库(因为 gradle 是优先级的)。并且作为库项目导入是一个痛苦的过程,当有时将库的依赖项也包含为库项目时,它会变得更加痛苦。我很久以前就手工完成了,只是因为客户多年来一直使用 Eclipse 和 ant 进行大型项目。通常,您必须执行以下操作:

  1. 获取来源:源代码、资产、资源……
  2. 调查 LeakCanary 的依赖关系。您可以在这里查看“POM 对象模型” 。
  3. 对于不仅仅包含 java 代码的依赖项,您需要再次将它们作为库包含在内。对于其他人,只需将它们下载为 jar。
  4. 对于资产(例如字体),有一个额外的步骤:您必须将它们复制到您正在处理的项目中,否则您将获得资源未找到异常。
  5. 最后一步是启用清单合并。将以下行添加到项目的 project.properties 中:

    manifestmerger.enabled=true

将库项目中的所有 AndroidManifest.xml 合并到最终的 apk 中就完成了。

于 2015-05-14T04:12:25.923 回答
0

这个答案对您来说可能为时已晚,但它可能对其他人有所帮助。可以在常规项目中添加更多通过 gradle 公开的项目作为 jar 文件。

Gradle 只是一个构建工具。这些 java 库在一天结束时仍然需要一堆 jar 文件。所以我要做的是以下......

  1. 如果还没有安装 Android Studio。
  2. 创建一个基于 gradle 的项目,您可以在其中简单地添加所需的依赖项。
  3. 同步项目,以便它处理 gradle 文件并更新外部库。
  4. 在项目资源管理器中,找到并展开“外部库”,您将找到您的 jar 文件。
  5. 将 jar 文件复制到其他项目中需要它们的任何位置,瞧。

我这样做是为了导入 Google Play 库和许多其他库的全部或部分内容。事实上,这对我来说是一种常见的做法。

现在,正如 Deepscorn 所提到的,我注意到 LeakCanary 有一些显然包含 Android 资源的 res/ 文件夹......我现在非常需要在 Titanium SDK 中包含 LeakCanary。所以我打算以同样的方式进行,但这一次,我将在钛项目的资源文件夹中添加资源,看看会发生什么。

资源最终都包含在整个项目中并可用。我不打算在 android 资源中进行范围界定。您只需 R... 或 ...getIdentifier(...) 即可获取它们。

您还需要确保将 AndroidManifest 条目复制到将要编译的 AndroidManifest 文件中。

如果我有时间,我会在这里发布我的结果。同时,任何人都可以尝试一下并发布一些反馈。

于 2016-09-11T04:07:24.313 回答
-1

您需要安装 gradle,然后在泄漏金丝雀的库目录中调用“gradle assembleRelease”。如果一切顺利,您会在 build/outputs 目录中获得几个 aars 文件。这些是安卓库。您应该将它们作为任何其他 android 库引用。

于 2015-05-13T14:05:37.623 回答