开启minifyEnabled true后执行./gradlew assembleRelease构建失败求助
当在android/app/build.gradle中设置minifyEnabled true并执行./gradlew assembleRelease命令时,构建失败,新项目与已有项目均出现该问题。
相关配置
android/app/build.gradle中的buildTypes配置:
buildTypes { debug { signingConfig signingConfigs.debug } release { signingConfig signingConfigs.release minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" } }
报错信息
ERROR:/Users/mesutaltas/.gradle/caches/transforms-3/a334453207e8f257bd8e5065fd1e9287/transformed/jetified-kotlin-reflect-1.8.10.jar: R8: Type kotlin.reflect.jvm.internal.impl.serialization.deserialization.builtins.BuiltInsResourceLoader is defined multiple times: /Users/mesutaltas/.gradle/caches/transforms-3/a334453207e8f257bd8e5065fd1e9287/transformed/jetified-kotlin-reflect-1.8.10.jar:kotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInsResourceLoader.class, /Users/mesutaltas/.gradle/caches/transforms-3/a334453207e8f257bd8e5065fd1e9287/transformed/jetified-kotlin-reflect-1.8.10.jar:META-INF/versions/9/kotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInsResourceLoader.class
w: Detected multiple Kotlin daemon sessions at build/kotlin/sessions
解决方法
这个问题源于kotlin-reflect jar包中存在针对不同JDK版本的重复类文件,导致R8混淆时冲突。可尝试以下方案:
升级Kotlin版本
Kotlin 1.8.20及以上版本已修复该问题。在项目根目录的build.gradle中修改插件版本:buildscript { ext.kotlin_version = "1.8.20" // 或更高稳定版本 dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }排除重复类文件
若暂时无法升级,在app模块的build.gradle中配置打包时排除重复路径:android { packagingOptions { exclude 'META-INF/versions/**/*.class' } }清理Gradle缓存
清除缓存避免损坏的jar包影响构建:./gradlew clean rm -rf ~/.gradle/caches随后重新执行构建:
./gradlew assembleRelease临时禁用Kotlin守护进程
针对多守护进程的提示,构建时添加参数禁用:./gradlew assembleRelease --no-daemon
内容的提问来源于stack exchange,提问作者Recep Altaş

