Release变体启动崩溃:找不到PrimitiveSnapshotStateKt类
解决方案:Release变体启动崩溃(NoClassDefFoundError: PrimitiveSnapshotStateKt)
以下是针对该问题的具体排查和修复步骤:
检查混淆/R8规则
Release变体默认开启混淆优化,大概率是Compose Runtime核心类被误移除。在app/proguard-rules.pro中添加以下规则,确保Compose相关类不被优化删除:# 保留Compose Runtime核心类 -keep class androidx.compose.runtime.** { *; } -keep class androidx.compose.runtime.external.kotlinx.** { *; } # 保留Compose UI及组件类 -keep class androidx.compose.ui.** { *; } -keep class androidx.compose.foundation.** { *; } -keep class androidx.compose.material3.** { *; }同时确保Release变体使用AndroidX默认混淆文件,在
app/build.gradle.kts中:buildTypes { release { minifyEnabled = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } }统一Compose依赖版本
确保所有Compose依赖通过BOM统一管理,避免版本不一致引发的类缺失问题。在app/build.gradle.kts的依赖块中:dependencies { implementation(platform("androidx.compose:compose-bom:2024.04.00")) // 所有Compose依赖无需指定版本,由BOM统一控制 implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-graphics") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.material3:material3") implementation("androidx.compose.runtime:runtime-livedata") }对齐编译配置
保证Release与Debug变体的编译选项完全一致,避免JVM版本不兼容导致的运行时类加载失败:android { compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = "17" freeCompilerArgs += "-Xskip-prerelease-check" } }排查资源收缩影响
临时关闭shrinkResources测试,确认是否是资源收缩导致关联类被误删:buildTypes { release { shrinkResources = false // 临时关闭验证 minifyEnabled = true } }若关闭后恢复正常,再针对性调整资源收缩规则。
清理缓存并重建
执行命令清理构建缓存,避免旧缓存干扰Release构建:./gradlew clean assembleRelease检查Firebase插件兼容性
确保Firebase Crashlytics插件版本与Gradle插件、Compose版本匹配,在项目根目录build.gradle.kts中:plugins { id("com.android.application") version "8.2.2" apply false id("org.jetbrains.kotlin.android") version "1.9.22" apply false id("com.google.firebase.crashlytics") version "2.9.9" apply false }
内容的提问来源于stack exchange,提问作者Marco Portacio
相关产品推荐
相关产品推荐

