如何使用leakcanary,如何添加leakcan作为jar来构建带有.mk文件的apk

时间:2015-05-13 10:18:04

标签: android leakcanary

LeakCanary是一款适用于Android和Java的内存泄漏检测库。 LeakCanary

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

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

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

任何提示都很珍贵。

5 个答案:

答案 0 :(得分:7)

对于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类中,在onCreate()方法中添加 LeakCanary.install(this); 这一行

public class ExampleApplication extends Application {

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

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

希望这可能会有所帮助。

答案 1 :(得分:7)

这需要成为您的应用程序的一部分,以便泄漏工作。

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()

答案 2 :(得分:2)

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

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

    manifestmerger.enabled =真

  6. 完成将所有AndroidManifest.xml从库项目合并到最终的apk。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

  1. 安装Android Studio(如果情况并非如此)。
  2. 创建一个基于gradle的项目,您可以在其中简单地添加所需的依赖项。
  3. 同步项目,以便它处理gradle文件并更新外部库。
  4. 在项目资源管理器中,找到并展开“外部库”,您将找到您的jar文件。
  5. 将jar文件复制到您需要的地方,以便在其他项目中使用它们。
  6. 我这样做是为了导入整个或部分Google Play库以及许多其他库。事实上,这对我来说是一种常见的做法。

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

    资源最终都被包含在整个项目中并且可用。我不会在android资源中确定范围。你只需要R ...或... getIdentifier(...)来获取它们。

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

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