AGP 9.0迁移中Kotlin Multiplatform集成Crashlytics插件遇阻求助
在AGP 9.0.0的KMP项目中配置Crashlytics的解决方案
核心问题原因
Crashlytics插件依赖com.android.application插件,而你当前模块使用的androidKmpLibrary是库类型插件,两者无法共存,且KMP项目中Crashlytics只能在Android应用模块中启用。
方案一:将当前模块改为KMP应用模块
如果你的:composeApp模块本身需要作为Android应用发布,可调整插件配置,将其转为支持多平台的Android应用模块:
调整插件列表
移除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 }配置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 } }配置KMP目标平台
在kotlin块中保留你的多平台配置,确保Android目标正常:kotlin { androidTarget { compilations.all { kotlinOptions { jvmTarget = "17" } } } // 其他平台配置(如iOS、桌面端等) // iosX64() // iosArm64() // desktop() }
方案二:拆分模块,将Crashlytics移至独立Android应用模块
如果:composeApp是通用KMP库模块,建议单独创建Android应用模块承载Crashlytics:
创建新的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")) }清理原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 }通过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
相关产品推荐
相关产品推荐

