Flutter Android构建报错:Kotlin版本不兼容及Release构建问题求助
问题背景
你开发Flutter应用时,使用Kotlin 2.2.0、Gradle 8.14.3、JVM Target 17环境,Debug构建因Kotlin版本不兼容问题,通过排除play-services-measurement-api和play-services-measurement-impl模块解决,但执行flutter build apk --release时触发minifyReleaseWithR8任务失败。
核心原因
排除上述两个模块后,R8混淆过程中无法找到相关类的引用,或Firebase Analytics的隐式依赖被移除,导致混淆逻辑触发报错。
解决方案
1. 添加针对性R8混淆规则
在android/app/proguard-rules.pro文件中添加以下规则,避免R8误删类或抛出引用错误:
# 保留Firebase Analytics核心类 -keep class com.google.firebase.analytics.FirebaseAnalytics { *; } -keep class com.google.firebase.analytics.ktx.FirebaseAnalyticsKtx { *; } # 忽略被排除模块的引用警告并保留相关类 -keep class com.google.android.gms.measurement.** { *; } -dontwarn com.google.android.gms.measurement.**
添加后重新执行Release构建,R8会跳过对这些类的严格检查,避免报错。
2. 升级Firebase Analytics版本(推荐)
从根源解决版本兼容问题,替换为兼容Kotlin 2.2.0的最新Firebase Analytics版本,示例如下:
// 在android/app/build.gradle中更新依赖 implementation 'com.google.firebase:firebase-analytics:23.1.0' // 替换为当前最新兼容版本
随后移除之前的exclude配置,执行flutter clean后重新构建,既无需排除模块,也能避免R8混淆问题。
3. 调整R8模式
在android/app/build.gradle的release构建块中关闭R8全模式,降低严格检查级别:
release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' // 添加该行关闭R8全模式 android.enableR8.fullMode = false }
注意:关闭全模式会减少部分优化,但能快速解决依赖缺失导致的混淆报错。
4. 强制统一依赖版本
执行./gradlew app:dependencies查看依赖树,确认是否有其他依赖引入了旧版play-services-measurement模块,在android/build.gradle中强制统一版本:
configurations.all { resolutionStrategy.force 'com.google.android.gms:play-services-measurement-api:23.1.0' resolutionStrategy.force 'com.google.android.gms:play-services-measurement-impl:23.1.0' }
统一版本后可移除之前的exclude配置,重新构建即可。
内容的提问来源于stack exchange,提问作者Dmytro T

