如何使用 leakcanary,如何将 leakcanary 添加为 jar 以使用 .mk 文件构建 apk

how to use leakcanary, how to add leakcanary as a jar to build a apk with .mk file

LeakCanary 是 Android 和 Java 的内存泄漏检测库。 LeakCanary

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

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

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

任何小费都是宝贵的。

您需要安装gradle,然后在leak canary 的库目录中调用"gradle assembleRelease"。如果一切顺利,你会在 build/outputs 目录中得到几个 aars 文件。这些是 android 个库。您应该像引用任何其他 android 库一样引用它们。

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

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

    manifestmerger.enabled=真

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

对于 Leak Canary,您应该使用 Android Studio。 在 Android 工作室中, 在您的 build.gradle 中,添加此

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

然后在您的应用程序 class 中,像这样在 onCreate() 方法中添加此行 LeakCanary.install(this);

public class ExampleApplication extends Application {

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

关注此 link https://github.com/square/leakcanary 了解更多详情。

希望这对您有所帮助。

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

public class ExampleApplication extends Application {

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

但这很令人困惑,因为我们大多数人不会编写直接扩展应用程序 class 的 class,一个变通方法而不是一个简单的语句将解决这个问题,

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

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

希望对您有所帮助!!!

最好在

中调用此方法
   onPostCreate()

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

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

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

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

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

所有资源最终都包含在整个项目中并可用。我并没有离开 android 资源的范围。您只需使用 R... 或 ...getIdentifier(...) 即可获取它们。

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

如果我有时间,我会post我的结果。与此同时,任何人都可以尝试一下并 post 一些反馈。