React Native Android构建报错: :app:checkDebugDuplicateClasses
React Native构建错误:Kotlin重复类冲突
错误信息
执行构建时出现以下重复类错误:
* What went wrong: Execution failed for task ':app:checkDebugDuplicateClasses'. > 1 exception was raised by workers: java.lang.RuntimeException: Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.0.jar (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.4.10.jar (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10) Duplicate class kotlin.internal.jdk7.JDK7PlatformImplementations found in modules jetified-kotlin-stdlib-1.8.0.jar (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk7-1.4.10.jar (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.10) Duplicate class kotlin.internal.jdk8.JDK8PlatformImplementations found in modules jetified-kotlin-stdlib-1.8.0.jar (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.4.10.jar (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10) Duplicate class kotlin.jdk7.AutoCloseableKt found in modules jetified-kotlin-stdlib-1.8.0.jar (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk7-1.4.10.jar (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.10) Duplicate class kotlin.random.jdk8.PlatformThreadLocalRandom found in modules jetified-kotlin-stdlib-1.8.0.jar (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.4.10.jar (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10) Duplicate class kotlin.streams.jdk8.StreamsKt found in modules jetified-kotlin-stdlib-1.8.0.jar (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.4.10.jar (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10) Duplicate class kotlin.streams.jdk8.StreamsKt$asSequence$$inlined$Sequence$1 found in modules jetified-kotlin-stdlib-1.8.0.jar (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.4.10.jar (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10) Duplicate class kotlin.streams.jdk8.StreamsKt$asSequence$$inlined$Sequence$2 found in modules jetified-kotlin-stdlib-1.8.0.jar (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.4.10.jar (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10) Duplicate class kotlin.streams.jdk8.StreamsKt$asSequence$$inlined$Sequence$3 found in modules jetified-kotlin-stdlib-1.8.0.jar (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.4.10.jar (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10) Duplicate class kotlin.streams.jdk8.StreamsKt$asSequence$$inlined$Sequence$4 found in modules jetified-kotlin-stdlib-1.8.0.jar (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.4.10.jar (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10) Duplicate class kotlin.text.jdk8.RegexExtensionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.0.jar (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.4.10.jar (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10) Duplicate class kotlin.time.jdk8.DurationConversionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.0.jar (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.4.10.jar (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10)
项目配置
根目录build.gradle
ext { buildToolsVersion = "30.0.3" minSdkVersion = 21 compileSdkVersion = 30 targetSdkVersion = 30 kotlinVersion = "1.4.10" RNNKotlinVersion = kotlinVersion playServicesVersion = "16.0.0" googlePlayServicesVersion = "17.0.0" } ... dependencies { classpath 'com.android.tools.build:gradle:4.0.1' classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") classpath 'com.google.gms:google-services:4.2.0' classpath 'io.fabric.tools:gradle:1.+' }
package.json依赖
"dependencies": { "@invertase/react-native-apple-authentication": "^2.2.2", "@notifee/react-native": "^0.5.1", "@react-native-community/async-storage": "^1.9.0", "@react-native-community/geolocation": "^2.0.2", "@react-native-community/netinfo": "2.0.10", "@react-native-community/picker": "^1.8.1", "axios": "^0.19.2", "immutable": "^4.0.0-rc.12", "libphonenumber-js": "^1.7.50", "lodash": "^4.17.15", "lottie-ios": "3.1.8", "lottie-react-native": "^3.5.0", "mobx": "^5.15.4", "mobx-react": "^6.1.8", "mobx-state-tree": "^3.15.0", "moment": "^2.26.0", "native-base": "^2.13.12", "react": "^16.12.0", "react-devtools-core": "3", "react-native": "0.61.5", "react-native-android-location-enabler": "1.1.0", "react-native-axios": "^0.17.1", "react-native-calendars": "^1.265.0", "react-native-datepicker": "^1.7.0", "react-native-dropdown-picker": "^5.4.4", "react-native-fast-image": "^8.1.5", "react-native-fbsdk": "^3.0.0", "react-native-firebase": "^5.6.0", "react-native-geolocation-service": "^5.0.0", "react-native-gesture-handler": "^1.6.0", "react-native-google-signin": "^2.1.1", "react-native-ibm-mobilefirst": "^8.0.2021040715", "react-native-inappbrowser-reborn": "^3.4.0", "react-native-maps": "^0.27.1", "react-native-navigation": "6.4.0", "react-native-navigation-hooks": "^5.0.0", "react-native-phone-call": "^1.0.9", "react-native-picker-select": "^8.0.4", "react-native-shadow": "^1.2.2", "react-native-swipeable": "^0.6.0", "react-native-vector-icons": "^6.6.0", "react-native-webview": "^9.2.2", "react-redux": "^7.2.0", "redux": "^4.0.5", "redux-persist": "^6.0.0", "redux-saga": "^1.1.3", "reselect": "^4.0.0" }
模块build.gradle依赖
dependencies { implementation project(':react-native-geolocation-service') implementation project(':lottie-react-native') implementation project(':react-native-android-location-enabler') implementation project(':@react-native-community_netinfo') implementation project(':@notifee_react-native') implementation project(':react-native-webview') //Add these lines implementation project(':react-native-firebase') implementation "com.google.android.gms:play-services-base:16.1.0" implementation "com.google.firebase:firebase-core:19.0.0" implementation "com.google.firebase:firebase-messaging:18.0.0" implementation "com.google.firebase:firebase-dynamic-links:19.0.0" implementation "com.google.firebase:firebase-invites:17.0.0" implementation "com.google.firebase:firebase-auth:17.0.0" implementation project(':react-native-inappbrowser-reborn') implementation 'com.android.support:support-v4:28.0.0' implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support:design:28.0.0' implementation 'com.android.support:customtabs:28.0.0' implementation 'com.google.android.gms:play-services-wallet:16.0.1' compile project(':oppwa.mobile-2.49.0') implementation project(':react-native-fast-image') implementation project(':@react-native-community_async-storage') implementation project(':react-native-navigation') implementation project(':@react-native-community_geolocation') implementation project(':react-native-maps') implementation 'com.android.support:multidex:1.0.3' implementation 'com.google.android.gms:play-services-maps:16.1.0' implementation fileTree(dir: "libs", include: ["*.jar"]) implementation "com.facebook.react:react-native:+" implementation project(path: ':oppwa.mobile-2.49.0') if (enableHermes) { def hermesPath = "../../node_modules/hermes-engine/android/"; debugImplementation files(hermesPath + "hermes-debug.aar") releaseImplementation files(hermesPath + "hermes-release.aar") } else { implementation jscFlavor } }
解决方案
1. 强制统一Kotlin依赖版本
在根目录build.gradle的allprojects块中添加版本强制策略,确保所有模块使用项目指定的Kotlin版本:
allprojects { repositories { // 保留原有仓库配置 } configurations.all { resolutionStrategy { force "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}" force "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${kotlinVersion}" force "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}" } } }
2. 定位冲突依赖来源
执行命令查看完整依赖树,找到引入Kotlin 1.8.0的第三方库:
./gradlew app:dependencies
找到对应依赖后,在模块build.gradle中排除冲突的Kotlin子依赖:
implementation project(':冲突库名称') { exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8' }
3. 清理构建缓存与依赖
执行以下命令清理旧缓存和依赖,重新安装:
./gradlew clean rm -rf node_modules rm package-lock.json # 若使用yarn则删除yarn.lock npm install # 或 yarn install
4. 匹配Gradle与Kotlin版本兼容性
当前使用的Gradle插件版本为4.0.1,建议使用与之兼容的Kotlin版本(如1.4.32),修改根build.gradle中的版本配置:
ext { // ...其他配置 kotlinVersion = "1.4.32" RNNKotlinVersion = kotlinVersion // ... }
内容的提问来源于stack exchange,提问作者Suleiman Zhukov
相关产品推荐
相关产品推荐

