You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin Multiplatform集成Sentry启动崩溃:DSN缺失报错

解决Kotlin Multiplatform中Sentry未初始化即崩溃的问题

问题背景

在KMM项目的共享模块添加Sentry依赖api("io.sentry:sentry-kotlin-multiplatform:0.0.1")后,还没执行自定义的initializeSentry初始化代码,App启动就触发崩溃,报错:

Unable to get provider io.sentry.android.core.SentryInitProvider: 
java.lang.IllegalArgumentException: DSN is required. Use empty string to disable SDK.

即使注释掉初始化代码,仅保留依赖也会触发同样崩溃。

问题原因

Sentry Android SDK默认通过SentryInitProvider这个ContentProvider在App启动早期自动执行初始化,这个时机早于Application的onCreate方法,你的手动初始化代码还没来得及设置DSN,就被自动初始化流程抛出了异常。

解决方案

1. 禁用自动初始化的Provider

在Android模块的AndroidManifest.xml中移除Sentry自动注册的SentryInitProvider,让初始化完全由你控制:

<application
    ...
    xmlns:tools="http://schemas.android.com/tools">

    <!-- 移除Sentry自动初始化的Provider -->
    <provider
        android:name="io.sentry.android.core.SentryInitProvider"
        android:authorities="${applicationId}.sentry-init-provider"
        tools:node="remove" />

</application>

注意要在<application>标签里添加xmlns:tools命名空间,确保tools:node="remove"生效。

2. 手动触发初始化

禁用自动初始化后,在Android Application的onCreate方法中调用你的初始化代码,确保DSN正确配置:

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        initializeSentry(this) { sentryOptions ->
            sentryOptions.dsn = "你的Sentry DSN地址"
            // 其他Sentry配置项
        }
    }
}

3. 可选:通过配置提前设置DSN(保留自动初始化)

如果不想禁用自动初始化,可以通过gradle配置提前注入DSN,让SentryInitProvider能获取到有效值:
在Android模块的build.gradle.kts中添加:

android {
    defaultConfig {
        manifestPlaceholders["sentryDsn"] = "你的Sentry DSN地址"
    }
}

或者在项目的gradle.properties中添加:

io.sentry.dsn=你的Sentry DSN地址

这样Sentry会自动读取配置的DSN,避免初始化时抛出异常。

内容的提问来源于stack exchange,提问作者Tobias Reich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:50:40