【问题标题】:Should I remove leak canary code/classes for release build?我应该删除用于发布构建的泄漏金丝雀代码/类吗?
【发布时间】:2017-09-04 17:54:32
【问题描述】:

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

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 代码。我说的对吗?

【问题讨论】:

  • AFAIK,你是对的。

标签: android memory-leaks release leakcanary


【解决方案1】:

我在网上找到了这个。

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'
}

【讨论】:

  • 如果什么都不做,为什么还要添加no-op?
  • @farhanpatel 因为即使它什么都不做,你仍然需要有类来编译你的应用程序
  • @ysfcyln 但是不需要类,只需要依赖项导入。
【解决方案2】:

我在调试模式下使用的是最新版本的库 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

发布模式下的类包含:

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"

【讨论】:

  • 这是一个很好的解决方案。我面临着完全相同的问题,因为他们为 leak canary 2 删除了 no-op 包,因此这些类不适用于所有构建风格。
  • 嘿,这似乎对我不起作用。 @Francois 有什么帮助吗?
  • 给我发邮件,我们可以解决您的问题。您要升级到泄漏金丝雀 2 吗?还有什么错误?
【解决方案3】:

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

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

不需要no-ops也不需要proguard。

但是why?

好的,但是how?

【讨论】:

  • 2020年6月版本为:debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.4'
猜你喜欢
  • 1970-01-01
  • 2016-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
相关资源
最近更新 更多