我应该为发布版本删除泄漏金丝雀 code/classes 吗?
Should I remove leak canary code/classes for release build?
我搜索了这个问题的答案,但没有找到任何答案,这可能意味着这是一个基本问题。冒着显示我无知的风险,我还是要问。我正在准备发布我的应用程序,并希望确保 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 代码。我说得对吗?
我在网上找到了这个。
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'
}
我在调试模式下使用的是最新版本的库2.0-alpha-1,没有找到库的发布依赖。
我做了以下事情:
- 我为每个构建模式创建了单独的文件夹(发布和调试)
- 调试文件夹的路径:app/src/debug
- 发布文件夹路径:app/src/release
然后我创建了一个 class 用于初始化泄漏金丝雀,名为 LeakCanaryInitializer.kt(我在两个构建文件夹中创建它)
- 调试:app/src/debug/java/LeakCanaryInitializer.kt
- 发布:app/src/release/java/LeakCanaryInitializer.kt
release模式中的class包含:
import android.content.Context
object LeakCanaryManager {
fun init(context: Context) {
// We should do nothing in the release mode
}
}
debug模式中的class包含:
import android.content.Context
import leakcanary.LeakCanary
import leakcanary.LeakSentry
object LeakCanaryManager {
fun init(context: Context) {
// Here you should write your custom initializing
}
}
然后在你的应用程序中class调用初始化方法:
LeakCanaryManager.init(this)
我的 gradle 文件只包含调试依赖项:
debugImplementation "com.squareup.leakcanary:leakcanary-android:2.0-alpha-1"
答案正确,但有一个 updated and easier solution 截至 2019 年 4 月 13 日:
dependencies {
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0-beta-3'
}
不需要 no-ops 或 proguard。
但是why?
还行,但是 how?
我搜索了这个问题的答案,但没有找到任何答案,这可能意味着这是一个基本问题。冒着显示我无知的风险,我还是要问。我正在准备发布我的应用程序,并希望确保 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 代码。我说得对吗?
我在网上找到了这个。
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'
}
我在调试模式下使用的是最新版本的库2.0-alpha-1,没有找到库的发布依赖。 我做了以下事情:
- 我为每个构建模式创建了单独的文件夹(发布和调试)
- 调试文件夹的路径:app/src/debug
- 发布文件夹路径:app/src/release
然后我创建了一个 class 用于初始化泄漏金丝雀,名为 LeakCanaryInitializer.kt(我在两个构建文件夹中创建它)
- 调试:app/src/debug/java/LeakCanaryInitializer.kt
- 发布:app/src/release/java/LeakCanaryInitializer.kt
release模式中的class包含:
import android.content.Context
object LeakCanaryManager {
fun init(context: Context) {
// We should do nothing in the release mode
}
}
debug模式中的class包含:
import android.content.Context
import leakcanary.LeakCanary
import leakcanary.LeakSentry
object LeakCanaryManager {
fun init(context: Context) {
// Here you should write your custom initializing
}
}
然后在你的应用程序中class调用初始化方法:
LeakCanaryManager.init(this)
我的 gradle 文件只包含调试依赖项:
debugImplementation "com.squareup.leakcanary:leakcanary-android:2.0-alpha-1"
答案正确,但有一个 updated and easier solution 截至 2019 年 4 月 13 日:
dependencies {
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0-beta-3'
}
不需要 no-ops 或 proguard。
但是why?
还行,但是 how?