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

AGP 9.0迁移中Kotlin Multiplatform集成Crashlytics插件遇阻求助

在AGP 9.0.0的KMP项目中配置Crashlytics的解决方案

核心问题原因

Crashlytics插件依赖com.android.application插件,而你当前模块使用的androidKmpLibrary是库类型插件,两者无法共存,且KMP项目中Crashlytics只能在Android应用模块中启用。


方案一:将当前模块改为KMP应用模块

如果你的:composeApp模块本身需要作为Android应用发布,可调整插件配置,将其转为支持多平台的Android应用模块:

  1. 调整插件列表
    移除androidKmpLibrary插件,替换为com.android.application插件,保留其他KMP相关插件:

    plugins {
        alias(libs.plugins.kotlinMultiplatform)
        alias(libs.plugins.serialization)
        alias(libs.plugins.ksp)
        alias(libs.plugins.room)
        alias(libs.plugins.jetbrainsCompose)
        alias(libs.plugins.pluginCompose)
        alias(libs.plugins.googleServices)
        alias(libs.plugins.crashlytics)
        id("com.android.application") // 替换原androidKmpLibrary
    }
    
  2. 配置Android应用参数
    在android块中补充应用必需的配置项(替换为你的实际信息):

    android {
        namespace = "com.your.app.namespace"
        compileSdk = 34
    
        defaultConfig {
            applicationId = "com.your.app.id"
            minSdk = 24
            targetSdk = 34
            versionCode = 1
            versionName = "1.0"
        }
    
        buildTypes {
            release {
                minifyEnabled true
                proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
                // 启用Crashlytics mapping文件上传
                firebaseCrashlytics {
                    mappingFileUploadEnabled true
                }
            }
            debug {
                // 调试环境关闭mapping文件上传
                firebaseCrashlytics {
                    mappingFileUploadEnabled false
                }
            }
        }
    
        compileOptions {
            sourceCompatibility = JavaVersion.VERSION_17
            targetCompatibility = JavaVersion.VERSION_17
        }
    }
    
  3. 配置KMP目标平台
    在kotlin块中保留你的多平台配置,确保Android目标正常:

    kotlin {
        androidTarget {
            compilations.all {
                kotlinOptions {
                    jvmTarget = "17"
                }
            }
        }
    
        // 其他平台配置(如iOS、桌面端等)
        // iosX64()
        // iosArm64()
        // desktop()
    }
    

方案二:拆分模块,将Crashlytics移至独立Android应用模块

如果:composeApp是通用KMP库模块,建议单独创建Android应用模块承载Crashlytics:

  1. 创建新的Android应用模块
    在项目中新增一个纯Android应用模块(如:app),在其build.gradle.kts中配置:

    plugins {
        id("com.android.application")
        alias(libs.plugins.googleServices)
        alias(libs.plugins.crashlytics)
    }
    
    android {
        // 参考方案一的Android应用配置
        namespace = "com.your.app.namespace"
        compileSdk = 34
        // ... 其他配置
    }
    
    dependencies {
        // 依赖你的KMP库模块
        implementation(project(":composeApp"))
    }
    
  2. 清理原KMP库模块的插件
    在:composeApp的build.gradle.kts中移除googleServices和crashlytics插件:

    plugins {
        alias(libs.plugins.kotlinMultiplatform)
        alias(libs.plugins.serialization)
        alias(libs.plugins.ksp)
        alias(libs.plugins.room)
        alias(libs.plugins.jetbrainsCompose)
        alias(libs.plugins.pluginCompose)
        alias(libs.plugins.androidKmpLibrary)
        // 移除googleServices和crashlytics
    }
    
  3. 通过expect/actual封装Crashlytics功能
    在KMP库中定义跨平台的Crashlytics接口,在Android平台实现调用Firebase API,其他平台做空实现或适配:

    // commonMain/CrashlyticsHelper.kt
    expect class CrashlyticsHelper {
        fun log(message: String)
        fun recordException(throwable: Throwable)
    }
    
    // androidMain/CrashlyticsHelper.kt
    actual class CrashlyticsHelper {
        actual fun log(message: String) {
            com.google.firebase.crashlytics.FirebaseCrashlytics.getInstance().log(message)
        }
    
        actual fun recordException(throwable: Throwable) {
            com.google.firebase.crashlytics.FirebaseCrashlytics.getInstance().recordException(throwable)
        }
    }
    
    // iosMain/CrashlyticsHelper.kt(示例)
    actual class CrashlyticsHelper {
        actual fun log(message: String) {
            // 适配iOS Crashlytics,或留空
        }
    
        actual fun recordException(throwable: Throwable) {
            // 适配iOS Crashlytics,或留空
        }
    }
    

额外注意事项

  • 确保google-services插件版本与AGP 9.0.0兼容,建议使用4.4.1及以上版本
  • 同步项目前,确认google-services.json已放置在Android应用模块的src/main目录下
  • 调试Crashlytics时,可通过adb shell setprop log.tag.FirebaseCrashlytics DEBUG开启日志输出

内容的提问来源于stack exchange,提问作者Álvaro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 15:05:04