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



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

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

我在网上找到了这个。

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

答案是正确的,但截至 19 年 4 月 13 日,有一个更新且更简单的解决方案:

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

不需要无操作或专业保护。

但是为什么?

好的,但是如何?

我在调试模式下使用最新版本的库 2.0-alpha-1,但没有找到库的版本依赖项。 我做了以下工作:

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

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

  • debug:app/src/debug/java/LeakCanaryInitializer.kt
  • release:app/src/release/java/LeakCanaryInitializer.kt

发布模式下的类包含:

import android.content.Context
object LeakCanaryManager {
fun init(context: Context) {
// We should do nothing in the release mode
}
}

调试模式下的类包含:

import android.content.Context
import leakcanary.LeakCanary
import leakcanary.LeakSentry
object LeakCanaryManager {
fun init(context: Context) {
// Here you should write your custom initializing
}
}

然后在应用程序类中调用 init 方法:

LeakCanaryManager.init(this)

我的 gradle 文件只包含调试依赖项:

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

最新更新