在 Leak Canary 2 中手动安装?

Manual install in Leak Canary 2?

我是使用 Leak Canary 2 的用户之一。 感谢这些东西,我可以修复我的应用程序中的内存泄漏错误。 我最近注意到(我可能知道的晚了)有更新 Leak Canary 2.2,所以我通过在 Manifest

下面添加一行来为我的应用程序应用更新的版本

debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.2'

在实施泄漏金丝雀之前,我想让它仅在我通过设置在我的应用程序中打开开发人员模式时才开始检测内存泄漏(也安装 "Leaks" 应用程序)。我将我的应用程序作为 apk 文件共享,以使用户能够轻松测试和查找错误。如果 "Leaks" 应用程序在用户安装我的应用程序时突然安装,即使他们没有打开开发者模式,他们可能不知道这个应用程序是什么,实际上,它只对我有用,因为其他用户不会理解什么这个应用程序在说。但是根据 this site,我不需要输入任何代码来安装 leak canary;它将自动安装。我无法阻止它被安装到用户的设备上。

class MainActivity : AppCompatActivity() {

    companion object {
        var installed = false
        @JvmField
        var watcher: RefWatcher? = null
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        ....

        val shared = getSharedPreferences(StaticStore.CONFIG, Context.MODE_PRIVATE)

        if (!installed && shared.getBoolean("DEV_MODE", false)) {
            watcher = LeakCanary.install(application)
            installed = true
        }

        ....
    }
}

上面的代码是我在 Leak Canary 2.2 之前进行手动安装的方式。引用自 this answer。当应用程序检查来自共享首选项的布尔值 (DEV_MODE) 为真时,它允许安装,并使 watcher 检查其他活动或线程。如果我不调用 LeakCanary.install(application), "Leaks" 应用程序将不会被安装,所以用户可以在没有看到此附加应用程序的情况下使用我的应用程序。当然,如果他们打开开发者模式,他们可以使用内存泄漏检测功能。

但是没有像 LeakCanaray.install() 这样的方法(还有 RefWatcher)现在,所以我不能像以前那样执行手动安装...

是否有任何方法可以在 Leak Canary 2.2 中执行手动安装?

我是否必须放弃使其不自动安装并通知用户 "Leaks" 应用程序将被安装?

请参阅代码配方中的 "Disabling LeakCanary":https://square.github.io/leakcanary/recipes/#disabling-leakcanary

您需要定义一个布尔值 xml 资源 leak_canary_add_launcher_icon 并将其设置为 false(=> 无启动器图标)

您可以关闭实例监视:

AppWatcher.config = AppWatcher.config.copy(enabled = false)

随着最近的 v2.6 更新,LeakCanary 的手动安装发生了变化。

现在您需要添加以下布尔资源:

<bool name="leak_canary_watcher_auto_install">false</bool>

和 运行 以下 API 每当您准备好使用默认观察器(Activity、片段、RootView、服务)进行手动安装时:

JAVA:

AppWatcher.INSTANCE.manualInstall(app, WATCH_DURATION_MILLISECONDS);

科特林:

AppWatcher.manualInstall(app, WATCH_DURATION_MILLISECONDS);

有关详细信息,请阅读 official documentation here.