我应该删除泄漏金丝雀代码/类以进行发布构建吗?

时间:2017-04-09 18:35:49

标签: android memory-leaks release leakcanary

我搜索了一个答案,找不到任何东西,这可能意味着它是一个基本问题。冒着表现出无知的风险,无论如何我都会问。我正在准备我的应用程序发布,并希望确保泄漏金丝雀不会弹出我的用户。我的泄漏金丝雀相关的依赖关系就是这样。

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

我认为,由于releaseCompile包含no-op,这意味着我可以继续执行我的发布版本而不删除Leak Canary代码。我是对的吗?

3 个答案:

答案 0 :(得分:13)

我在网上发现了这个。

dependencies {
// Real LeakCanary for debug builds only: notifications, analysis, etc
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'

// No-Op version of LeakCanary for release builds: no notifications, no analysis, nothing
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
}

答案 1 :(得分:2)

答案是正确的,但截至19年4月13日,已有updated and easier solution

    dependencies {
      debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0-beta-3'
    }

不需要无人操作,也不需要proguard。

但是why?

好,但是how?

答案 2 :(得分:0)

我在调试模式下使用的是库2.0-alpha-1的最新版本,但没有找到该库的发行依赖关系。 我做了以下事情:

  1. 我为每种构建模式创建了单独的文件夹(发布和调试)
  2. 调试文件夹的路径: app / src / debug
  3. 发布文件夹的路径: app / src / release

然后,我创建了一个用于初始化泄漏金丝雀的类,称为 LeakCanaryInitializer.kt (我在两个构建文件夹中创建了它)

  • 调试: app / src / debug / java / LeakCanaryInitializer.kt
  • 版本: app / src / release / java / LeakCanaryInitializer.kt

处于 release 模式的班级包含:

import android.content.Context
object LeakCanaryManager {

  fun init(context: Context) {
    // We should do nothing in the release mode
  }
}

处于 debug 模式的类包含:

import android.content.Context
import leakcanary.LeakCanary
import leakcanary.LeakSentry

object LeakCanaryManager {

  fun init(context: Context) {
    // Here you should write your custom initializing
  }
}

然后在您的Application类中调用init方法:

LeakCanaryManager.init(this)

我的gradle文件包含以下两个依赖项:

debugImplementation "com.squareup.leakcanary:leakcanary-android:2.0-alpha-1"