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

Detox测试构建失败:':react-native-inappbrowser-reborn:mergeDebugAndroidTestJavaResource'任务报错

解决Detox测试构建中的kotlin-stdlib文件冲突问题

问题场景

在app/build.gradle中添加implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))后,主应用可正常构建,但Detox测试构建时抛出以下错误:

任务':react-native-inappbrowser-reborn:mergeDebugAndroidTestJavaResource'执行失败。
执行com.android.build.gradle.internal.tasks.MergeJavaResWorkAction时发生失败:
发现2个路径为'META-INF/kotlin-stdlib-jdk8.kotlin_module'的文件,来源如下:

  • /home/sp/.gradle/caches/transforms-3/4f539c328e5bb19593050e3384e51919/transformed/jetified-kotlin-stdlib-jdk8-1.4.10.jar
  • /home/sp/.gradle/caches/transforms-3/c1d521098bb09d070895b1fa3c6468bd/transformed/jetified-kotlin-stdlib-1.8.0.jar

已尝试以下方案但未解决:

  • 配置kotlin.stdlib.jdk.variants.version.alignment=false
  • 多种packagingOptions排除规则:
    exclude("META-INF/kotlin-stdlib-common.kotlin_module")
    exclude("META-INF/kotlin-stdlib-jdk7.kotlin_module")
    exclude("META-INF/kotlin-stdlib-jdk8.kotlin_module")
    exclude("META-INF/kotlin-stdlib.kotlin_module")
    exclude("kotlin/annotation/annotation.kotlin_builtins")
    exclude("kotlin/collections/collections.kotlin_builtins")
    exclude("kotlin/coroutines/coroutines.kotlin_builtins")
    exclude("kotlin/internal/internal.kotlin_builtins")
    exclude("kotlin/kotlin.kotlin_builtins")
    exclude("kotlin/ranges/ranges.kotlin_builtins")
    exclude("kotlin/reflect/reflect.kotlin_builtins")
    

解决方案

方案1:为测试变体配置packagingOptions

全局的packagingOptions可能未覆盖Detox使用的debugAndroidTest测试变体,需明确为测试构建添加排除规则:

android {
    // 保留原有配置...

    // 全局配置(优先尝试)
    packagingOptions {
        exclude 'META-INF/kotlin-stdlib-jdk8.kotlin_module'
        exclude 'META-INF/kotlin-stdlib-jdk7.kotlin_module'
        exclude 'META-INF/kotlin-stdlib.kotlin_module'
        exclude 'META-INF/kotlin-stdlib-common.kotlin_module'
    }

    // 若全局配置无效,针对所有测试变体单独配置
    testVariants.all { variant ->
        variant.packagingOptions.apply {
            exclude 'META-INF/kotlin-stdlib-jdk8.kotlin_module'
            exclude 'META-INF/kotlin-stdlib-jdk7.kotlin_module'
            exclude 'META-INF/kotlin-stdlib.kotlin_module'
            exclude 'META-INF/kotlin-stdlib-common.kotlin_module'
        }
    }
}

方案2:强制统一kotlin-stdlib版本

通过Gradle的resolutionStrategy强制所有模块使用与kotlin-bom一致的版本,从根源消除版本冲突:

configurations.all {
    resolutionStrategy {
        force 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0'
        force 'org.jetbrains.kotlin:kotlin-stdlib:1.8.0'
    }
}

原理说明

添加kotlin-bom后,主应用依赖的kotlin版本统一为1.8.0,但react-native-inappbrowser-reborn模块依赖了旧版本(1.4.10)的kotlin-stdlib-jdk8,导致测试构建时两个版本的同名文件冲突。上述两种方案分别通过排除重复文件、强制统一版本的方式解决冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:02:09